[DB] 1:1, 1:N, N:M 관계

GilLog·2020년 11월 3일
24

DataBase

목록 보기
8/25
post-thumbnail

관계형 데이터베이스(Oracle, MySQL, MS-SQL, SQLite 등등) 엔티티끼리 관계를 맺을 수 있어서 관계형 DB라는 이름이 붙었다.
엔티티(Entity) : DataBase에 표현하려고 하는 유형, 무형의 객체로서 서로 구별되는 것을 뜻한다.

관계두 엔티티가 서로 관련이 있을 때를 말하는데, 1:1, 1:N, N:M 관계를 맺을 수 있다.

1:1 관계(일대일 관계)

1:1 관계란 어느 엔티티 쪽에서 상대 엔티티와 반드시 단 하나의 관계를 가지는 것을 말한다.

예를 들어, 우리나라에서 결혼 제도는 일부일처제로, 한 남자는 한 여자와, 한 여자는 한 남자와 밖에 결혼을 할 수 없다.

남편 또는 부인을 2명 이상 둘 수 없는데, 이러한 관계가 1:1 관계다.

1:N 관계(일대다 관계)

1:N 관계는 한 쪽 엔티티가 관계를 맺은 엔티티 쪽의 여러 객체를 가질 수 있는 것을 의미한다.

현실세계에는 1:N관계가 많이 있는데, 실제 DB를 설계할 때 자주 쓰이는 방식이다.

1:N 관계는 N:M 관계처럼 새로운 테이블을 만들지 않는다.

예를 들어, 부모와 자식 관계를 생각해보면, 부모는 자식을 1명, 2명, 3명, 그 이상도 가질 수 있다.
이를 부모가 자식을 소유한다고(has a 관계) 표현한다.

반대로 자식 입장에서는 부모(아버지, 어머니의 쌍)를 하나만 가질 수 밖에 없다.

이러한 관계를 1:N 관계라고 하며, 계층적인 구조로 이해할 수도 있다.

여러 명의 자식(N)의 입장에서 한 쌍의 부모(1)중 어떤 부모에 속해 있는지 표현해야하므로 부모 테이블의 PK를 자식 테이블에 FK로 집어 넣어 관계를 표현한다.

PK(Primary Key) : 각 엔티티를 식별할 수 있는 대표키, 테이블에서 중복되지 않는(Unique) 값, Null일 수 없다.

FK(Foreign Key : 다른 테이블의 기본키를 참조, 모든 필드는 참조하는 기본키와 동일한 도메인(값의 종류&범위)을 갖는다.
모든 필드 값은 참조하는 기본키와 동일하거나 null 일 수 있다.

즉 부모 테이블(1)에서는 내 자식들이 누구인지 정보를 넣을 필요가 없고, 자식 테이블(N)에서만 각각의 자식들이 자신의 부모 정보(FK)를 넣음 으로써 관계를 표현할 수 있다.

N:M 관계(다대다 관계)

N:M 관계는 관계를 가진 양쪽 엔티티 모두에서 1:N 관계를 가지는 것을 말한다.

즉, 서로가 서로를 1:N 관계로 보고 있는 것이다.

예를들어, 학원과 학생의 관계를 생각해보면, 한 학원에는 여러명의 학생이 수강할 수 있으므로 1:N 관계를 가진다.

반대로 학생도 여러개의 학원을 수강할 수 있으므로, 이 사이에서도 1:M 관계를 가진다.

그러므로 학원과 학생은 N:M 관계를 가진다고 할 수 있다.

N:M 관계는 서로가 서로를 1:N 관계, 1:M 관계로 갖고 있기 때문에, 서로의 PK를 자신의 외래키 컬럼으로 갖고 있으면 된다.

일반적으로 N:M 관계는 두 테이블의 대표키를 컬럼으로 갖는 또 다른 테이블을 생성해서 관리한다.


🙆‍♂️ 참고사이트 🙇‍♂️

[DB] 데이터베이스의 1:1, 1:N, N:M 관계[나다움_sparkling]

🙈[DB] 관계형 DB에서의 관계 ( 1:1 / 1:M / N:M )🐵[victolee]

데이터베이스 키 개념, 기본키, 외래키[Crocus]

profile
🚀 기록보단 길록을 20.10 ~ 22.02 ⭐ Move To : https://gil-log.github.io/

5개의 댓글

comment-user-thumbnail
2021년 3월 22일

쏙쏙 이해가 잘 됩니다 감사합니다:)

답글 달기
comment-user-thumbnail
2021년 10월 3일

좋은 포스팅 감사합니다!

답글 달기
comment-user-thumbnail
2022년 11월 25일

예시가 좋네요! 감사합니다!

답글 달기
comment-user-thumbnail
2022년 12월 29일

이해가 잘되네용 좋은글 감사합니다 ~

답글 달기
comment-user-thumbnail
2023년 9월 14일

훌륭한 게시물에 감사드립니다. io games

답글 달기