본문 바로가기
Infra & Security Eng/Database Engineering

인사기록카드 비정규화 - 정규화 과정 실습 (1단계까지 완료)

by 엔지니어 E 2026. 3. 25.
반응형

 

비정규화 상태(데이터 정규화 이전)

비정규화(정규화 이전 단계)
1. 인사기록카드에 있는 모든 데이터들을 상자 안에 다 적는다 


알아야할 사항
1. 상자에 내용을 적을 때 인사기록카드에 적힌 내용 그대로(왼쪽->오른쪽 순서) 내용을 적어야 한다 
* 데이터를 적을 때 반드시 내용 그대로 적는다 

 

 

2. 정규화 1단계(반복되는 그룹을 분리함)
1. 인사기록카드를 보면 한 명의 사원에 대해 여러 줄(보증인, 면허자격, 가족, 학력, 경력, 교육훈련, 상벌)로 입력 되는 중복 그룹이 있다. 이를 별도의 엔티티로 분리한다 
* 여기서 중복이란 한 사람의 데이터 안에 똑같은 성격의 칸이 여러 줄 있는 것을 말한다

2. 공통 데이터를 가지고 있는 학력, 경력, 교육, 상벌 상자를 하나의 상자만 두고 구분으로 묶는다

3. 기호(Notation) 확인
1. 부모 쪽 (인사기록카드): 모두 강제선(|) 표시. (부모가 없으면 데이터 성립 안 됨)
2. 자식 쪽 (나머지): 모두 까마귀발 + O 표시. (데이터가 여러 개이거나 없을 수도 있음)
단, [학력]은 최소 하나는 있어야 하므로 O 없이 까마귀발만 있어도 무방함
알아야할 사항
1. 상자 제목을 [인사기록카드]라고 쓰는 이유
데이터베이스에서 상자 이름(Entity Name)은 그 안에 담긴 데이터 전체를 대표하는 이름이어야 한다

1) 데이터의 정의: 이 테이블에 들어가는 모든 정보(성명, 본적, 병역 등)는 결국 '한 사람의 인사 기록'을 구성하는 요소들이다
2) 식별의 용이성: 나중에 수십 개의 상자가 생겼을 때, 제목이 명확해야 개발자가 "아, 여기엔 인사 정보가 들어있구나"라고 바로 찾아낼 수 있다

2. 인사기록카드번호가 자식 상자에서 FK인 이유
1) 데이터의 출처: 자식 상자(보증인, 가족 등)에 적힌 정보가 **'누구의 것'**인지 알려주는 연결고리가 필요하다
2) 상속의 법칙: 부모 상자의 핵심 열쇠(PK)를 자식 상자가 그대로 물려받아 사용하기 때문에, 자식 입장에서는 외부에서 온 열쇠라는 뜻의 **외래키(FK, Foreign Key)**가 된다

* 순번을 함께 사용하는 이유 
1) 데이터 중복 차단: 한 명의 사원(번호 101번)에게 가족이 3명일 때, 카드번호만 쓰면 '101'이라는 번호가 3번 겹쳐서 에러가 난다
2) 유일성 확보: 이때 순번(1, 2, 3)을 추가하여 **[101-1], [101-2], [101-3]**이라는 세상에 하나뿐인 번호 조합을 만들어 데이터를 구분한다

* 순번이 반드시 인사기록카드번호 밑으로 가야 하는 이유
데이터에는 계급과 순서가 있기 때문임

1) 소속이 먼저: "누구의 데이터인가(카드번호)"가 결정되어야, 그 안에서 "몇 번째 데이터인가(순번)"를 따질 수 있다
2) 논리적 위계: 부모로부터 물려받은 번호가 뿌리라면, 순번은 그 뿌리에서 뻗어 나온 가지입니다. 뿌리가 있어야 가지가 존재할 수 있으므로, 설계 시 반드시 번호가 위, 순번이 그 아래에 위치해야 한다
3) 결합키(Composite Key)의 원칙: 두 번호를 합쳐서 하나의 열쇠를 만들 때, 큰 단위(사원번호)를 앞에 두고 작은 단위(순번)를 뒤에 두는 것이 데이터 관리의 정석이다
수정 사항 
1. 년월일 -> 일시
2. 각 상자들(학력, 경력, 교육훈련, 상벌) 들을 학력 하나의 상자로 임시 묶어두었다