MySQL

관계 차수란?

whs5758 2025. 5. 13. 17:46

1. 관계 차수란?

관계 차수(Relation Degree)는 관계형 데이터베이스에서 두 테이블 간의 관계 복잡성을 나타내는 개념입니다. 관계는 테이블 간의 데이터 연결 방식을 정의하며, 주로 1:1 (일대일), 1:N (일대다), N:M (다대다)로 나뉩니다.

관계 유형 설명 실생활 예시
1:1
(일대일)
한 사람은 하나의 여권만 가질 수 있어요. 여권도 오직 한 사람만의 것이죠. 사람 ↔ 여권
1:N
(일대다)
한 고객은 여러 주문을 할 수 있어요. 하지만 한 주문은 한 고객의 것이죠. 고객 ↔ 주문
N:M
(다대다)
여러 학생이 여러 과목을 수강하고, 한 과목도 여러 학생이 수강할 수 있어요. 학생 ↔ 수업

 

혼동 주의(용어 정리)

  • 테이블 차수: 테이블 내의 컬럼 수 (예: tb_user의 컬럼 수 = 3)
  • 관계 차수: 두 테이블 간의 관계 유형 (예: 1:1, 1:N, N:M)

2. 1:1 (일대일) 관계 예시

사람(Person) 테이블과 여권(Passport) 테이블이 있다고 가정합니다

  • 1:1 관계는 한 테이블의 레코드가 다른 테이블의 단 하나의 레코드와 연결되는 관계로, 특정 테이블 속성을 분리하거나 선택적 데이터를 별도로 관리할 때 사용됩니다.

Person 테이블

person_id  name
1 홍길동
2 김영희
3 이철수

Passport 테이블

passport_id passport_number person_id
101 P12345678 1
102 P87654321 2
103 P11112222 3

 

use school; 

-- 관계 차수에 대한 개념을 알아보자. 
-- 사람과 여관에 관계 차수는 1:1 관계이다. 

create table tb_person(
	person_id int auto_increment , 
    name varchar(50) not null, 
    primary key(person_id) 
);

create table tb_passport(
	passport_id int auto_increment, 
    passport_number varchar(20) not null, 
    person_id int unique, 
    primary key(passport_id),
    foreign key(person_id) references tb_person(person_id)
);

insert into tb_person(name) values('홍길동'), ('김영희'), ('이철수');

insert into tb_passport(passport_number, person_id) 
values('p1234', 1), ('p2222', 2), ('p3333', 3);

select * from tb_passport;

3. 1:N (일대다) 관계 예시

고객(Customer) 테이블과 주문(Order) 테이블이 있다고 가정합니다.

 

Customer 테이블

customer_id  name
1 박민지
2 최재영

 

Order 테이블

order_id  product_name  customer_id
201 노트북 1
202 마우스 1
203 키보드 2

 

-- 1 : N 관계 예시 
create table tb_customer(
	customer_id int auto_increment, 
    name varchar(50) not null, 
    primary key(customer_id)
);

create table tb_order(
	order_id int auto_increment, 
    product_name varchar(50) not null, 
    customer_id int, 
    primary key(order_id), 
    foreign key(customer_id) references tb_customer(customer_id)
);

 


4. N:M (다대다) 관계 예시

학생(student) 테이블과 수업(course)이 있다고 가정 합시다.

  • N:N (다대다) 관계는 한 테이블의 레코드가 다른 테이블의 여러 레코드와 연결되고, 반대로도 여러 레코드가 연결되는 관계입니다.

핵심 개념

  • 한 명의 학생은 여러 개의 수업을 수강할 수 있다.
  • 하나의 수업도 여러 명의 학생이 수강할 수 있다.
  • 이럴 땐 중간 테이블(보통 수강(student_course) 같은 이름)이 필요해요

N:M 관계를 테이블 2개로만 표현하는 것은 불가능합니다. 하지만 억지로 만들어 봅시다.

 

