정확한 설명은 링크를 통해
모든 속성은 반드시 하나의 값만 가져야 한다
소속사(PK) | 직원번호 | 이름 | SNS |
---|---|---|---|
EDAM | 1004 | 이지은 | Instagram, FaceBook, Cyworld |
위 테이블에서 SNS 속성은 여러 개의 값을 가지고 있다.
모든 속성은 반드시 하나의 값만 가져야 한다는 제1 정규형에 위배된다.
각 속성이 하나의 값만 가지도록 아래와 같이 수정해보겠다.
소속사(PK) | 직원번호 | 이름 | SNS1 | SNS2 | SNS3 |
---|---|---|---|---|---|
EDAM | 1004 | 이지은 | Cyworld |
위 테이블은 같은 성격 또는 내용의 속성을 복수로 가지고 있다.
즉, 반복된 그룹을 가지고 있으며 제1 정규형에 위배된다.
따라서 결과적으로 위 테이블은 분리되어야 한다.
소속사(PK) | 직원번호 | 이름 |
---|---|---|
EDAM | 1004 | 이지은 |
KOZ | 1006 | ZICO |
직원번호 | SNS |
---|---|
1004 | |
1004 | |
1004 | Cyworld |
1006 | |
1006 |
직원번호는 여러 개의 SNS와 연결된다.
1:N 관계
모든 속성은 반드시 기본키에 종속되어야 한다
(기본키 일부에만 종속되어서는 아니 된다)
주문번호(PK) | 음료코드(PK) | 주문수량 | 음료명 |
---|---|---|---|
1 | 1001 | 321 | 토레타 |
2 | 1004 | 121 | 토레타(락토) |
3 | 1007 | 77 | 콕카 코오라 |
위 테이블에서 PK는 복합키로 구성되어 있다.
즉, 주문번호와 음료코드 두 컬럼이 그룹화되어 하나의 PK가 된 것이다.
테이블에는 단 하나의 PK가 존재해야 하는 것이 맞지만, 단 하나의 칼럼을 지정하여 PK로 설정해야 하는 것은 아님에 주의한다.
음료코드로 음료가 식별되며, 기본키인 주문번호는 음료명을 확정하지 않는다.
이러한 구성이라면, 주문이 발생하지 않는 한 새로운 음료를 입력할 수 없게 된다.
음료명을 변경하려면 해당되는 주문의 행 자체를 수정해야할 필요가 생기며,
음료 정보를 삭제하려면 주문까지 삭제된다.
따라서 다음과 같이 분리되어야 한다.
주문번호(PK) | 음료코드 | 주문수량 |
---|---|---|
1 | 1001 | 321 |
2 | 1004 | 121 |
3 | 1007 | 77 |
음료코드(FK) | 음료명 |
---|---|
1001 | 토레타 |
1004 | 토레타(락토) |
1007 | 콕카 코오라 |
음료는 여러 개의 주문과 연결된다.
1:N 관계
기본키가 아닌 모든 속성 간에 종속관계가 존재해서는 아니 된다
직원번호(PK) | 직원명 | 소속사 번호 | 소속사명 |
---|---|---|---|
10042 | 아이유 | 11 | EDAM |
12022 | ZICO | 15 | KOZ |
10041 | 한지민 | 20 | BH엔터 |
위 테이블에서 소속사명은 PK인 직원번호가 아닌 소속사 번호에 종속된다고 보는 것이 타당할 것이다.
기본키가 아닌 다른 속성 사이에 종속관계가 있으므로 정규화 해야 한다.
직원번호(PK) | 직원명 | 소속사번호 |
---|---|---|
10042 | 아이유 | 11 |
12022 | ZICO | 15 |
10041 | 한지민 | 20 |
소속사번호 | 소속사명 |
---|---|
11 | EDAM |
15 | KOZ |
20 | BH엔터 |
소속사는 여러 개의 직원과 연결된다.
1:N 관계