[DB]테이블 간 연관관계

하윤철·2024년 7월 23일

연관관계는 1:1, 1:N, M:N 관계가 있다.

1 대 1

호텔을 예시로 들 수 있다.

  • 방 : 방 번호

    번호
    1Room1
    2Room2
  • 손님 : 손님 번호

    번호이름
    001김길동
    002최팽이

💡만약 예약을 한다면 문제는 뭐가 있을까??

1 대 N

직원 대 호텔

  • 직원
    번호직원이름FK_호텔
    1Anna001
    2Bell001
    3kim002
  • 호텔
    번호호텔이름
    001신라호텔
    002롯데호텔

M 대 N

왜 쓰면 안되는 걸까?

  • FK가 List 형태로 나오게 된다. 즉 속성값이 여러개가 나온다.
    • 원자성을 위배하여 데이터 CRUD가 어려워진다.
  • Join이 어려워진다.
    • 여러개의 속성으로 Join 연산의 복잡도가 올라간다.
  • 참조 무결성이 지켜지지 않는다.
    • 참조하는 테이블에서 레코드 삭제 시, 참조 무결성 발생
  • 원자성을 지키기 위해 계속 FK컬럼만 다른 레코드를 추가한다면 낭비가 심해진다.
    • 데이터의 중복이 발생
    • 의미 없는 Null 값들이 생기고 추가사항이 생기면 속성을 더 추가해줘야한다.

예시

  1. 하나의 학생 레코드에서 여러 StudyGroup FK를 갖도록 하기 위해 컬럼을 늘리는 경우 비효율적인 null이 발생함. 또한 속할 수 있는 StucyGroup의 수가 변경될 때마다 테이블 구조가 따라서 변경되어야 함.

    학생

    idnamegroup1group2group3
    1김길동1nullnull
    2박현수13null
    3최박달2nullnull

    스터디그룹

    idnamecategory
    1네트워크001
    2운영체제002
    3데이터베이스003
  2. 한명의 학생이 여러 StudyGroup에 속하기 위해서 FK 컬럼만 다른 레코드를 새롭게 추가하면 데이터의 중복이 발생함.

    학생

    idnamegroup
    1김길동1
    2박현수3
    3최박달2
    4최박달1
profile
선순환을 만드는 개발자

0개의 댓글