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