학생 테이블

student_id
name
1
홍길동
2
김영희
3
박민지

 

수강 테이블

course_id
title
students
101
자바
홍길동, 박민지
102
DB
홍길동, 김영희
103
웹개발
김영희

 

정리

관계형 데이터베이스에서는 N:M 관계를 직접 2개 테이블로 표현할 수 없습니다.

이를 해결하기 위해 중간 테이블(교차 테이블)을 사용해야 합니다.

중간 테이블은 두 테이블의 기본 키를 외래 키로 포함하며, 두 테이블 간의 관계를 매핑합니다.

 

student 테이블

student_id
name
1
홍길동
2
김영희
3
박민지

 

수강 테이블

course_id
title
students
101
자바
홍길동, 박민지
102
DB
홍길동, 김영희
103
웹개발
김영희

 

수강(student_course) 테이블 (중간 테이블)

student_id
course_id
1
101
1
102
2
102
2
103
3
101

 

중간 테이블 이름 짓기 권장사항


두 테이블 이름을 조합해 만든다 (가장 일반적)
예: student_course, user_role, author_book

  • 어떤 두 테이블의 관계인지 명확하게 드러남
  • 테이블을 보지 않고도 연결 목적이 보임

업무 용어에 따라 의미 있는 이름을 줄 수도 있다 (선택적)

  • enrollment (student + course 관계 = 수강)
  • subscription (user + newsletter 관계 = 구독)
  • assignment (employee + task 관계 = 할당)

테이블 직접 만들어 보기

CREATE TABLE tb_student (
  student_id INT AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  PRIMARY KEY (student_id)
);

CREATE TABLE tb_course (
  course_id INT AUTO_INCREMENT,
  title VARCHAR(50) NOT NULL,
  PRIMARY KEY (course_id)
);

CREATE TABLE tb_student_course (
  student_id INT,
  course_id INT,
  PRIMARY KEY (student_id, course_id),
  FOREIGN KEY (student_id) REFERENCES tb_student(student_id),
  FOREIGN KEY (course_id) REFERENCES tb_course(course_id)
);

-- tb_student 데이터 삽입
INSERT INTO tb_student (name) VALUES
('홍길동'),
('김영희');

-- tb_course 데이터 삽입
INSERT INTO tb_course (course_id, title) VALUES
(101, '자바'),
(102, '데이터베이스');

-- tb_student_course 데이터 삽입
INSERT INTO tb_student_course (student_id, course_id) VALUES
(1, 101), -- 홍길동: 자바
(1, 102), -- 홍길동: 데이터베이스
(2, 102); -- 김영희: 데이터베이스
  • N:M 관계 설계:
    • 중간 테이블의 기본 키는 두 외래 키의 조합으로 설정.
    • FOREIGN KEY 제약 조건으로 데이터 무결성 보장.

5. 관계 차수 개념 정리

관계 차수는 관계형 데이터베이스에서 두 테이블 간의 관계를 나타냅니다

  • 1:1 (일대일): 한 레코드가 다른 테이블의 한 레코드와 매칭 (예: 사람과 여권)
  • 1:N (일대다): 한 레코드가 다른 테이블의 여러 레코드와 매칭 (예: 고객과 주문)
  • N:1 (다대일): 여러 레코드가 한 테이블의 한 레코드와 매칭 (1:N의 반대 관점)
  • N:M (다대다): 여러 레코드가 서로 여러 레코드와 매칭, 중간 테이블 필요 (예: 학생과 수업)

'MySQL' 카테고리의 다른 글

blog 구성해보기  (0) 2025.05.13
ERD 다이어 그램 만들어 보기  (2) 2025.05.13
PRIMARY KEY, FOREIGN KEY, UNIQUE KEY 란 뭘까?  (0) 2025.05.12
DELETE 연습 예제  (0) 2025.05.09
DELETE 구문과 조건절  (0) 2025.05.09