데이터의 보존성을 높이는 등의 목적에서 데이터베이스 내에서 같은 정보가 2번 이상 기록되지 않고, 테이블 하나 하나는 주 키에서 직접 연상되는 데이터만으로 구성되도록 설계하는 것
하나의 셀 안에 하나의 데이터만 보관 하는 것
ex)
손흥민의 강의를 추가 할 때 아래처럼 축구에 배구를 추가하는게 아니라 새로운 행을 만들어줘야함
x
회원번호 | 이름 | 강의 |
---|---|---|
101 | 유재석 | 축구 |
102 | 박재범 | 야구 |
103 | 손흥민 | 농구 |
103 | 손흥민 | 축구,배구 |
o
회원번호 | 이름 | 강의 |
---|---|---|
101 | 유재석 | 축구 |
102 | 박재범 | 야구 |
103 | 손흥민 | 농구 |
103 | 손흥민 | 축구 |
103 | 손흥민 | 배구 |
회원번호 | 이름 | 강의 | 가격 |
---|---|---|---|
101 | 유재석 | 축구 | 1000 |
102 | 박재범 | 야구 | 4000 |
103 | 손흥민 | 농구 | 3000 |
103 | 손흥민 | 축구 | 1000 |
103 | 손흥민 | 배구 | 2000 |
위와 같을 경우 가격은 강의에 따라 바뀌는 것이므로 강의와 가격만을 분리한 테이블을 하나 만드는게 좋음
강의 | 가격 |
---|---|
축구 | 1000 |
야구 | 4000 |
농구 | 3000 |
배구 | 2000 |
강사 이름을 그대로 적는것 보다는 강사의 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)