반응형
데이터 모델링 정의
| 1. 체계적 표현: 회사가 가진 수많은 정보를 **개체(물건/사람)**와 **관계(연결)**를 중심으로 이름 붙이고 문서로 만드는 작업 2. 데이터 관점 분석: 프로그램을 만들 때 화면이나 기능보다, 그 안에 담길 **'데이터'**가 무엇인지부터 먼저 따져보는 분석 방법 |
데이터 모델링 구성요소 4가지
| 4가지 핵심 요소는 정보를 정리하는 틀이라고 볼 수 있다 1. 개체(=테이블)(Entity): 관리해야할 대상 그 자체 ex) 학생, 교수, 과목 2. 관계(=FK) (=Relationship): 개체와 개체 사이의 연관성 ex) 학생이 과목을 '수강'한다, 교수가 과목을 '가르친다' 3. 속성(Attribute)(=컬럼): 개체가 가지고 있는 세부 정보 ex) 학생의 "이름", "주소", "전화번호" 4. 식별자(=PK): 수많은 데이터 중 하나를 확실히 구분해주는 기준 ex) 이름은 중복될 수 있으므로, 겹치지 않는 "학번" 이나 "군번"을 사용함 |



정규화 정의
| 데이터 모델링 과정에서 데이터의 중복을 제거하고, 무결성을 확보하기 위해 데이터를 구조화하는 과정 |
정규화의 함수적 종속(A→B)
| 어떤 값 A를 알면, 그에 딸린 값 B가 무엇인지 무조건 하나로 정해지는 상태를 말함 용어 정리 A(결정인자): 화살표의 출발점. B를 결정짓는 기준값 B(종속인자): 화살표의 도착점. A에 의해 정해지는 값 규칙 설명 1. A → (B,C): A를 알면 B도 알고 C도 알 수 있다. (A 하나가 B, C를 모두 결정함) 2. (A,B) → C: A와 B가 동시에 있어야만 C를 알 수 있음 (A 혼자서는 C를 결정 못 함) 3. A → B, B→C, A→C: A가 B를 정하고, 그 B가 다시 C를 정한다면, 결과적으로 A를 알 때 C도 알 수 있게 됨 규칙 예시 1. 제품번호 → 제품명: 제품번호가 결정되면 제품명은 자동으로 하나로 정해짐 2. 학번 → (이름, 학과, 주소, 전화번호): 학번 하나로 여러 속성을 동시에 결정 가능 3. (학번, 과목번호) → 점수: 학번만으로는 점수를 알 수 없고, 과목번호까지 두 개가 합쳐져야 점수 결정 가능 * 방향성: 결정인자가 종속자를 결정하는 것이지, 그 반대(오른쪽에서 왼쪽)는 성립하지 않는 경우가 많음 |
정규화 단계별 과정
| 1차 정규화: 반복 그룹 속성 추출 수행: 한 칸에 여러 값이 들어가는 '반복 그룹'을 떼어내어 별도의 자식 개체로 만든다 관계: 부모와 자식은 식별 관계가 된다 식별자: 부모의 주식별자를 그대로 가지고 나가며, 자식 개체의 주식별자에는 구분할 수 있는 속성이 추가된다 ![]() ![]() * 1차 정규화 시 중복되는 내용(제품번호,제품명,...) 을 밖으로 빼낸다 (제목은 원래 제목(주문장)을 그대로 따라 간다) 주문장세 내역에서는 반드시 주 식별자를 가지고 나가야 한다(주문 번호) 그런데 주문 번호만 적는다면 제품은 한번밖에 주문을 못하게 된다(한 주문장에 하나의 칸만 있는 것으로 됨) 그래서 아래 있던 제품 번호를 (1번째 사진) 위로 올리게 된다 (3번째 사진) - 자식 개체 주 식별자에 속성(제품 번호) 이 추가 되는 것임 ** 주문 번호는 반드시 맨 위에 있어야 한다 2차 정규화: 부분 함수 종속 제거 수행: 주식별자가 여러 속성으로 구성되었을 때, 그중 일부에만 종속되는 속성을 떼어내어 부모 개체로 만듦 관계: 자식 개체의 주식별자에 외부 식별자(FK)를 두는 식별 관계임 상태: 주식별자 전체에 의존하는 '완전 기능 종속' 상태로 만듦 * 나간 개체가 자식 개체임 3차 정규화: 이행 종속 속성 추출 수행: 주식별자가 아닌 일반 속성들끼리 결정 관계가 있는 경우(A $\rightarrow$ B $\rightarrow$ C)를 분리하여 부모 개체로 만듦 * 주 식별자에서 함수적 종속관계가 없는 것을 찾으면 됨 (주문장에서 주문번호와 상관 없는 것 → 고객명, 고객주소, 수출상태, 사업자번호 이 고객번호와 함수적 종속 관계가 있음 관계: 일반 속성에 외부 식별자(FK)를 두는 비식별 관계임 결과: 주식별자에만 직접 종속되도록 구조를 정제함 |
| 요약 및 핵심 1차: 반복되는 속성을 자식으로 분리 (식별 관계) 2차: 식별자 일부에만 걸린 속성을 부모로 분리 (식별 관계) 3차: 일반 속성 간의 결정 관계를 부모로 분리 (비식별 관계) |
정규화 프로세스 예시
| 1단계: 제1정규화 (반복되는 항목 분리) 표(제품번호, 제품명, 주문수량 등)**는 한 건의 주문에 여러 줄이 생길 수 있는 반복 그룹이다 문제: 주문번호 하나에 제품이 10개면, 주문번호와 고객정보가 10번 중복 기록됨 해결: 상단 정보(주문/고객)와 중간 표 정보(제품 상세)를 별도의 표로 쪼갠다 결과: * 부모 개체: 주문번호, 주문일자, 고객번호, 고객명, 고객주소 등 자식 개체: 주문번호 + 제품번호, 제품명, 주문수량, 주문단가, 주문금액 2단계: 제2정규화 (부분 함수 종속 제거) 1단계에서 만든 '자식 개체'에서 식별자 전체가 아닌 일부에만 연결된 정보를 분리함 문제: 자식 개체의 식별자는 **(주문번호, 제품번호)**입니다. 그런데 '제품명'과 '주문단가'는 제품번호만 알면 결정되는 값이지, 주문번호와는 상관이 없음 해결: 제품번호에만 종속된 값을 별도의 제품 표로 분리함 결과: * 주문 상세 표: 주문번호, 제품번호, 주문수량, 주문금액 (수량과 금액은 주문에 따라 변하므로 유지) * 제품 표: 제품번호, 제품명, 주문단가 3단계: 제3정규화 (일반 속성 간의 종속 제거) 식별자가 아닌 일반 정보끼리 서로 결정하는 관계(이행 종속)를 분리함 * 이행 종속: 주 식별자의 함수적 종속 관계가 없는 경우 문제: 1단계에서 만든 '부모 개체'를 보면, 식별자는 '주문번호'임 하지만 고객번호를 알면 고객명과 고객주소가 결정됨. 즉, 일반 속성이 일반 속성을 결정하고 있음 해결: 고객 정보를 별도의 고객 표로 분리함 결과: * 주문 표: 주문번호, 주문일자, 고객번호 (외래키로 연결) * 고객 표: 고객번호, 고객명, 고객주소 최종 정리된 구조 정규화가 끝나면 하나의 주문서는 다음과 같이 4개의 깨끗한 표로 정리됨 1. 고객 표: 고객번호, 고객명, 고객주소 2. 제품 표: 제품번호, 제품명, 주문단가 3. 주문 표: 주문번호, 주문일자, 고객번호 4. 주문 상세 표: 주문번호, 제품번호, 주문수량, 주문금액 메커니즘의 핵심 중복된 데이터를 발생시키는 원인(반복 그룹, 부분 종속, 이행 종속)을 찾아내어 별도의 표로 떼어내는 것이 정규화의 프로세스임 |

* 서류 하나(ex. 영수증) 당 테이블을 하나 만들면된다고 생각하면 됨
'Infra & Security Eng > Database Engineering' 카테고리의 다른 글
| PK와 FK 개념, PK, FK 설정 원리, 테이블 분리와 부모-자식 관계 (1:N), 까마귀 발(Crow's Foot) 기호의 해석 (0) | 2026.03.24 |
|---|---|
| PHP-Oracle 연동을 통한 데이터 관리 시스템 구축 및 입출력 프로세스 분석 (0) | 2026.03.23 |
| PHP와 Oracle DB 연동의 모든 것: 웹 서버부터 DB 엔진까지의 메커니즘 총 정리 - 수정 중 (0) | 2026.03.20 |
| [PHP] Oracle DB 연동 및 테이블별 데이터 출력 실습 (st_vi, pr_vi 등) (0) | 2026.03.20 |
| [PHP] Oracle 19c 데이터베이스 연동: oci_connect 상세 주소와 별칭으로 접속하기 (0) | 2026.03.20 |

