데이터베이스를 정규형에 맞게 분석한다는 건, 테이블 구조랑 그 관계, 그리고 속성들 사이의 의존성을 살펴보는 거야. 분석의 핵심 목표는 정규화 위반을 찾아내고, 그게 성능이나 무결성, 데이터 다루기 편함에 어떤 영향을 주는지 평가하는 거지.
쉽게 말하면, 이건 회계 감사를 하는 거랑 비슷해: 돈이 아무 데나 굴러다니지 않고, 필요한 항목별로 딱딱 정리되어 있는지 확인하는 거야.
데이터베이스 분석 실전 접근법
어떤 데이터베이스든, 우리는 항상 세 가지 핵심 질문을 던지면서 시작해. 이건 각각 1NF, 2NF, 3NF에 해당하는 질문들이야.
예를 들어, 창고 데이터베이스에 아래와 같은 테이블이 있다고 해보자:
| product_id | product_name | supplier_name | supplier_phone | stock_quantity |
|---|---|---|---|---|
| 1 | 못 | StroyKomplekt | +12301112233 | 150 |
| 2 | 나사 | KrepezhPro | +12306667788 | 200 |
| 3 | 너트 | StroyKomplekt | +12301112233 | 100 |
이 테이블이 정규형에 맞는지 어떻게 확인할까?
1NF(제1정규형)는 다음과 같아:
- 각 셀에는 하나의 값만 들어가야 해.
- 동일한 데이터 타입에 대해 중복되는 컬럼이 없어야 해.
우리 예시에서는 1NF 위반이 없어: 각 셀에 원자값만 들어가 있거든. 즉, 이 테이블은 1NF야. 굿! 이제 다음 단계로 가보자.
2NF(제2정규형)는 다음과 같아:
- 1NF를 만족해야 해.
- 모든 비키 속성은 전체 기본키에만 의존해야 해(일부에만 의존하면 안 됨).
이 테이블을 보면 supplier_name이랑 supplier_phone은 product_id (기본키)에만 의존해. 근데 여기서 데이터 중복이 생겨: 같은 공급자에 대해 이름과 전화번호가 여러 행에 반복돼.
2NF로 만들려면, 테이블을 두 개로 나누면 돼:
Products 테이블:
| product_id | product_name | supplier_id | stock_quantity |
|---|---|---|---|
| 1 | 못 | 1 | 150 |
| 2 | 나사 | 2 | 200 |
| 3 | 너트 | 1 | 100 |
Suppliers 테이블:
| supplier_id | supplier_name | supplier_phone |
|---|---|---|
| 1 | StroyKomplekt | +78901112233 |
| 2 | KrepezhPro | +78906667788 |
이제 각 공급자는 한 번만 나오고, 두 테이블은 supplier_id 외래키로 연결돼.
3NF(제3정규형)는 다음과 같아:
- 2NF를 만족해야 해.
- 모든 비키 속성은 기본키에만 의존해야 하고, 다른 비키 속성에는 의존하면 안 돼.
정규화된 Products와 Suppliers 테이블에는 전이적 의존성이 없어. 즉, 이 테이블들은 3NF야.
실전 과제
예를 들어, "대학교"라는 원본 테이블이 있다고 해보자
| student_id | student_name | course_name | professor_name | professor_email |
|---|---|---|---|---|
| 101 | Otto Lin | 수학 | Peter Pen | pen@university.com |
| 102 | Anna Song | 물리 | Alex Sid | sid@university.com |
| 103 | Otto Lin | 물리 | Alex Sid | sid@university.com |
- 테이블이 정규형에 맞는지 확인해봐.
- 필요하다면 1NF, 2NF, 3NF로 바꿔봐.
해결
STEP 1: 1NF 확인
이미 1NF야: 각 셀에 하나의 값만 들어가 있어.
STEP 2: 2NF 확인
2NF 위반이 있어: 교수 정보(이름, 이메일)가 반복돼. 이걸 따로 빼면 돼:
Students 테이블:
| student_id | student_name |
|---|---|
| 101 | Otto Lin |
| 102 | Anna Song |
Courses 테이블:
| course_id | course_name | professor_id |
|---|---|---|
| 1 | 수학 | 1 |
| 2 | 물리 | 2 |
Professors 테이블:
| professor_id | professor_name | professor_email |
|---|---|---|
| 1 | Peter Pen | pen@university.com |
| 2 | Alex Sid | sid@university.com |
Enrollments 테이블:
| enrollment_id | student_id | course_id |
|---|---|---|
| 1 | 101 | 1 |
| 2 | 102 | 2 |
| 3 | 103 | 2 |
STEP 3: 3NF 확인
새 구조에는 전이적 의존성이 없어. 테이블들이 3NF에 맞아.
실전 팁
- 쓸데없이 완벽만 추구하지 마. 너무 정규화하면 쿼리가 복잡해질 수 있어.
- 분석할 땐 탐정처럼 접근해. 중복, 쓸데없는 의존성, 기타 "이상 현상"을 찾아봐.
- 성능도 잊지 마. 정규화는 데이터의 깔끔함과 처리 속도 사이의 밸런스야.
이제 데이터베이스에서 문제를 찾고 해결할 수 있으니까, 어떤 크기의 DB라도 제대로 "감사"할 수 있을 거야. 기억해: 좋은 데이터베이스는 기능만 좋은 게 아니라, 예쁘고(정규화된) 설계도 중요하다는 거!
GO TO FULL VERSION