N:M(다대다) 관계란, 두 개 이상의 테이블이 서로 복수 개의 레코드를 가질 때 발생하는 관계입니다. 
예를 들어, 한 명의 학생이 여러 과목을 수강하고, 한 과목에 여러 명의 학생이 수강하는 경우입니다. 
이때, 학생 테이블과 과목 테이블은 N:M 관계를 가지며, 중간에 수강 테이블을 둬서 두 테이블 사이의 
관계를 나타냅니다. 이를 통해 데이터의 중복을 최소화하고, 데이터 일관성과 정확성을 유지할 수 있습니다.

중간 테이블을 만들어서 다시 정리 해보기

다대다(N : M) 관계 만들어 보기

CREATE TABLE student(
	student_id INT PRIMARY KEY, 
    name VARCHAR(50) NOT NULL, 
    major VARCHAR(50) NOT NULL
);

CREATE TABLE subject(
	subject_id INT PRIMARY KEY, 
    name VARCHAR(50) NOT NULL, 
    professor VARCHAR(50) NOT NULL
);

-- 중간 테이블 만들기 
-- 학생 : 수강 테이블에 관계는 1 : N 
-- 과목 : 수강 테이블에 관계는 
CREATE TABLE enrollment(
	enrollment_id INT PRIMARY KEY, 
    student_id INT NOT NULL, 
    subject_id INT NOT NULL, 
    FOREIGN KEY(student_id) REFERENCES student(student_id), 
    FOREIGN KEY(subject_id) REFERENCES subject(subject_id)
); 

-- 한 사람이 여러 개의 도시에서 여러 번 여행을 다녀온 경우를 테이블로 구축해보세요. 
-- 여기서 사람, 도시에 관계를 관계차수 표현해보세요 
-- 한 사람이 여러 도시를 방문하고, 한 도시에 여러 사람이 방문을 한다. 
-- person, city , travel 

CREATE TABLE person(
	person_id INT PRIMARY KEY, 
    name VARCHAR(50) NOT NULL
);

CREATE TABLE city(
	city_id INT PRIMARY KEY, 
    name VARCHAR(50) NOT NULL
);

-- 중간 테이블 만들기 
CREATE TABLE 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)
);

INSERT INTO person VALUES
	(1, '김영희'), 
    (2, '박철수'), 
    (3, '이민호'), 
    (4, '한지민'), 
    (5, '송혜교');
    
INSERT INTO city VALUES
	(1, '서울'), 
    (2, '부산'), 
    (3, '제주'), 
    (4, '홍콩'), 
    (5, '도쿄');
    
INSERT INTO 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(신발), "일자" 
 
-- 테이블 설계해 주세요 
-- 고객, 상품, 주문 목록

-- 테이블 설계해주세요 
-- 고객, 상품, 주문 목록 
CREATE TABLE customer (
	id INT PRIMARY KEY,
	name VARCHAR(20) NOT NULL
);

CREATE TABLE product (
	id INT PRIMARY KEY,
	name VARCHAR(20) NOT NULL,
	price INT NOT NULL
);

CREATE TABLE `order` (
	id INT PRIMARY KEY,
	customer_id INT NOT NULL,
	product_id INT NOT NULL,
	amount INT NOT NULL,
	FOREIGN KEY (customer_id) REFERENCES customer(id),
	FOREIGN KEY (product_id) REFERENCES product(id)
);

'MYSQL' 카테고리의 다른 글

DB 접근 프로그램 만들기  (0) 2023.03.23
GROUP BY 절  (0) 2023.03.16
MySQL FUNCTION  (0) 2023.03.16
JOIN 구문  (0) 2023.03.16
1 : 1 관계  (0) 2023.03.16

+ Recent posts