coldrain-f
웹 꼬딩 기록🌈
coldrain-f
전체 방문자
오늘
어제
  • 분류 전체보기 (8)
    • 📓 사이드 프로젝트 (0)
      • 📖 웨일 보카 (0)
    • ✏️ TIL (Today I Learned) (1)
    • 🌠 개발 공부 (3)
      • 📖 Vue (1)
      • 📖 React Native (1)
      • 📖 Python (1)
      • 🌃 코드 스니펫 (0)
    • 📓 CS 지식 (3)
      • 📖 데이터베이스 (3)
    • 🤖 알고리즘 (0)
      • 📖 백준 (0)
      • 📖 프로그래머스 (0)
      • 📖 개념 (0)
    • 📓 자격증 (1)
      • 📖 정보처리기사 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
coldrain-f

웹 꼬딩 기록🌈

📓 CS 지식/📖 데이터베이스

데이터베이스 관계 정리(1:1, 1:N, N:M)

2023. 9. 11. 14:33

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
    '📓 CS 지식/📖 데이터베이스' 카테고리의 다른 글
    • 데이터베이스 기본 개념 정리
    • 데이터베이스 Key 종류(기본키, 후보키 등등)
    coldrain-f
    coldrain-f

    티스토리툴바