DBMS/MySQL

231115 수) 데이터 관계 탐구 (일대다 & Join) - (1)

roofTopCaat 2023. 11. 15. 14:43

일 대 다 ( One To Many )

 

 

일 대 다란 하나의 엔티티가 다른 엔티티 그룹과 여러 관계를 가질 수 있다는 의미이다

 

일 대 다 관계는 외래 키(foreign key)를 사용하여 DB 테이블 간에 설정된다

외래 키는 '다' 테이블에서 '일' 테이블의 기본 키(primary key)를 참조한다.

이를 통해 데이터의 무결성을 유지하고 관련 데이터 간 연결을 관리한다

 

예를 들어, 고객과 주문은 일 대 다 관계이다

 

1) 고객 roofTopCaat은 여러 주문을 넣을 수 있다

 

2) 한 주문에는 두 고객이 연관될 수는 없다

 

실제 세계에서는 더 많은 정보가 있겠지만

 

약식으로 두 테이블의 관계를 살펴보자

 

 

 

이 관계를 통해 고객 ID와 주문 ID로 묶이며

기본 키를 통해 고유한 번호의 고객이 어떤 번호의 주문을 했는지 확인할 수 있게 되며

 

KIM이라는 고객이 어떤 날짜에 몇 개를 주문했는지에 대한 간단한 구조화가 완성된다

 

 

PRIMARY KEY ( 기본 키 )

 

기본 키는 테이블 항목의 고유성을 보장해 DB간 결합이 이루어질 때

항목 간의 중복을 방지한다

 

예로, 고객이 동일한 물품을 한 개 구매한 후 어떤 이유에 의해서

 

추가로 한개를 더 구매한다거나 하는 경우에 대한 대처가 가능하다

 

 

FOREIGN KEY ( 외래 키 )

 

외래 키는 한 테이블 안에 있는 다른 테이블을 참조하는 키이다

 

 

 

위의 경우에선 유효하지 않은 고객이 주문을 넣을 경우에

 

이를 강제적으로 방지하는 것을 가능케 하기 위해서 사용되곤 한다

 

CREATE TABLE customers (
    id INT PRIMARY KEY AUTO_INCREMENT,
    FIRST_NAME VARCHAR(50),
    LAST_NAME VARCHAR(50),
    EMAIL VARCHAR(50)
);

CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    ORDER_DATE DATE,
    AMOUNT DECIMAL(8,2),
    CUSTOMER_ID INT,
    FOREIGN KEY (CUSTOMER_ID) REFERENCES customers(id)
);

INSERT INTO customers (FIRST_NAME, LAST_NAME, EMAIL)
VALUES  ('KIM', 'MINSU', 'minsu@gmail.com'),
        ('PARK', 'SEYUN', 'seyun@gmail.com'),
        ('DAVID', 'HAWARD', 'haward@gmail.com');

INSERT INTO orders (ORDER_DATE, AMOUNT, CUSTOMER_ID)
VALUES  ('2016-02-10', 99, 1),
        ('2016-01-23', 35, 1),
        ('2016-01-28', 72, 2),
        ('2016-03-01', 55, 3);

 

이를 통해 새로운 order가 insert될 경우 customer id가 매치되지 않으면 주문이 입력되지 않을 것이다

 

데이터 관계 탐구 (일대다 & Join) - (2)에선 크로스, 이너, 레프트, 라이트조인을 알아보자

'DBMS > MySQL' 카테고리의 다른 글

230922 금) 데이터베이스 개체  (0) 2023.09.22
230919 화) '데이터베이스 구성도' 완성하기  (0) 2023.09.19
230918 2) 데이터베이스 모델링  (0) 2023.09.18
230918 1) DB 알아보기  (0) 2023.09.18