study/DB

테이블 정규화

IT공부 2024. 9. 13. 12:57
반응형

제1정규형

한 칸엔 하나의 데이터만 저장

제2정규형

현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 이동 시키는 것

composite primary key

  • 두개 이상의 컬럼을 합치면, primary key 역할을 할 수 있는 컬럼

partial dependency를 제거한 테이블

  • 하나의 composite primary key에 종속되는 컬럼을 다른 테이블로 제외 시키는 작업

단점으로는

해당 테이블 하나로는 데이터를 전부 표현할 수 없음

제3정규형

  • 일반 컬럼에만 종속된 컬럼은 다른 테이블로 빼기
  • 제2정규형에서 transitive dependency 제거
    • 컬럼A라는 Primary key가 있다면 컬럼B는 컬럼A에 종속되고
    • 컬럼C는 컬럼B에 종속이 된다면
    • 컬럼C를 transitive dependency 라고 부른다
    • 이 컬럼C를 다른 테이블로 빼는 것을 제3정규화라고 부른다

Foreign key

  • 다른 테이블에 Primary key를 사용하는 컬럼
ALTER TABLE homework.program 
ADD CONSTRAINT program_teacher_FK 
FOREIGN KEY (강사) REFERENCES homework.teacher(id);

 

제3정규화를 거친 테이블 예제

create table 구매내역 (
	id int,
	유저id int,
	상품id int,
	수량 int,
	구매날짜 date,
	constraint 구매내역_pk primary key(id),
	constraint 구매내역_유저_fk foreign key (유저id) references 유저(id),
	constraint 구매내역_상품_kr foreign key (상품id) references 상품(id)
);

create table 유저 (
	id int primary key,
	아이디 varchar(100),
	이름 varchar(100)
)

create table 상품 (
	id int ,
	상품명 varchar(100),
	가격 int,
	상품카테고리id int,
	constraint 상품_pk primary key(id),
	constraint 상품_상품카테고리_fk foreign key (상품카테고리id) references 상품카테고리(id)
)

create table 상품카테고리 (
	id int primary key,
	상품카테고리 varchar(100),
	무료배송여부 boolean
)