CodeGym /행동 /SQL SELF /기존 데이터베이스의 정규형 준수 분석

기존 데이터베이스의 정규형 준수 분석

SQL SELF
레벨 26 , 레슨 2
사용 가능

데이터베이스를 정규형에 맞게 분석한다는 건, 테이블 구조랑 그 관계, 그리고 속성들 사이의 의존성을 살펴보는 거야. 분석의 핵심 목표는 정규화 위반을 찾아내고, 그게 성능이나 무결성, 데이터 다루기 편함에 어떤 영향을 주는지 평가하는 거지.

쉽게 말하면, 이건 회계 감사를 하는 거랑 비슷해: 돈이 아무 데나 굴러다니지 않고, 필요한 항목별로 딱딱 정리되어 있는지 확인하는 거야.

데이터베이스 분석 실전 접근법

어떤 데이터베이스든, 우리는 항상 세 가지 핵심 질문을 던지면서 시작해. 이건 각각 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_phoneproduct_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를 만족해야 해.
  • 모든 비키 속성은 기본키에만 의존해야 하고, 다른 비키 속성에는 의존하면 안 돼.

정규화된 ProductsSuppliers 테이블에는 전이적 의존성이 없어. 즉, 이 테이블들은 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
  1. 테이블이 정규형에 맞는지 확인해봐.
  2. 필요하다면 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에 맞아.

실전 팁

  1. 쓸데없이 완벽만 추구하지 마. 너무 정규화하면 쿼리가 복잡해질 수 있어.
  2. 분석할 땐 탐정처럼 접근해. 중복, 쓸데없는 의존성, 기타 "이상 현상"을 찾아봐.
  3. 성능도 잊지 마. 정규화는 데이터의 깔끔함과 처리 속도 사이의 밸런스야.

이제 데이터베이스에서 문제를 찾고 해결할 수 있으니까, 어떤 크기의 DB라도 제대로 "감사"할 수 있을 거야. 기억해: 좋은 데이터베이스는 기능만 좋은 게 아니라, 예쁘고(정규화된) 설계도 중요하다는 거!

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION