N:M(다대다) 관계란, 두 개 이상의 테이블이 서로 복수 개의 레코드를 가질 때 발생하는 관계입니다.
예를 들어, 한 명의 학생이 여러 과목을 수강하고, 한 과목에 여러 명의 학생이 수강하는 경우입니다.
이때, 학생 테이블과 과목 테이블은 N:M 관계를 가지며, 중간에 수강 테이블을 둬서 두 테이블 사이의
관계를 나타냅니다. 이를 통해 데이터의 중복을 최소화하고, 데이터 일관성과 정확성을 유지할 수 있습니다.
중간 테이블을 만들어서 다시 정리 해보기
다대다(N : M) 관계 만들어 보기
CREATETABLE student(
student_id INTPRIMARY KEY,
name VARCHAR(50) NOTNULL,
major VARCHAR(50) NOTNULL
);
CREATETABLE subject(
subject_id INTPRIMARY KEY,
name VARCHAR(50) NOTNULL,
professor VARCHAR(50) NOTNULL
);
-- 중간 테이블 만들기 -- 학생 : 수강 테이블에 관계는 1 : N -- 과목 : 수강 테이블에 관계는 CREATETABLE enrollment(
enrollment_id INTPRIMARY KEY,
student_id INTNOTNULL,
subject_id INTNOTNULL,
FOREIGN KEY(student_id) REFERENCES student(student_id),
FOREIGN KEY(subject_id) REFERENCES subject(subject_id)
);
-- 한 사람이 여러 개의 도시에서 여러 번 여행을 다녀온 경우를 테이블로 구축해보세요. -- 여기서 사람, 도시에 관계를 관계차수 표현해보세요 -- 한 사람이 여러 도시를 방문하고, 한 도시에 여러 사람이 방문을 한다. -- person, city , travel CREATETABLE person(
person_id INTPRIMARY KEY,
name VARCHAR(50) NOTNULL
);
CREATETABLE city(
city_id INTPRIMARY KEY,
name VARCHAR(50) NOTNULL
);
-- 중간 테이블 만들기 CREATETABLE travel(
person_id INT,
city_id INT,
trip_date DATE,
PRIMARY KEY(person_id, city_id, trip_date),
FOREIGN KEY(person_id) REFERENCES person(person_id),
FOREIGN KEY(city_id) REFERENCES city(city_id)
);
INSERTINTO person VALUES
(1, '김영희'),
(2, '박철수'),
(3, '이민호'),
(4, '한지민'),
(5, '송혜교');
INSERTINTO city VALUES
(1, '서울'),
(2, '부산'),
(3, '제주'),
(4, '홍콩'),
(5, '도쿄');
INSERTINTO travel VALUES
(1, 1, '2023-01-10'),
(1, 2, '2021-07-11'),
(2, 5, '2022-02-20'),
(2, 4, '2022-04-30'),
(3, 3, '2022-01-15'),
(4, 5, '2022-07-22'),
(1, 4, '2022-07-10');
select*from travel;
고객, 상품, 주문 목록
-- 고객, 주문목록 --> 1 : N -- 홍길동 --> 신발, 홍길동 -- --> 컴퓨터, 홍길동 -- 고객, 상품정보, 주문목록 --> (고객: 주문목록) N : M --> 중간 테이블 주문 목록 -- 주문목록(중간테이블) -- 1(홍길동), 1(신발), "일자" -- 테이블 설계해 주세요 -- 고객, 상품, 주문 목록-- 테이블 설계해주세요 -- 고객, 상품, 주문 목록 CREATETABLE customer (
id INTPRIMARY KEY,
name VARCHAR(20) NOTNULL
);
CREATETABLE product (
id INTPRIMARY KEY,
name VARCHAR(20) NOTNULL,
price INTNOTNULL
);
CREATETABLE `order` (
id INTPRIMARY KEY,
customer_id INTNOTNULL,
product_id INTNOTNULL,
amount INTNOTNULL,
FOREIGN KEY (customer_id) REFERENCES customer(id),
FOREIGN KEY (product_id) REFERENCES product(id)
);