ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Database] 식별관계 비식별관계 비교
    DB/DataBase 2023. 1. 10. 15:15

     

     

    exERD에서 테이블을 설계할 때 창고에서 product 테이블의 기본키인 상품코드 값을 가져와야된다. 가져올 때 식별로 가져와야할까 비식별로 가져와야할까?? 그 둘의 의미 차이가 무엇인지 오늘 정리해보려한다. 

     

     

    식별 비식별 관계는 외래키를 통해 다른 테이블과 같은 키를 공유하고 이를 이용하여 조인하여 관계를 이용하는 방식을 사용한다. 외래 키를 사용하여 테이블 간 관계를 정립해 줄 때 사용하는 전략은 크게 식별 관계, 비식별 관계 전략이 있다. 

     

     

     

    📑 식별관계 

     

     

    식별 관계란, 부모 테이블의 기본키 유니크 키를 자식 테이블이 자신의 기본키로 사용하는 관계이다. 부모 테이블의 키가 자신의 기본키에 포함되기 때문에 반드시 부모 테이블에 데이터가 존재해야 자식 테이블에 데이터를 입력할 수 있다. 즉) 부모에 데이터가 없다면, 자식 테이블의 데이터는 생길 수 없다.

     

    식별 관계는 ERD 상에서 실선으로 표시된다. 

     

     

    📑 비식별 관계

     

     

    비식별 관계란 부모 테이블의 기본키 또는 유니크 키를 자신의 기본키로 사용하지 않고, 외래 키로 사용하는 관계이다. 자식 데이터는 부모 데이터가 없어도 독립적으로 생성될 수 있다. 부모와의 의존성을 줄일 수 있기 때문에 조금 더 자유로운 데이터 생성과 수정이 가능하다. 

     

     

     


     

    식별 관계인 경우, pk는 중복해서 존재할 수 없다. 그렇기 때문에 개발자 실수로 데이터를 db에 입력하려고 해도 데이터 입력 자체가 불가능해진다. 즉) 위에 사진에서 살펴보면 12345라는 번호를 가진 자동차에 pk 값인 바퀴 위치가 동일한 left, left의 값은 2번 들어갈 수 없다. 

     

    만약 데이터를 넣기 위해서 공통 코드를 변경하거나 테이블의 데이터와 구조를 모두 변경해야하는 상황이 발생할 수 있다. 따라서 테이블 설계 시 비식별 관계로 테이블을 설계하는 것을 권장한다고 한다. 

     

     

     

      장점 단점
    식별 - 데이터의 정합성 유지를 DB에서 한 번 더 할 수 있다. 
    - 자식 테이블에 데이터가 존재하면 부모 데이터도 반드시 존재한다고 보장할 수 있다.
    - 요구사항이 변경되었을 경우 구조 변경이 어렵다.
    비식별 - 변경되는 요구사항을 유동적으로 수용할 수 있다.
    - 부모 데이터와 독립적인 자식 데이터를 생성할 수 있다. 
    - 데이터 정합성을 지키기 위해 별도의 비즈니스 로직이 필요하다.
    - 자식 데이터가 존재해도 부모 데이터가 존재하지 않을 수 있다.
    - 무결성을 보장하지 않는다. 
    반응형

    'DB > DataBase' 카테고리의 다른 글

    [MSSQL] MSSQL이란? (MySQL, Oracle 차이점)  (0) 2023.06.15
    [DB] Index, 인덱스 사용하는 이유  (1) 2023.01.11

    댓글

Designed by Tistory.