본문 바로가기
Database/MySQL

[MySQL] 기본 문법 - 3 (정규화 개쉬움)

by VictorMeredith 2023. 5. 4.

1. SQL DDL(Data Definition Language)

- TABLE 삭제 : DROP TABLE 테이블명

- COL 추가 : ALTER TABLE 테이블명 ADD 컬럼명 타입 옵션

- COL 수정 : ALTER TABLE 테이블명 MODIFY COLUMN 컬럼명 타입 옵션

- COL 삭제 : ALTER TABLE 테이블명 DROP COLUMN 컬럼명

 

2. 제약조건 (Constraint) : 옵션자리에 들어가는 것들

- NOT NULL : 빈 값 금지

- UNIQUE : 중복 금지(행마다 달라야함)

- CHECK(조건식) : 조건식에 맞아야함

- PRIMARY KEY : _id 같은 고유값(고유 행을 구분하기 위한 값), NOT NULL과 UNIQUE가 자동으로 부여된다.

- AUTO_INCREMENT 숫자 : 자동으로 증가하는 정수를 넣어준다.

 

3. 정규화(정규형) 

3-1. 제 1 정규화 (1NF)

  - 한칸에는 하나의 데이터만 넣는다.

  - ex) 책 목록 데이터에 : 책1, 책2, 책3 이따구로 넣지 않는다.

 

 3-2) 제 2 정규화 (2NF)

  - 테이블의 속성들이 부분 함수 종속(Partial Functional Dependency)을 제거하기 위해 진행한다.

  - 현재 테이블과 주제가 밀접하지 않은 경우를 분리하는 작업이다.

  - (용어) Composite Primary Key : Column 여러개를 연결하여 Primary Key의 역할을 수행하는 것

  - 하나의 Composite Primary Key 에 종속된 경우를 Partial Dependency라고 한다.

 

 3-2) 제 2 정규화의 예시

- 해당 테이블에서 기본 키는 OrderID, ProductID이다.

- 한국말로 풀이하면, 지금 이 표는 누가 어떤 상품 주문을 얼마나 했는지가 중요하다.

- 상품에 종속된 다른 부분들은 제2정규화를 통해 떼어내도 된다. 이들이 Partial Functional Dependency 이다.

 

주문테이블 : 누가 어떤상품을 얼마나 주문했는지가 명확해진다. ProductID가 Foreign Key가 된다.

 

제품테이블 : ProductID를 통해 관계를 연결한 채 떼어낸다. ProductID가 Primary Key가 된다.

 

- 부분함수종속이 제거되고, 각 테이블의 데이터 중복이 줄어든다. 이를 통해 데이터 일관성과 무결성이 향상된다.

 

3-3) 제 3 정규화 (3NF)

- 일반 컬럼에만 종속된 컬럼을 다른곳으로 빼낸다.

- 장점 : 수정이 쉬워진다.

- 단점 : 귀찮다.

- 어려운 말로 테이블의 속성들이 이행적 함수 종속 (Transitive Functional Dependency)을 제거하기 위해 진행한다.

- 이행적 함수 종속이란 : 'X->Y', 'Y->Z' 가 성립할 경우 'X->Z' 가 성립하는 관계이다.

- 제3정규화를 위해서는 제2정규화를 만족해야 한다.

 

3-4) 제 3 정규화의 예시

CustomerID -> CustomerCountry, SalespersonID -> SalespersonCountry 종속

 

주문테이블 - 제3정규화가 되었다.

 

분리된 고객테이블과 영업사원테이블

 

<정리>

제2 정규화(2NF): 제2 정규화는 테이블에서 부분 함수 종속(Partial Functional Dependency)을 제거하는 과정입니다. 부분 함수 종속이란 복합키(Composite Key)의 일부분만이 다른 속성을 결정하는 상황을 의미합니다. 즉, 기본키의 일부만으로 다른 속성이 결정될 때 제2 정규화를 진행합니다.

제3 정규화(3NF): 제3 정규화는 테이블에서 이행적 함수 종속(Transitive Functional Dependency)을 제거하는 과정입니다. 이행적 함수 종속이란 X → Y, Y → Z가 성립할 때 X → Z가 성립하는 관계를 의미합니다. 즉, 기본키가 아닌 속성이 다른 기본키가 아닌 속성에 종속되어 있을 때 제3 정규화를 진행합니다.

 

 

- 사실 정규화 하나도 안쉬움

'Database > MySQL' 카테고리의 다른 글

[MySQL] 기본 문법 - 6  (0) 2023.05.04
[MySQL] 기본 문법 - 5  (0) 2023.05.04
[MySQL] 기본 문법 - 4 (Join 개쉬움)  (0) 2023.05.04
[MySQL] MySQL 기본 문법 -2  (0) 2023.05.04
[MySQL] MySQL 기본 문법 - 1  (0) 2023.05.04

댓글