MySQL에서 1:1 관계는 두 개의 테이블 간에 1:1 대응 관계가 있는 경우에 사용됩니다.
예를 들어, 학생 정보를 저장하는 테이블과 학생의 상세 정보를 저장하는 테이블이 있을 때,
이 두 테이블은 1:1 관계를 가질 수 있습니다. 이 경우 학생 정보를 저장하는 테이블과
학생 상세 정보를 저장하는 테이블 각각의 기본키(primary key)와 외래키(foreign key)를 연결하여
관계를 설정합니다. 이를 통해 데이터의 중복을 최소화하고 불필요한 데이터의 저장을 방지할 수 있습니다.
1:1 관계에서는 두 테이블 중 하나의 테이블에서만 외래키를 가질 수 있습니다
1:1 관계를 사용하는 경우는 보통 테이블의 칼럼 중에 일부가 NULL 값을 가지거나,
특정 칼럼의 값이 자주 변경되지 않는 경우입니다. 이러한 경우 1:1 관계를 사용하면
테이블의 정규화를 유지하면서도 데이터를 보다 효율적으로 관리할 수 있습니다.
정규화란 데이터베이스 설계에서 가능한 중복을 제거하고 데이터를 구조화 하는 프로세스 입니다.
이를 통해 테이터의 일관성, 유지보수, 검색 속도 등을 개선할 수 있습니다.
-- 회원 정보와 회원 등급 정보 1 : 1 관계로 설계
DROP TABLE IF EXISTS member;
CREATE TABLE `member`(
id INT PRIMARY KEY AUTO_INCREMENT,
name varchar(50) NOT NULL,
email VARCHAR(100),
address VARCHAR(100)
);
CREATE TABLE member_grade(
member_id INT PRIMARY KEY,
grade VARCHAR(10),
point INT,
FOREIGN KEY(member_id) REFERENCES member(id)
);
-- 직원 정보와 직위 정보를 저장하는 테이블 설계 1 : 1 관계
CREATE TABLE employee(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
hire_date DATE NOT NULL
);
CREATE TABLE employee_position(
employee_id INT PRIMARY KEY,
position VARCHAR(50) NOT NULL,
dismissal_date DATE,
FOREIGN KEY (employee_id) REFERENCES employee(id)
);
-- 상품과 상품 상세 정보 1 : 1 관계 설계
drop table product;
CREATE TABLE product(
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price INT
);
CREATE TABLE product_detail(
product_id INT PRIMARY KEY,
description TEXT,
FOREIGN KEY (product_id) REFERENCES product(id)
);