외래키의 사용 - 식별관계와 비식별관계
Back-End/Data Base 2019. 7. 16. 14:371. 외래키 (Foreign Key)
아래와 같이 상품테이블과 주문테이블이 있다고 가정했을때, 하나의 상품은 여러 주문에서 구매할 수 있고, (재고가 있을시)
하나의 주문은 여러 상품을 구매할 수 있다.
다대다 (N : M) 관계라는 뜻이다.
ERD 상으로는 이렇게 그릴 수 있지만 다대다 관계는 중간에 관계 테이블을 추가해서 사용한다.
주문_상품이라는 관계 테이블을 추가했다 (주문 테이블에 속성도 추가) 주문_상품 테이블은 각각 상품 테이블과 일대다, 주문 테이블과
다대일 관계를 갖고있다. 주문_상품이 없는 상품은 존재할 수 있지만 주문_상품이 없는 주문은 존재할 수 없다.
주문_상품 테이블은 관계 테이블로서 주문번호와 상품번호를 갖고 있다. 상품번호와 주문번호는 각각의 테이블에서는 기본키였지만
주문_상품테이블에서는 관계를 찾아가기위한 참조키로서 외래키 (Foreign Key)라고 부른다.
2. 식별관계 (Identifying Relationship)
위에 있는 주문테이블을 보면 속성중에 회원 ID가 존재한다.
회원 ID는 ERD상에는 나타나지 않은 회원 테이블의 기본키이며, 주문테이블이 외래키로 갖고있는 것이다.
즉 주문 테이블도 회원과의 관계를 이미 지니고 있는 것이다.
다시말해서 주문_상품 테이블도 테이블이니 기본키가 필요하다는 것이다.
주문번호와 상품번호, 단독으로는 기본키가 될 수 없지만 두 키를 합친 복합키라면 기본키가 될 수 있다는 것이다.
기본키는 2개 이상의 컬럼 (속성) 으로 구성되는 것도 가능하고, 외래키가 기본키가 되는것도 충분히 가능하다.
이렇게 외래키를 기본키로 사용하는 관계를 식별 관계 (Identifying Relationship) 이라고 한다.
3. 비식별관계 (Non Identifying Relationship)
위에서 알아본 관계는 하나의 주문에서 같은 상품을 2개 이상 사는 경우는 고려하지 않았다.
만약 주문번호 1001 주문에서 상품번호 1001, 1001, 1002 상품을 구매한다면 주문번호와 상품번호로 기본키를 구성할 수 없게 된다.
(실제로는 상품개수라는 속성을 추가해서 개수로 관리한다.)
이럴때는 인조키를 사용하면 된다.
외래키들을 기본키로 사용하지 않고 일반 속성으로 취급하는 관계를 비식별관계라고 표현한다.
ERD에서 비식별 관계는 관계를 점선으로 표시한다.
관계 테이블에서는 식별 관계보다는 인조키를 이용한 비식별 관계를 권장한다.
출처
'Back-End > Data Base' 카테고리의 다른 글
오라클 db export 방법 (0) | 2019.08.31 |
---|---|
기본키 - 자연키, 인조키 (1) | 2019.07.16 |
ERD (ER 다이어그램) 작성 방법 (0) | 2019.07.15 |
ERD (ER 다이어그램) Cloud (0) | 2019.07.08 |
MongoDB 문법, SQL과의 비교 (0) | 2019.07.08 |