728x90
BCNF가 뭐길래?
BCNF(Boyce-Codd Normal Form)는 데이터베이스 정규화의 마지막 단계라고 볼 수 있다. 3NF보다 한 단계 더 엄격한 정규화 형태다. 간단히 말하면 "모든 결정자는 후보키여야 한다"는 규칙이다.
왜 BCNF가 필요할까?
3NF만 해도 충분해 보이는데 왜 BCNF까지 필요할까? 바로 3NF의 한계!!!! 때문이다.
실제 예시로 이해해보기
학생 과목 수강 테이블을 생각해보자:
학생ID | 과목명 | 교수명 | 학과
------ |------------- |--------|------
001 | 데이터베이스 | 김교수 | 컴공
001 | 운영체제 | 박교수 | 컴공
002 | 데이터베이스 | 김교수 | 컴공
이 테이블의 문제점은 뭘까!!
- 교수명 → 학과 (김교수는 항상 컴공과)
- 하지만 교수명은 후보키가 아니다!
BCNF 정규화 단계별 진행
1단계: 함수 종속성 파악
위 예시에서:
- (학생ID, 과목명) → 교수명, 학과
- 교수명 → 학과
2단계: 위반 사항 찾기
문제: 교수명 → 학과에서 교수명이 후보키가 아닌데 결정자 역할을 한다
3단계: 테이블 분해
분해 전 (3NF이지만 BCNF 아님):
수강(학생ID, 과목명, 교수명, 학과)
분해 후 (BCNF):
수강(학생ID, 과목명, 교수명)
교수정보(교수명, 학과)
BCNF vs 3NF 비교표
구분3NFBCNF
조건 | 이행적 종속 제거 | 모든 결정자가 후보키 |
엄격함 | 보통 | 매우 엄격 |
분해 | 적당함 | 더 많은 분해 |
조인 | 상대적으로 적음 | 더 많은 조인 필요 |
실무에서의 BCNF 활용
언제 사용하는가?
- 데이터 정합성이 매우 중요한 시스템
- 금융, 의료, 정부 시스템
- 마스터 데이터 관리
주의사항
- 과도한 분해로 성능 저하 가능
- 조인 연산 증가
- 개발 복잡도 상승
BCNF 정규화 체크리스트
- 모든 함수 종속성을 식별했는가?
- 각 결정자가 후보키인가?
- 분해 후 정보 손실은 없는가?
- 성능 영향도는 적절한가?
마무으리 !!
그렇다면 언제 BCNF를 선택할까?
BCNF는 완벽한 정규화를 원할 때 사용하지만, 실무에서는 성능과 복잡도를 고려해야 한다.
추천 상황:
- 데이터 무결성이 성능보다 중요한 경우
- 마스터 데이터나 설정 테이블
- 업데이트가 빈번하지 않은 테이블
피해야 할 상황:
- 대용량 트랜잭션 처리 시스템
- 실시간 분석이 필요한 경우
- 조인 비용이 너무 큰 경우
정규화는 도구일 뿐이다. 비즈니스 요구사항과 성능을 균형 있게 고려해서 적절한 수준의 정규화를 선택하는 것이 현명한 설계자의 덕목이 아닐까?ㅎㅎㅎ
320x100
'IT > Databases' 카테고리의 다른 글
티베로 유저 기본 테이블스페이스 지정 및 테이블스페이스 변경 쿼리 (0) | 2024.03.18 |
---|---|
티베로 스튜디오2 엑셀 자료 업로드 방법 초간략 정리 (0) | 2024.01.17 |
티베로 데이터베이스 쿼리 실행계획 확인 (explan plan for the Tibero database) (0) | 2024.01.12 |
erwin 테이블,컬럼 정보 등 엑셀로 내보내기 (0) | 2023.10.31 |
Entity-Relationship Modelling(ERD) relationship type 에 관하여~ (0) | 2022.11.29 |