728x90
반응형
SMALL
(1) 기본 목표
테이블 간의 중복된 데이터를 허용하지 않는 것
무결성을 유지하며 DB의 저장공간을 줄일 수 있다.
(2) 정의
삽입, 수정, 삭제 시 발생할 수 있는 이상 현상을 줄이는 과정
테이블을 분해하는 것이며 보통 3차 정규화까지 진행
(3) 필요 이유
테이블을 잘못 설계하면 불필요한 데이터 중복으로 인해
공간이 낭비되는데, 이를 이상현상(Anomaly)이라고 함
아이디 이름 전공 수업코드 수업명 인원
-------------------------------------------------------------
apple 김사과 컴공 C001 Java 30
apple 김사과 컴공 C002 DBMS 35
apple 김사과 컴공 C003 Python 30
Hpple 홍길동 경영 A001 아버지 10
Lpple 이순신 해양 B001 선박 15
- 삽입 이상 : 새로운 데이터를 삽입하기 위해 불필요한 데이터도 넣어야 하는 문제
예) 과목이 정해지지 않은 학생을 넣으려면 수업명에 NULL을 입력할 수 없어서 수업명을 '미정', - 갱신 이상 : 중복된 행 중 일부만 변경해서 데이터가 불일치 되는 것
예) 김사과 학생이 전공을 때려치고 기계 로 바꾸려면 3개 데이터를 변경해야 함 - 삭제 이상 : 행을 삭제하면 필요한 데이터까지 삭제되는 현상
예) 아버지 수업을 폐강하는 경우 홍길동 정보를 지우는 실수 발생
(4) 정규화의 종류
- 1차 정규화 하나의 컬럼에는 하나의 값만 존재해야 한다(원자성)
1) 1차 정규화
하나의 컬럼에는 하나의 값만 존재해야 한다(원자성)
* 도시건설 게임
User Building Cost Place Place_size
-----------------------------------------------------------------
Bach Farm,Fac 50,70 Plain,City 100, 200
Mozart Farm,Fac,Cos 50,70,200 Plain,City,City 100, 200, 200
Tscai Fac 70 Shore 500
User Building Cost Place Place_size
------------------------------------------------------------
Bach Farm 50 Plain 100
Bach Fac 70 City 200
Mozart Farm 50 Plain 100
Mozart Fac 70 City 200
Mozart Cos 200 City 200
Tscai Fac 70 Shore 500
2) 2차 정규화(2nd Normal Form, 2NF)
후보키의 진부분집합에서 부분함수 종속성을 제거하는 작업
부분함수적 종속을 완전함수적 종속으로 만드는 과정
User Building Place Place_size Building Cost
--------------------------------------- --------------
Bach Farm Plain 100 Farm 50
..... Fac 70
Tscai Fac Shore 500 Cos 200
3) 3차 정규화
1차 정규화 및 2차 정규화를 만족하고
이행적 함수적 종속을 갖지 않는 정규형
이행적 함수적 종속 : A값을 알면 B값을 알고, B값을 알면 C값을 아는 관계
User Building Place Building Cost
-------------------------
Bach Farm Plain Place Place_size
...
Tchai Fac Shore
(5) 반정규화 활용 단계에서 정규화를 진행하지 않는 게 더 편리하다면 반정규화를 진행한다.
예)
hash_tag
1 DBMS
1 LIKE
1 Good
3 DBMS
3 Boring
board
1 Funny DBMS apple
2 Funny Python apple
3 Boring DBMS melon
-- 반정규화 --
board
1 Funny DBMS apple #DBMS#LIKE#Good
2 Funny Python apple
3 Boring DBMS melon #DBMS#Boring
728x90
반응형
LIST
'개발 > 정리 내용' 카테고리의 다른 글
서블릿(Servlet) (0) | 2023.01.14 |
---|---|
CGI (Common Geteway Interface) (0) | 2023.01.14 |
MariaDB Built-in Function (0) | 2023.01.13 |
SQL II (0) | 2023.01.13 |
데이터 모델링 1 (0) | 2023.01.13 |