티스토리 뷰

DataBase

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

onlog writer 2023. 6. 16. 23:15

 

ERD를 그리고 난 후 테이블 간의 관계를 맺으려고 할 때 식별관계와 비식별관계에 대해 더 자세히 알고싶어 검색 후 정리하게 되었다. 

 

 

식별관계

 

 

부모 테이블의 기본키 또는 유니크 키를 자식 테이블이 자신의 기본키로 사용하는 관계 (FK가 복합키로 참여)

부모테이블의 키가 자신의 기본키에 포함되어있기 때문에 반드시 부모 테이블에 데이터가 존재해야 자식 테이블에 데이터를 입력할 수 있다. 즉, 부모 데이터가 없다면 자식 데이터는 생길 수 없다.

 

 

  • 장점 : 데이터의 정합성 유지를 DB에서 검증(데이터의 일관성을 유지하는 것을 의미)
    정합성이란? 데이터들의 값이 서로 일치하는 것을 의미
  • 단점 : 구조 변경이 어려움

 

개발 기획에 따라 다르겠지만, 게시글이 존재하지 않는데 댓글이 존재 할 수 있을까?

이런 경우라면 게시글의 탄생이 없이는 댓글이 존재 할 수 없기 때문에 식별관계로서 관계를 지으면 된다.

 

 

 

 

비식별관계

 

 

 

부모 테이블의 기본키 또는 유니크 키를 자식 테이블이 자신의 기본키로 사용하지 않고, 외래키로 사용하는 관계(FK가 복합키에 참여하지 않음)

자식 데이터는 부모 데이터가 없어도 독립적으로 생성될 수 있다.

부모와의 의존성을 줄일 수 있기 때문에 조금 더 자유로운 데이터 생성과 수정이 가능하다.

 

 

예를 들어, 미리 댓글을 써놓고 게시글에 빠르게 달 수 있는 기능을 구현해야 하는 경우라면

게시글과 댓글의 관계는 비식별관계가 될 것이다.

게시글이 없어도 댓글의 로우가 생성 가능해야 하기 때문

 

 

  • 장점 : 구조 변경이 자유로움, 부모 데이터로부터 독립함
  • 단점 : 데이터 정합성을 위한 로직 필요, 데이터 무결성을 보장하지 않음

 

 

비식별관계를 사용하는 이유

데이터의 무결성 측면에서는 식별관계로 만드는 것이 좋겠지만 개발 측면에서 다양한 요구사항을 수용하기 위해 엔티티간의 관계를 느슨하게 유지하는 것이 좋다. 장단점이 존재하지만 실제 프로젝트에서는 느슨한 관계 유지를 위해 비식별관계를 많이 사용한다.

(식별 관계를 사용할 경우 데이터의 정합성을 보장하지만 비즈니스 로직이 변경되면 테이블 관리가 힘들어진다)

 

 

예를 들어, 식별관계에서 시험결과 테이블에 학생 아이디가 없다면 데이터를 추가하지 못할 것이다.

하지만 ‘학생이 존재하지 않는 시험결과도 입력할 수 있게 함’ 이라는 요구사항이 있다면 비식별관계로 만들어야 한다.

실무에서는 이해하기 힘든 요구사항이 비일비재하다.

 

 

 

'DataBase' 카테고리의 다른 글

[DB] .csv 파일 데이터 모델링과 java로 파일 가공하기  (0) 2023.05.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함