Database/데이터베이스
[Database] 데이터 종속성과 정규화
gangintheremark
2021. 12. 7. 14:24
728x90
잘못된 설계로 인한 이상(Anomaly)
- 💡 삭제 이상 : 하나의 데이터를 삭제하면 다른 데이터도 같이 삭제됨
ex. 200번 학생이 'C123' 과목을 등록 취소 → 200번 학생의 학년정보 소실 - 💡 삽입 이상 : 불필요한 정보를 채워서 삽입해야함
ex. 학번이 600, 이름이 홍길동, 2학년, 전기과인 학생 정보를 삽입
→ insert into 수강 values(600, 'NONE', 'N', 2, '홍길동','전기') - 💡 갱신 이상 : 하나의 속성값을 변경하려면 여러개의 투플을 갱신해야함
ex. 400번 '송병길'의 학년을 4에서 3으로 변경 → 4개의 투플을 모두 갱신해야함
정규화의 필요성
- Anomaly가 발생한 이유 : 상이한 종류의 정보를 하나의 릴레이션으로 표현했기 때문
정규화 : 속성들 간의 종속 관계별로 별도의 릴레이션으로 분해하는 과정 → 스키마 변환
릴레이션의 분해의 원리
- 정보 표현의 무손실
- 최소의 데이터 중복성
- 분리의 원칙 : 속성들간의 의존성별로 별도의 릴레이션으로 분리
함수종속(FD)
- 함수 종속 관계는 릴레이션이 계속해서 변경되더라도 항상 지켜지는 의미적 관계여야함
- X(결정자) → Y(종속자) : X값을 알면 Y값도 알 수 있음
제 1정규형 (1NF)
- 릴레이션 R에 속한 모든 도메인이 원자 값(하나의 값)으로만 되어 있는 릴레이션
- 삽입 이상, 삭제 이상, 갱신 이상 존재
제 2정규형 (2NF)
- 기본키에 속하지 않은 속성은 모두 기본키에 완전 함수 종속임
- 즉, 부분 함수 종속성이 발생하면 분해한다.
- 여전히 삽입 이상, 삭제 이상, 갱신 이상 존재
제 3정규형 (3NF)
- 릴레이션이 2NF이고 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닌 경우
- 이행적 함수 종속성 : 기본키를 제외하고 컬럼 간에 종속성이 발생하는 것
보이스코드 정규형 (BCNF)
- 릴레이션 R의 결정자가 모두 후보키임
💡 3NF 지만 BCNF는 아닌 예
- 삽입 이상, 삭제 이상, 갱신 이상 존재
- 기본키(학번, 과목)이 교수를 함수적으로 종속하고 있다. 이 떄, 교수가 후보키(최소성과 유일성 만족)이고, 교수가 과목번호를 함수적으로 종속하는 경우 분해가 일어난다. 즉, 위와 같은 경우 <교수>테이블을 새롭게 만들고, 기본키는 교수로 하고 컬럼은 과목번호가 된다. 이러한 작업을 BCNF 라고 한다.
정규화의 수준
728x90