MySQL에서 데이터베이스 정규화(Normalization)란 무엇인가요?
_____A: 정규화는 관계형 데이터베이스에서 데이터 중복을 최소화하고 무결성을 높이기 위해 테이블을 구조적으로 분해·조직화하는 설계 기법입니다. MySQL에서도 동일한 원리가 적용됩니다.
2. Q: 왜 데이터베이스 정규화가 필요한가요?
A:
- 중복 데이터 삭감으로 저장 공간 절약
- 데이터 일관성·무결성 강화
- 삽입·수정·삭제 이상(Anomaly) 방지
- 관리·유지보수 용이
3. Q: 정규화를 하면 얻을 수 있는 장점은 무엇인가요?
A:
- 삽입 이상(Insertion Anomaly), 수정 이상(Update Anomaly), 삭제 이상(Deletion Anomaly) 방지
- 쿼리의 예측 가능성·안정성 향상
- 스키마 변경 시 파급 효과 최소화
- 백업·복구 과정에서 신뢰성 확보
4. Q: 정규화의 단점이나 주의사항은 무엇인가요?
A:
- JOIN 연산 증가로 읽기 성능 저하 가능
- 지나친 정규화는 복잡성 증가
- 실시간 응답(RT)에 민감한 서비스에는 비정규화 고려 필요
5. Q: 제1정규형(1NF)이란 무엇인가요?
A:
- 모든 컬럼 값이 원자값(더 이상 분해 불가한 단일 값)으로 구성
- 반복 그룹·배열·리스트 형태의 컬럼 금지
- 예) phone_numbers 컬럼(“010-1111-2222,010-3333-4444”) 대신 별도 테이블로 분리
6. Q: 제2정규형(2NF)이란 무엇인가요?
A:
- 1NF를 만족
- 기본키가 복합키일 때, 부분 함수 종속(Composite Key의 일부 컬럼에만 종속) 제거
- 종속 속성을 별도 테이블로 분리
7. Q: 제3정규형(3NF)이란 무엇인가요?
A:
- 2NF를 만족
- 이행적 함수 종속(Non-key → Non-key) 제거
- 한 테이블 내에서 비키 속성들끼리 종속 관계가 없어야 함
8. Q: BCNF(보이스-코드 정규형)란 무엇인가요?
A:
- 3NF보다 엄격한 형태
- 모든 결정자가 후보키여야 함
- 복합키뿐 아니라 단일키라도 비후보키 종속을 제거
9. Q: 4NF, 5NF는 어떤 경우에 적용하나요?
A:
- 4NF: 다치 종속(Multi-valued Dependency) 제거
- 5NF: 조인 종속(Join Dependency) 제거
- 복잡한 다대다·여러 값 관계가 있는 경우에만 주로 적용
10. Q: MySQL에서 정규화 과정을 어떻게 수행하나요?
A:
1) 요구사항 분석·ERD 작성
2) 1NF → 2NF → 3NF 순차 적용
3) BCNF 이상 적용 필요 시 검토
4) DDL(SQL CREATE TABLE)로 스키마 정의
5) FOREIGN KEY 제약조건 활용해 참조 무결성 확보
11. Q: MySQL에서 제약조건(Foreign Key, Unique 등)은 어떻게 활용하나요?
A:
- FOREIGN KEY: 부모 테이블 PK와 자식 테이블 FK 연결
- UNIQUE: 중복 금지를 통한 후보키 역할
- NOT NULL, CHECK: NULL 허용 여부 및 값 범위 제한
- INDEX: 조인·검색 성능 보완
12. Q: 정규화와 비정규화(Denormalization)의 차이는 무엇인가요?
A:
- 정규화: 중복 최소화, 무결성 우선, 읽기 성능 저하 가능
- 비정규화: 중복 허용, 읽기 성능 우선, 무결성 관리 비용 증가
- 트래픽·쿼리 패턴에 따라 적절히 혼용
13. Q: 정규화된 테이블에서 JOIN이 많아지면 성능 저하가 우려됩니다. 어떻게 보완하나요?
A:
- 인덱스 최적화
- 필요한 컬럼만 SELECT
- 파티셔닝·샤딩
- 뷰(View)·머티리얼라이즈드 뷰 활용(MySQL 8.0+ 가상 컬럼 등)
- 캐싱 레이어 도입
14. Q: 실무에서 자주 겪는 정규화 관련 문제와 해결책은?
A:
- 문제: 중복 데이터로 업데이트 누락
해결: 정규화→참조 무결성 강화
- 문제: 쿼리 성능 이슈
해결: 부분 비정규화, 인덱스·캐시 추가
- 문제: 스키마 변경 시 복잡도
해결: 마이그레이션 툴( Flyway, Liquibase ) 사용
15. Q: 정규화 설계 시 유의할 점은 무엇인가요?
A:
- 도메인(데이터 성격) 우선 파악
- 변경 빈도·조회 패턴 고려
- 운영 환경 리소스(메모리, I/O) 예측
- 문서화·버전 관리 철저
16. Q: 정규화 후에도 추가로 관리해야 할 요소가 있나요?
A:
- 주기적 데이터 청소(주기적 검증·통계)
- 제약조건 위배 로그 분석
- 인덱스·통계 정보 갱신(ANALYZE TABLE)
- 스키마 리팩토링 주기적 검토
정규화는 데이터베이스의 효율성을 높이고, 데이터의 일관성을 유지하며, 데이터베이스의 유지보수를 용이하게 하는 데 중요한 역할을 합니다.
정규화는 여러 단계로 나뉘며, 각 단계는 특정한 규칙을 따릅니다.
이 과정은 일반적으로 "정규형(Normal Form)"이라는 개념을 통해 설명됩니다.
정규화의 목적 1. 데이터 중복 최소화 : 동일한 데이터가 여러 테이블에 저장되는 것을 방지하여 저장 공간을 절약하고 데이터의 일관성을 유지합니다.
2. 데이터 무결성 향상 : 데이터의 삽입, 수정, 삭제 시 발생할 수 있는 이상 현상(Anomalies)을 방지합니다.
예를 들어, 데이터가 여러 곳에 중복 저장될 경우, 한 곳에서만 수정하면 다른 곳의 데이터는 여전히 오래된 상태로 남아 있을 수 있습니다.
3. 유지보수 용이성 : 데이터베이스 구조가 명확해지므로, 데이터베이스의 변경이나 확장이 용이해집니다.
정규형의 종류 정규화는 여러 단계로 나뉘며, 각 단계는 특정한 조건을 만족해야 합니다.
일반적으로 사용되는 정규형은 다음과 같습니다.
1. 제1정규형(1NF) : - 모든 속성이 원자값(Atomic Value)을 가져야 하며, 각 속성의 값은 더 이상 분해할 수 없는 단일 값이어야 합니다.
- 예를 들어, 고객 테이블에서 고객의 전화번호를 여러 개 저장하는 대신, 각 전화번호를 별도의 행으로 나누어 저장해야 합니다.
2. 제2정규형(2NF) : - 제1정규형을 만족하면서, 기본 키에 완전 함수 종속(Full Functional Dependency)을 가져야 합니다.
즉, 기본 키의 일부에만 의존하는 속성이 없어야 합니다.
- 예를 들어, 학생-과목 테이블에서 학생 ID와 과목 ID가 기본 키일 때, 학생의 이름은 학생 ID에만 의존해야 하며, 과목의 이름은 과목 ID에만 의존해야 합니다.
3. 제3정규형(3NF) : - 제2정규형을 만족하면서, 기본 키에 이행적 종속(Transitive Dependency)이 없어야 합니다.
즉, 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 의존해서는 안 됩니다.
- 예를 들어, 학생 테이블에서 학생 ID가 기본 키이고, 학생의 주소가 학생의 이름에 의존한다면, 이는 제3정규형을 위반하는 것입니다.
4. 보이스-코드 정규형(BCNF) : - 제3정규형을 만족하면서, 모든 결정자가 후보 키가 되어야 합니다.
즉, 어떤 속성이 다른 속성을 결정할 때, 그 결정자가 후보 키여야 합니다.
5. 제4정규형(4NF) : - 다치 종속(Multi-Valued Dependency)을 제거해야 합니다.
즉, 하나의 속성이 여러 개의 값을 가질 수 있는 경우, 이를 별도의 테이블로 분리해야 합니다.
6. 제5정규형(5NF) : - 조인 종속(Join Dependency)을 제거해야 합니다.
즉, 데이터가 여러 테이블에 나누어져 있을 때, 이를 조인하여 원래의 데이터를 복원할 수 있어야 합니다.
정규화의 장단점 장점 : - 데이터 중복을 줄여 저장 공간을 절약합니다.
- 데이터 무결성을 높여 데이터의 일관성을 유지합니다.
- 데이터베이스의 유지보수가 용이해집니다.
단점 : - 정규화가 지나치게 진행되면, 데이터 조회 시 여러 테이블을 조인해야 하므로 성능 저하가 발생할 수 있습니다.
- 복잡한 쿼리가 필요할 수 있어, 개발 및 유지보수의 난이도가 증가할 수 있습니다.
결론 정규화는 데이터베이스 설계에서 필수적인 과정으로, 데이터의 중복을 줄이고 무결성을 높이는 데 중요한 역할을 합니다.
그러나 정규화의 정도는 데이터베이스의 사용 목적과 성능 요구 사항에 따라 조정되어야 하며, 때로는 비정규화(Denormalization)라는 반대 개념을 적용하여 성능을 최적화할 필요도 있습니다.
데이터베이스 설계자는 이러한 균형을 잘 맞추어야 합니다.
작성자:
정유진 [비회원]
| 작성일자: 1년 전
2024-09-20 08:05:24
조회수: 205 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 205 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.