본문 바로가기

SQLD

SQLD. 3

7. 관계와 조인

관계

개념: 엔터티의 인스턴스 사이의 논리적인 연관성

관계를 맺는다: 부모의 식별자를 자식에 상속, 상속된 속성을 매핑키(조인키)로 활용 -> 부모, 자식을 연결

 

관계의 분류

존재 관계: 엔터티 간의 상태를 의미 ex. 부서( in 사원)

행위 관계: 엔터티 간의 어떤 행위가 있는 것을 의미 ex. 고객( in 주문)

 

조인

데이터 중복을 피하기 위해 테이블을 정규화에 의해 분리, 분리되면서 두 테이블은 서로 관계를 맺음, 다시 두 테이블의 데이터를 동시에 출력하거나 관계가 있는 테이블을 참조하기 위해선 데이터를 연결해야 함 -> 조인은 이 과정을 의미

select a.계좌번호 b.관리점
  from 계좌 as a, 관리점 as b
  where a.관리점코드 = b.관리점코드
  and a.계좌번호 = '100111'.

 

계층형 데이터 모델: 자기 자신끼리 관계가 발생(셀프 조인)

select e1.ename as '사원이름'
       e2.ename as '매니저이름'
   from emp e1 emp e2
   where e1.mgr = e2.empno.

 

상호 배타적 관계: 두 테이블 중 하나만 가능한 관계

ex. 주문 엔터티에는 개인 또는 법인번호 둘 중 하나만 상속 가능 => 상호배타적 관계


8. 트랜잭션

- 하나의 연속적인 업무 단위

- 트랜잭션에 의한 관계는 필수적인 관계 형태

- 하나의 트랜잭션에는 여러 select, insert, delete, update 등 포함 가능

 

주의

서로 독립적으로 발생 X

부분 COMMIT 불가 -> 동시 COMMIT 혹은 ROLLBACK 처리

 

필수적, 선택적 관계와 ERD

- 필수: 두 엔터티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성

- 선택: 두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현

 

IE 표기법

- 원을 사용하여 필수적, 선택적 관계 구분

- 필수적 관계에는 원을 그리지 않음

- 선택적 관계에는 관계선 끝에 원을 그림 

 

Barker 표기법

- 실선과 점선으로 구분

- 필수적 관계는 실선으로 표기

- 선택적 관계는 점선으로 표기


9. NULL

개념

DBMS에서 아직 정해지지 않은 것을 의미

0, 빈문자열("")과는 다름

모델 설계 시 각 컬럼별로 NULL을 허용할 지 결정

 

특성 

1. NULL을 포함한 연산 결과는 항상 NULL ex. 251 + NULL = NULL / NULL + 6524 = NULL

해결법: NULL을 치환하고 계산 = NVL(<NULL이 있는 컬럼 이름>, <치환할 내용>)

 

2. 집계함수는 NULL을 제외한 연산 결과 리턴

* sum, avg, min, max 등의 함수는 항상 NULL을 무시

 

NULL의 ERD 표기법

IE 표기법은 NULL 허용 여부 X

Barker 표기법은 속성 앞에 동그라미가 있으면 NULL 허용 속성 의미


10. 식별자(본질 v 인조)

본질 식별자: 업무에 의해 만들어지는 식별자 (반드시 필요)

인조 식별자: 인위적으로 만들어지는 식별자 (꼭 필요하진 않지만 관리의 편의 등을 이유로 인위적으로 만들어지는 식별자), 자동으로 증가하는 일련번호와 같음

 

주문 상세 테이블 설계 시 다음과 같은 식별자 고려 가능

1. PK: 주문번호 + 상품번호로 설계

-> 본질 식별자(주문번호 + 상품번호)

-> 하나의 주문번호로 같은 상품의 주문 결과 저장 x

 

2. PK: 주문번호 + 주문순번(주문순번 컬럼 생성)

-> 매 주문마다 동일한 상품 주문 시 주문 순번을 정하기 위해 상품의 주문 횟수를 반드시 파악해야 하기 때문에 불편

 

3. PK: 주문상세번호 (인조 식별자)

-> 주문상세번호로 각 주문이력을 구분하기 때문에 같은 주문의 같은 상품이력이 저장될 수 있음

-> 주문상세번호만 주식별자기 때문에 불필요한 정보들이 중복 저장될 가능성 있음

-> 쓸모없는 인덱스가 생성될 수 있음

 

인조 식별자 단점

1. 중복 데이터 발생 -> 데이터 품질 저하

2. 불필요한 인덱스 생성 -> 저장공간 낭비 및 DML 성능 저하

 

* 인덱스는 원래 조회 성능을 향상시키기 위한 객체, 인덱스는 DML(select, update, insert, delete)시 INDEX SPLIT 현상이 발생해 성능이 저하됨


출처

https://www.youtube.com/@hongdatalab

 

홍쌤의 데이터 랩

홍은혜 강사

www.youtube.com

 

'SQLD' 카테고리의 다른 글

SQLD. 2  (0) 2024.03.05
SQLD. 1  (0) 2024.03.04