<aside> 💡 테이블 간의 관계를 정의하는 방식에는 주로 네 가지 유형이 있습니다.
1:1 관계 (One-to-One Relationship)
- 두 개의 테이블에서 각각 하나의 레코드가 서로 직접 매칭되는 관계입니다.
- 이 관계는 보통 서로 다른 테이블의 기본키와 외래키를 사용하여 연결합니다.
- 예: 사용자 테이블과 사용자 상세 정보 테이블, 여기서 각 사용자는 상세 정보와 정확히 하나씩 연결됩니다.
- 예: 사람과 여권, 사람을 나타내는 Persons 테이블과 여권 정보를 나타내는 Passports 테이블이 있습니다.
1:N 관계 (One-to-Many Relationship)
- 한 테이블의 하나의 레코드가 다른 테이블의 여러 레코드와 매칭됩니다.
- 이 관계는 주로 한 테이블의 기본키가 다른 테이블의 외래키로 사용되어 연결됩니다.
- 예: 고객 테이블의 각 고객이 여러 주문 레코드와 연결되는 경우 (고객이 여러 주문을 가짐).
N:1 관계 (Many-to-One Relationship)
- 다수의 레코드가 한 테이블의 단일 레코드와 매칭되는 관계입니다.
- 이는 1:N 관계의 반대 개념이며, 구현 방식은 동일합니다.
- 예: 여러 주문이 하나의 고객에게 속하는 경우.
N:M 관계 (Many-to-Many Relationship)
- 두 테이블 간에 다수의 레코드가 서로 매칭됩니다.
- 이 관계를 구현하기 위해 보통 중간 연결 테이블을 사용하여 각 테이블의 레코드를 연결합니다.
- 연결 테이블은 각 테이블의 기본키를 외래키로 포함하며, 이들 외래키의 조합이 중간 테이블의 기본키가 되기도 합니다.
- 예: 학생과 수업 테이블, 여기서 한 학생이 여러 수업을 듣고, 하나의 수업에 여러 학생이 등록될 수 있습니다.
drop table tb_user;
create table TB_USER(
user_id int auto_increment,
username varchar(50) not null,
password varchar(50) not null,
primary key(user_id)
);
create table tb_user_details(
details_id int auto_increment,
user_id int unique,
address varchar(100),
phone_number varchar(15),
email varchar(50),
primary key(details_id),
foreign key(user_id) references tb_user(user_id)
);
관계 차수
외래키는 누가 가지고 있어야 할까???
N : 1
야구 선수 야구 팀
1 / 홍 / 30 / 롯데 1 / 롯데 / 창립 년도
2 / 김 / 21 / 롯데 2 / 해태 / 창립 년도
3 / 나 / 29 / 해태 3 / 기아 / 창립 년도
4 / 박 / 25 / 넥슨 4 / 넥슨 / 창립 년도
5 / 이 / 19 / 기아
6 / 최 / 27 / 넥슨
- 관계의 방향성을 명확히 하기
한 팀은 여러명의 선수를 가질 수 있다, 한 선수는 한 팀에만 속할 수 있다.
한 팀은 여러명의 선수 —> 1 : N , 팀 : 선수 == 1 : N
한 선수는 하나의 팀 —> N : 1 선수 : 팀 == N : 1
create database mydb2;
use mydb2;
create table tb_student(
student_id int auto_increment primary key,
student_name varchar(100) not null
);
create table tb_class(
class_id int auto_increment,
class_name varchar(100) not null,
teacher varchar(20) not null,
primary key(class_id)
);
-- 학생과 수업 테이블 N:M 관계가 형성 된다.
-- 중간 테이블 설계 (수강등록 테이블)
create table tb_registration(
student_id int,
class_id int,
registration_date date,
primary key(student_id, class_id),
foreign key(student_id) references tb_student(student_id),
foreign key(class_id) references tb_class(class_id)
);
desc tb_registration;
'MySQL' 카테고리의 다른 글
데이터 복사 및 데이터 추가 (0) | 2024.06.13 |
---|---|
JOIN (0) | 2024.06.13 |
MySQL 에서 인덱스(index)란 (0) | 2024.06.13 |
UNIQUE 제약에 이해 (0) | 2024.06.13 |
DELETE 구문과 조건절 (0) | 2024.06.13 |