mysql 정규형, foreign Key

LikeChoonsik's·2022년 12월 26일
0

Mysql

목록 보기
11/21
post-thumbnail

정규화

데이터의 보존성을 높이는 등의 목적에서 데이터베이스 내에서 같은 정보가 2번 이상 기록되지 않고, 테이블 하나 하나는 주 키에서 직접 연상되는 데이터만으로 구성되도록 설계하는 것

제1정규형

하나의 셀 안에 하나의 데이터만 보관 하는 것
ex)
손흥민의 강의를 추가 할 때 아래처럼 축구에 배구를 추가하는게 아니라 새로운 행을 만들어줘야함

x

회원번호이름강의
101유재석축구
102박재범야구
103손흥민농구
103손흥민축구,배구

o

회원번호이름강의
101유재석축구
102박재범야구
103손흥민농구
103손흥민축구
103손흥민배구

제2정규형

  • partial dependency를 제거한 테이블, 즉 composite primary key 와 연관 되있으면 partial dependency가 있다고 표현함
    (composite primary key: 하나의 컬럼만으로 primary key 지정이 어려울 때 두 개 이상의 컬럼을 묶어 키로 만들어 주는 것)
  • 현재 테이블의 주제와 관련없는 컬럼은 다른 테이블로 옮기는 것, 속도 문제 등으로 이동
회원번호이름강의가격
101유재석축구1000
102박재범야구4000
103손흥민농구3000
103손흥민축구1000
103손흥민배구2000

위와 같을 경우 가격은 강의에 따라 바뀌는 것이므로 강의와 가격만을 분리한 테이블을 하나 만드는게 좋음

강의가격
축구1000
야구4000
농구3000
배구2000

제3정규형

  • 제2정규형을 만족하는 테이블에서 primary key 또는 composite primary key 컬럼에 종속된게 아닌 하찮은 잔챙이 컬럼에 종속된 컬럼을 다른 테이블로 빼는 테이블
  • 제2정규형 테이블에서 transitive dependency도 제거해버리면 그게 제3정규형입니다.

foreign key


강사 이름을 그대로 적는것 보다는 강사의 id를 적는게 좋습니다.
이러면 나중에 동명이인 강사가 생겨도 명확히 구분할 수 있으니까요.
저기서 강사id 컬럼을 전문용어로 foreign key 라고 합니다.

등록방법

CREATE TABLE 테이블명 (
id INT PRIMARY KEY,
프로그램 VARCHAR(100),
강사id INT REFERENCES 다른테이블(다른테이블컬럼)
)
or
CREATE TABLE 테이블명 (
id INT,
프로그램 VARCHAR(100),
강사id INT,
CONSTRAINT 제약조건작명 PRIMARY KEY (id),
CONSTRAINT 제약조건작명2 FOREIGN KEY (강사id) REFERENCES 다른테이블(다른테이블컬럼),
)

이미 생성된 테이블을 수정하려 한다면

ALTER TABLE 테이블명 ADD
CONSTRAINT 제약조건작명 FOREIGN KEY (강사id) REFERENCES teacher(id)

profile
춘식이는 너무 귀엽습니다.

0개의 댓글