Database 에서의 정규화는 중요하다
정규화가 정해져 있지않다면 데이터의 조회조건을 잡을 수 없어 쿼리가 점점 복잡해지며, 유지보수하기에 점점 어려워 질 것이다.
정규화의 정의
관계형 데이터베이스 설계에서 중복의 최소화하여 데이터를 구조화시키는 프로세스를 정규화(Normalization)라고 하며 관계를 재구성하여 작고 잘 조진된 관계를 생성하는 것이다.
일반적으로 정규화란 크고, 제대로 조직되지않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것을 말한다.
정규화의 목적은 테이블에서의 데이터의삽입,삭제,변경이 정의된 관계로부터 데이터베이스의 나머지 부분들로 전파되게 하는 것이다.
정규화의 장단점
장점
1) 데이터 베이스 변경 시 이상 현상을 제거 할 수 있다.
2) 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 된거나 일부만 변경해도 된다.
단점
1) 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아진다.
2)질의에 대한 응답 시간이 느려질 수도 있다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다.
일반적으로 많이 다루고 있는 1NF, 2NF, 3NF, BCNF 까지 설명을 하겠습니다
외우는것보다 실제로 DB 에 테스트를 하면서 진행을 하시는 것을 추천드립니다.
이게 왜 필요한것인지? , 왜 정규형을 해야하는지 실제 테스트를 하시다 보면 아시게 될 것이라 생각합니다.
1) 제1 정규형(1NF)
제1정규형(1NF 또는 최소형)은 데이터베이스 정규화에서 사용하는 정규형중 하나이다. 관계형 데이터베이스의 테이블이 1NF이면 최소한 테이블은 관계이며, 중복되는 항목이 없어야 한다이다.
제1 정규형은 다음과 같은 규칙들을 만족해야 한다.
1. 각 컬럼이 하나의 속성만을 가져야 한다.
2. 하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야 한다.
3. 각 컬럼이 유일한(unique) 이름을 가져야 한다.
1번 규칙을 불만족하므로 이를 고치기 위해서는 아래와 같이 분해하면 된다.
위와 같이 각 칼럼이 원자 값을 갖도록 테이블을 분해하면 1 정규형을 만족하게 바꿀 수 있다.
2) 제2 정규형 (2NF)
제2 정규형(2NF)는 데이터베이스 정규화에서 사용하는 정규형중 하나로, 에드거 F. 커드가 1971년에 정의하였다.[1] 제 1 정규형(1NF)인 테이블이 제2 정규형을 충족시키는 필요충분조건은 다음과 같다: 후보 키 K와 K에 속하지 않는 속성 A가 있을 때, A를 결정하기 위해 K의 일부가 아닌 K 전체를 참조해야만 하는 경우 1NF 테이블은 2NF이다.
약간 어려운(정확한) 정의로 얘기하자면 : 모든 비기본 속성(non-prime attribute; 후보 키에 속하지 않은 속성)들이 후보 키에 속한 속성들 전체에 함수 종속인 경우에 한해서 1NF 테이블은 2NF이다.
1NF 테이블은 복합 후보 키(한 개 이상의 속성들로 구성된 후보 키)가 없으면 자동으로 2NF이다.
후보 키 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. -->
ko.wikipedia.org
제2 정규형은 다음과 같은 규칙을 만족해야 한다.
1. 1정규형을 만족해야 한다.
2. 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야 한다. == 모든 칼럼이 완전 함수 종속을 만족해야 한다.
부분적 종속이란 기본키 중에 특정 컬럼에만 종속되는 것이다.
완전 함수 종속이란 기본키의 부분집합이 결정자가 되어선 안된다는 것이다.
종업원의 특정 값을 알기 위해서는 기술+근무지가 있어야 한다. (ex : Jones 은 114 Main Street 에 , Ellis 는 73 Industrial Way에 중복이 있다.)
따라서 제2 정규화를 만족하지 않으므로 아래와 같이 분해해야 한다.
위와 같이 분해하면 제2 정규형을 만족한다.
3) 제3 정규형 (3NF)
제3 정규형은 다음과 같은 규칙을 만족해야 한다.
1. 2 정규형을 만족해야 한다.
2. 테이블 내의 모든 속성이 기본키에만 의존하며, 다른 후보 키에 의존하지 않는다.
이행 종속성이란?
X->Y, Y->Z 일 때 X->Z 가 성립하면 이행 종속
위와 같이 분해하면 제 3정규형을 만족한다.
4) BCNF (Boyce-Codd Normal Form)
보이스-코드 정규화 또는 BCNF 정규화란 Boyce-Codd Normal Form의 약자로서
관계형 데이터베이스의 릴레이션 R에서 함수 종속성 X→Y가 성립할 때, 모든 결정자 X가 후보키이면 BCNF 정규형이 된다. 즉, 식별자로 쓰이는 속성이 일반속성에 종속되지 않아야 한다. 제3정규화를 통해서도 제거되지 않은 데이터의 중복 문제를 해결해 주기 때문에 일명 ‘제3.5정규화’라고도 부른다.
BCNF는 제 3정규형을 좀 더 강화한 버전으로 다음과 같은 규칙을 만족해야 한다.
1. 3정규형을 만족해야 한다.
2. 모든 결정자가 후보키 집합에 속해야 한다.
모든 결정자가 후보키 집합에 속해야 한다는 뜻은, 후보키 집합에 없는 칼럼이 결정자가 되어서는 안 된다는 뜻이다.
위의 관계는 3NF에 있습니다[전이적 종속성이 없기 때문에]. 중요하지 않은 모든 FD X->Y에 대해 X가 키여야 하는 경우 릴레이션 R은 BCNF에 있습니다.
위의 관계는 FD(teacher->subject)에서 teacher가 키가 아니기 때문에 BCNF에는 없습니다. 이 관계는 이상 현상으로 어려움을 겪습니다.
예를 들어 학생 Subbu를 삭제하려고 하면 R. Prasad가 C를 가르치는 정보를 잃게 됩니다. 이러한 어려움은 교사가 결정적이지만 후보 키가 아니라는 사실 때문에 발생합니다.
BCNF에 대한 분해
Teacher-> subject는 BCNF를 위반합니다[선생님은 후보 키가 아니므로].
X->Y가 BCNF를 위반하면 R을 R1(X, Y) 및 R2(RY)로 나눕니다.
따라서 R은 R1(Teacher, Subject)과 R2(Sutdent, Teacher)의 두 관계로 나뉩니다.
R에 존재했던 모든 변칙은 이제 위의 두 관계에서 제거되었습니다.
BCNF 분해가 종속성 보존 속성을 항상 만족하는 것은 아닙니다. BCNF 분해 후 종속성이 유지되지 않으면 BCNF에 남을지 아니면 3NF로 롤백할지 결정해야 합니다. 이 롤백 프로세스를 비정규화라고 합니다.
'Database' 카테고리의 다른 글
[MySql] 테이블 , 데이터 이동 ,테이블 복사하기 (0) | 2023.08.04 |
---|---|
Oracle 11g Client 완전삭제 ,제거 방법 (0) | 2023.08.02 |
MySQL 외부 , 원격 접속(접근) 특정 IP 허용 및 지정 , 모든 접근권한 허용하기. (0) | 2023.08.02 |
Mysql - Sqlyog 로그인에러 (오류 번호 2058) 해결 방법 (0) | 2023.08.02 |
MySql 접속 방법 - CMD(콘솔) (0) | 2023.08.01 |