DB/mysql

식별, 비식별 관계

STUFIT 2023. 10. 31. 11:26
반응형

데이터베이스 설계에서 식별 관계(Identifying Relationship)와 비식별 관계(Non-Identifying Relationship)는 두 테이블 간의 관계에서 외래 키(Foreign Key)가 어떻게 사용되는지에 대한 개념입니다.

1. 식별 관계 (Identifying Relationship)

- 식별 관계에서, 자식 테이블의 외래 키가 동시에 자신의 기본 키(Primary Key)의 일부가 됩니다.
- 이 관계는 부모 테이블의 기본 키가 자식 테이블에 없으면 의미가 없는 경우에 사용됩니다. 즉, 자식 테이블의 레코드가 부모 테이블의 레코드에 의해 식별됩니다.
- 부모 테이블과 자식 테이블 간에 강한 종속성이 있습니다. 부모 레코드가 삭제되면 관련 자식 레코드도 삭제됩니다.(엄격한 무결성 제약조건).
- 일반적으로 1:1 또는 1:M 관계에서 자주 사용됩니다.

2. 비식별 관계 (Non-Identifying Relationship)

- 비식별 관계에서, 자식 테이블의 외래 키는 자신의 기본 키와는 별개입니다.
- 부모 테이블의 기본 키가 자식 테이블에 복사되어 참조는 하지만, 자식 테이블의 기본 키로는 사용되지 않습니다.
- 부모와 자식 간에는 약한 종속성이 있습니다. 부모 레코드가 삭제되더라도 자식 레코드는 삭제되지 않을 수 있습니다.(옵셔널한 관계).
- 일반적으로 M:N 관계 또는 선택적 관계에서 볼 수 있습니다.

이러한 구분은 ERD(엔티티 관계 다이어그램)에서 중요하며, 외래 키가 어떻게 사용되는지에 따라 데이터 무결성, 데이터베이스 성능, 그리고 응용 프로그램 로직에 영향을 줄 수 있습니다.

 

3. 예제
(1) 식별 관계 예시

고객(Customer)과 주문(Order)의 관계를 예시로 들겠습니다. 여기서 주문은 특정 고객에게만 속할 수 있습니다.

**고객(Customer) 테이블:**
- CustomerID (기본 키)
- Name
- Address

**주문(Order) 테이블:**
- OrderID (기본 키)
- CustomerID (외래 키이자 기본 키의 일부)
- OrderDate

여기서 `Order` 테이블의 `CustomerID`는 고객을 식별하는 데 필수적이며, 주문 자체의 식별에도 사용됩니다. 이는 주문이 고객 없이는 존재할 수 없음을 의미합니다. 또한, `OrderID`와 `CustomerID`를 함께 사용하여 주문을 고유하게 식별할 수 있습니다.

### 비식별 관계 예시

책(Book)과 저자(Author)의 관계를 생각해봅시다. 한 책은 여러 저자가 공동으로 쓸 수 있고, 한 저자는 여러 책을 쓸 수 있습니다.

**저자(Author) 테이블:**
- AuthorID (기본 키)
- Name

**책(Book) 테이블:**
- BookID (기본 키)
- Title

**저자_책(Author_Book) 관계 테이블:**
- AuthorID (외래 키)
- BookID (외래 키)
- Contribution (저자의 기여도)

여기서 `Author_Book` 테이블은 저자와 책 사이의 M:N 관계를 나타내는 연결 테이블입니다. 이 테이블에서 `AuthorID`와 `BookID`는 두 테이블을 연결하는 외래 키이지만, 각각의 기본 키는 아닙니다. 각 저자와 책의 레코드는 독립적으로 존재할 수 있으며, 이 관계는 선택적입니다.

이 예시에서 `Author_Book` 테이블에 있는 `AuthorID`와 `BookID`는 각각 저자와 책을 식별하지만, 테이블 자체의 기본 키로는 사용되지 않습니다. 이는 저자 또는 책의 레코드가 삭제되어도 다른 레코드에 영향을 주지 않음을 의미합니다.

반응형