기록하기

식별(강결합)관계와 비식별(약결합) 관계 본문

computer science/database

식별(강결합)관계와 비식별(약결합) 관계

jjungdev 2022. 6. 5. 23:39

DB 를 설계할 때 엑셀이나 ER 다이어그램을 이용하여 도메인과 속성을 정의하고, 관계를 정의해보며 설계를 진행한다.

예를 들어 반려동물과 법적 보호자 사이에는 '소유'라는 속성이 있음을 이해한 뒤 관계를 정의해보면 더 정리가 잘 되기 때문에 꼭 ERD 를 그리지 않더라도 속성과 관계를 정의해보는 것을 습관으로 하려고 한다. 하지만 매 번 가장 어려운 것이 식별, 비식별 관계를 정의하는 것과 일대다인지 다대다인지 등을 정의하는 것이 가장 어렵기에 정리를 해보려고 한다.

 

 

식별 / 비식별 관계

쉽게 정의하는 식별, 비식별 관계의 정의는 아래와 같다.

  • 키로 찾을 때 여러 개가 나오면 -> 약결합(비식별)
  • 무조건 한 개만 나오면 -> 강결합(식별)

만약, 아래와 같이 테이블이 구성되어 있다고 가정해보자

반려동물 tb_pet
id INTEGER NOT NULL [ PK ]
name VARCHAR(10) NOT NULL
법적 보호자 tb_member
id INTEGER NOT NULL [ PK ]
name VARCHAR(10) NOT NULL

위 관계에서는 반려동물과 법적 보호자 사이에는 '소유'의 관계로 연결이 되어 있는데 한 사람이 여러 반려동물을 키울 수 있고, 한 반려동물이 여러 명의 보호자를 가질 수 있다면 다대다 관계가 형성이 될 것이다. 이 경우 연관관계 테이블이 생성이 되는데 그 테이블을 아래와 같이 설계를 했다고 가정하고, 이 경우 tb_pet 과 식별인지 비식별인지 살펴보도록 하겠다.

반려동물, 법적 보호자 연관관계 테이블 rtb_member_pet
id NTEGER NOT NULL [ PK ]
pet_id FK
member_id FK

 

pet 과의 관계에 있어서, rtb_member_pet 은 pet_id 가 외래키로 사용하고 있기에 비식별 관계이다.(member 도 마찬가지이다.)

즉, pet_id 로 데이터를 찾게 되면 여러 개의 데이터가 찾아질 수 있으므로 비식별 & 약결합 상태이다.

하지만 만약 pet_id 가 rtb_member_pet 에서 기본키로 사용이 되고 있다면 식별 관계가 된다.

즉 pet_id 로 데이터를 찾을 때 꼭 한 개의 데이터만 찾아진다면 식별 & 강결합 상태가 된다.

 

이를 정리를 해보면 아래와 같다.

식별 관계 부모 테이블의 기본키 또는 유니크 키를 자식 테이블이 자신의 기본키로 사용하는 관계
비식별 관계 부모 테이블의 기본키 또는 유니크 키를 자신의 기본키로 사용하지 않고, 외래 키로 사용하는 관계

 

 

 

참고

https://deveric.tistory.com/108

 

[Database] 식별관계와 비 식별관계

RDBMS의 테이블을 생성하고, 각 테이블마다 관계를 설정해 줄 때 일반적으로 외래 키를 사용하곤 합니다. 외래 키를 통해 다른 테이블과 같은 키를 공유하고 이를 이용하여 조인하여 관계를 이용

deveric.tistory.com

 

'computer science > database' 카테고리의 다른 글

MariaDB - INSERT ON DUPLICATE KEY UPDATE  (0) 2022.05.22
MySQL - CHAR 와 VARCHAR  (0) 2022.05.15