Back-End/Oracle

Oracle ■ 데이터베이스 정규화

SIKIDA 2024. 7. 26. 18:56
728x90

 

  데이터베이스 정규화 

 

• 데이터베이스 정규화

이상 문제를 해결하기 위해 속성들끼리의 종속 관계를 분석하여 여러개의 릴레이션으로 분해하는 과정

 

• 이상 문제

삽입 이상 : 데이터를 저장할 때 원하지 않는 정보가 함께 삽입되는 경우

삭제 이상 : 튜플을 삭제함으로써 유지되어야 하는 정보까지도 연쇄적으로 삭제되는 경우

갱신 이상 : 중복된 튜플 중 일부의 속성만 갱신 시킴으로써 정보의 모순성이 발생하는 경우

 

• 릴레이션(=테이블)

관계형 데이터베이스에서 정보를 저장하는 기본 단위

 

• 참고

릴레이션 분해가 많이 될 수록 JOIN을 자주 사용하게 되어 쿼리의 속도가 상대적으로 느려지기 때문에 데이터베이스 정규화는 적정선에서 해야 함

* 보통의 경우 3정규화 까지만 진행 하는것을 권장

-> 이후까지 정규화를 진행하면 릴레이션 분해가 과하게 되기 때문에 성능에 영향을 미침

 

• 함수적 종속

릴레이션에서 속성(컬럼)들의 부분 집합을 X, Y라 할 때 특정 튜플에서 X의 값이 Y의 값을 함 수적으로 결정한다면 Y가 X에 함수적으로 종속되었다고 함

 

• 함수적 종속 추론 규칙

1. 재귀 규칙 : Y가 X의 부분 집합이면 X -> Y 이다.

2. 증가 규칙 : X -> Y 이면 WX -> WY 이고 WX -> Y 이다.

3. 이행 규칙 : X -> Y 이고 Y -> Z 이면 X -> Z 이다

4. 유니온 규칙 : X -> Y 이고 X -> Z 이면 X -> YZ 이다.

5. 분해 규칙 : X -> YZ 이면 X -> Y 와 X -> Z 이다.

6. 가이행 규칙 : 만일 W -> X 이고 WY -> Z 이면 WY -> Z 이다.

 

• 삽입 이상 발생

신입 학생이 입학하여 학번과 학년을 입력 했으나, 아직 과목이 정해지지 않았거나 시험을 보지 않아

성적이 없는 상태이기 때문에 불필요한 정보(과목이름,성적을 함께 삽입해야함)

 

 

• 삭제 이상 발생

학생 번호가 2번인 학생의 과목에 대한 성적을 삭제할 경우 학생 번호, 학년 등

모든 정보 가 같이 삭제되어 학생 정보 자체가 모두 사라짐

 

 

• 갱신 이상 발생

학생번호 3번인 학생이 2학년이 되어 정보를 변경할 때 3개의 데이터 중 하나라도 바꾸지 않을 경우 동일한 학생에 대한 정보가 서로 달라지는 모순성이 발생함

 

 

• 제1 정규형

도메인의 값을 모두 원자값이어야 함. 핸드폰에 2가지 정보가 들어가 있기 때문에 제 1정규형을 만족하지 않음

 

 

• 제1 정규형 진행

하나의 값만 들어갈 수 있도록 튜플 수정 및 추가

 

 

• 제2 정규형 (부분 함수 종속 제거)

학번은 학부와 등록금을 결정할 수 있고, 학번과 과목 코드는 성적을 결정할 수 있음

 

 

• 제2 정규형 진행

학번의 경우 학부와 등록금을 결정할 수 없음. 모든 컬럼에 대해 영향을 줄 수 있는 학번을 기준으로 릴레이션 분해

 

 

• 제3 정규형 (이행 함수 종속 제거)

학번(X)이 학부(Y)를 결정하고, 학부(Y)가 등록금(Z)을 결정하므로 이행

규칙에 따라 학번(X)이 등록금(Z)을 결정할 수 있음

* 이행규칙 : X -> Y 이고 Y -> Z 이면 X -> Z 이다.

 

• 그 외 정규형

1. BCNF : 결정자 중 후보키가 아닌 것들을 제거

2. 제4 정규형 : 다치 종속 제거

3. 제5 정규형 : 조인 종속 제거

 

 

데이터베이스 정규화에 대해 정리를 진행하였다! 프로젝트 기간에도 틈틈히 조금씩 시간을 투자하여 정리를 진행해야겠다! 그럼 20000

'Back-End > Oracle' 카테고리의 다른 글

Oracle ■ DCL GRANT, REVOKE  (0) 2024.08.02
Oracle ■ DDL ALTER, DROP  (0) 2024.07.29
Oracle ■ CREATE  (0) 2024.07.25
Oracle ■ DML INSERT, UPDATE, DELETE  (5) 2024.07.24
Oracle ■ DML SELECT (4)-서브쿼리  (0) 2024.07.17