1. 관계차수
- 관계형 데이터베이스에서 두 테이블 간의 관계 복잡성을 나타낸다.
- 관계 테이블 간의 데이터 연결 방식을 정의하며 주로 1:1(일대일), 1:N(일대다), N:M(다대다) 로 나뉜다.
1-1. 1:1(일대일) 관계
- 한 테이블의 레코드가 다른 테이블의 다른 테이블의 단 하나의 레코드와 연결되는 관계이다.
- 특정 테이블 속성을 분리하거나 선택적 데이터를 별도로 관리할 때 사용된다.
- 예를 들어, 한 사람은 하나의 여권만 가질 수 있고 여권도 오직 한 사람의 것이므로 사람과 여권은 1:1로 볼 수 있다.
-- 관계 차수에 대한 개념을 알아보자.
-- 사람과 여권의 관계차수는 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;
- 1:1 관계의 예시
-- 회사
-- 직원, 사원증
-- 대학교
-- 학생, 학적 정보
-- 상품, 보증
-- 병원
-- 환자, 의료 기록
1-2. 1:N(일대다) 관계
- 한 레코드가 다른 테이블의 여러 레코드와 연결되는 관계이다.
- 예를 들어, 한 명의 고객은 여러개의 주문을 할 수 있으므로 고객과 주문은 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)
);
- 1:N 관계 예시
-- 게시판
-- 회원가입, 게시물
-- 야구팀과 야구선수
1-3. N:M(다대다) 관계
- 한 테이블의 레코드가 다른 테이블의 여러 레코드와 연결되고, 반대로 한 레코드도 여러 테이블과 연결되는 관계이다.
- 예를 들어, 한명의 학생은 여러 개의 수업을 들을 수 있고 하나의 수업도 여러 명의 학생이 수강 할 수 있으므로 N:M으로 볼 수 있다.
- 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)
);
insert into tb_student(name) values
('홍길동'),
('김영희');
insert into tb_course(course_id, title) values
(101,'자바'),
(102, '데이터베이스');
insert into tb_student_course (student_id, course_id) values
(1, 101),
(1, 102),
(2, 102);
'MySQL' 카테고리의 다른 글
MySQL 기초 복습하기 (0) | 2025.05.13 |
---|---|
ERD 다이어그램 활용하기 (0) | 2025.05.13 |
MySQL - 인덱스(index) (0) | 2025.05.13 |
MySQL - 키 제약 조건 PRIMARY KEY, FOREIGN KEY, UNIQUE 알아보기 (0) | 2025.05.12 |
MySQL - WHERE 조건 절과 DELETE 구문 (0) | 2025.05.09 |