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

혼동 주의 (용어 정리)
-테이블 차수 : 테이블 내의 컬럼 수 (예 : tb_user의 컬럼 수 = 3)
-관계 차수: 두 테이블 간의 관계 유형 (예: 1:1, 1:N, N:M)
2. 1:1 (일대일) 관계 예시
사람(Person)테이블과 여권(Passport)테이블이 있다고 가정합니다.
사람(person)테이블과 여권( Passport ) 테이블이 있다고 가정합니다.
-1:1 관계는 한 테이블의 레코드가 다른 테이블의 단 하나의 레코드와 연결되는 관계로, 특정 테이블 속성을 분리하거나
선택적 데이터를 별도로 관리할 때 사용됩니다.

use school;
create tavle 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) 테이블이 있다고 가정합니다.

-- 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개로만 표현하는 것은 불가능합니다. 하지만 억지로 만들어 봅시다.

정리
관계형 데이터베이스에서는 N:M 관계를 직접 2개 테이블로 표현할 수 없습니다. 이를 해결하기 위해 중간 테이블(교차 테이블)을 사용해야 합니다. 중간 테이블은 두 테이블의 기본 키를 외래 키로 포함하며, 두 엔터티 간의 관계를 매핑합니다

중간 테이블 이름 짓기 권장사항
두 테이블 이름을 조합해 만든다 (가장 일반적)
예: 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' 카테고리의 다른 글
(DB) 블로그에 필요한 DB 간단 버전 (0) | 2025.05.13 |
---|---|
(DB) ERD 다이어 그램 만들어 보기 - 16 (1) | 2025.05.13 |
(DB)MySQL 기초 복습 하기 - 14 (0) | 2025.05.13 |
(DB)인덱스(index)가 뭐야? - 13 (0) | 2025.05.13 |
(DB)PRIMARY KEY, FOREIGN KEY, UNIQUE 란 뭘까? - 12 (0) | 2025.05.12 |