1:1(일대일) 관계
1:1 관계는 레코드당 다른 테이블에 연결된 레코드가 무조건 하나이고, 반대로 찾아가도 레코드당 다른 테이블에 연결된 레코드가 하나인 관계를 말합니다.
실생활에 비유해 보면 체육관 사물함, 결혼 등이 있습니다. 물론 체육관에서 한 명이 여러 개의 사물함을 사용하고 있는 경우도 있겠지만 A라는 체육관에서는 무조건 회원 한 명당 하나의 사물함만 배정한다고 가정한다면 1:1 관계가 됩니다.
결혼도 마찬가지입니다. 다른 나라는 일부다처제인 경우는 1:1 관계가 아니지만, 한국은 일부 일처제 제도이므로 남자와 여자는 결혼이라는 관계에서는 1:1 관계입니다. 남자는 여러 명의 여자와 결혼할 수 없고, 반대로 여자도 여러 명의 남자와 결혼할 수 없기 때문입니다.
1:N(일대다) 관계
1:N 관계는 주로 부모와 자식 관계라고도 많이 부릅니다. 부모는 자식이 없을 수도 있고, 한 명만 있을 수도 있고, 여러 명 있을 수도 있는 관계입니다. 반대로 자식 입장에서는 무조건 부모(엄마와 아빠의 쌍)는 하나입니다.
일반적인 RDBMS에서 1:N 관계를 표현할 땐 자식 테이블에 부모 테이블의 기본키(Primary Key)를 참조하는 외래키(Foreign Key) 칼럼을 추가하는 방식으로 표현합니다.
게시글과 댓글도 1:N 관계로 설계된 경우가 많습니다. 하나의 게시글은 0개 이상의 댓글이 달릴 수 있고 댓글은 무조건 하나의 게시글에 속해있습니다.
게시글 테이블
게시글 번호(PK) | 제목 |
1 | 데이베이스 개념 정리 |
2 | 자료구조 개념 정리 |
댓글 테이블
댓글 번호(PK) | 내용 | 게시글 번호(FK) |
1 | Index를 B+Tree구조.... | 1 |
2 | 트랜잭션을 어떤식 ... | 1 |
3 | 시간 복잡도 정리를... | 2 |
4 | 공간 복잡도는 시간... | 2 |
N:M(다대다) 관계
개인적으로 데이터베이스 관계 중 가장 복잡한 관계인 것 같습니다. A 입장에서 0명 이상의 B와 관계를 가질 수 있고, 반대로 B 입장에서도 0명 이상의 A와 관계를 가질 수 있는 관계를 의미합니다.
대학교에서 학생이 전공과목 수강 신청을 한다고 가정해 보겠습니다. 먼저 학생 입장에서 생각해 보면 한 명의 학생은 여러 개의 과목을 수강신청 할 수 있습니다. 예를 들면 홍길동 학생은 데이터베이스와 자료구조를 수강신청하는 상황을 말합니다. 이렇게 봤을 때, 학생과 과목은 1:N 관계입니다.
이번엔 반대로 과목 입장에서 생각해 보겠습니다. 데이터베이스라는 과목은 홍길동 학생이 수강 신청한 건 맞지만 홍길동 학생 이외에도 다른 학생들, 철수와 영희도 데이터베이스에 수강신청 할 수도 있습니다. 이렇게 봤을 때, 과목과 학생은 1:N 관계가 됩니다.
이렇게 양쪽 입장에서 서로가 서로에게 1:N 관계인 경우를 N:M 관계라고 합니다. RDBMS에서 N:M 관계를 표현할 때는 학생 테이블과 과목 테이블 중간에 수강신청이라는 관계 테이블을 하나 더 두고 학생과 수강신청을 1:N, 과목과 수강신청을 1:N으로 설계함으로써 N:M 관계를 표현하게 됩니다.
수강신청 테이블은 학생 테이블의 기본키(Primary Key)를 참조하는 외래키(Foreign Key) 칼럼이 있고 과목 테이블의 기본키를 참조하는 외래키 칼럼도 있게 됩니다.
학생 테이블
학생 번호(PK) | 이름 |
1 | 홍길동 |
2 | 김철수 |
3 | 김영희 |
과목 테이블
과목 번호(PK) | 과목명 |
1 | 데이터베이스 |
2 | 자료구조 |
수강 신청 테이블
학생 번호(FK, PK) | 과목 번호(FK, PK) |
1 | 1 |
1 | 2 |
2 | 1 |
2 | 2 |
홍길동 학생과 김철수 학생이 데이터베이스와 자료구조 두 과목을 수강 신청했음을 알 수 있고 김영희 학생은 아직 아무런 과목도 수강 신청하지 않았음을 알 수 있습니다.
그리고 학생 번호와 과목 번호 두 개를 묶어서 기본키로 설정하면 이미 수강한 과목을 중복 수강하지 못하도록 강제할 수도 있습니다.
'📓 CS 지식 > 📖 데이터베이스' 카테고리의 다른 글
데이터베이스 기본 개념 정리 (0) | 2023.09.19 |
---|---|
데이터베이스 Key 종류(기본키, 후보키 등등) (0) | 2023.09.07 |