'면접을 위한 CS 전공지식 노트' 책을 보며 공부한 내용입니다.
ERD(Entity Relationship Diagram)은 DB를 구축할 때 가장 기초적인 뼈대 역할을 하며 릴레이션 간의 관계들을 정의한 것이다. 서비스를 구축할 때 가장 먼저 신경써야할 부분이다.
ERD의 중요성
ERD는 시스템의 요구사항을 기반으로 작성되며 이 ERDㄹ르 기반으로 DB를 구축한다.
DB를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에도 설계도 역할을 담당한다.
하지만, ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는데 유용할 수 있지만, 비정형 데이터를 충분히 표현하지 못한다.
(비정형 데이터: 비구조화 데이터. 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보)
정규화 과정
정규화 과정은 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러개로 분리하는 과정이다.
데이터베이스 이상 현상이란, 회원이 한개의 등급을 가져야하는데 세개의 등급을 갖거나 삭제할 때 필요한 데이터가 삭제되고, 데이터를 삽입해야 하는데 하나의 필드값이 NULL이 되면 안되어서 삽입하기 어려운 현상을 말한다.
갱신 이상: 갱신이 발생하면 반복적으로 나오는 모든 값을 동시에 갱신하야야 하는 현상이다.
삭제 이상: 예를 들어, 과목 삭제로 인하여 과목 튜플이 삭제되는 경우, CS 학과가 개설하는 마지막 과목이 삭제가 되면, 해당 과목정보가 삭제되는 것 외에도 학과 정보가 함께 삭제가 되는 현상이다. 학과 정보는 데이터베이스에 존재하여야 하는데 학과 정보가 함께 데이터베이스에 영원히 삭제되는 것이 문제이다.
입력 이상: 새로운 학과가 창설되어 학과에 대한 정보를 데이터베이스에 입력하고자 하여도 그 학과가 개설하는 과목이 없으면 학과 정보를 입력할 수 없는 현상이다.
정규화 과정은 정규화 원칙을 기반으로 정규형을 만들어가는 과정이며, 정규화된 정도는 정규형(NF, Normal Form)으로 표현한다.
- 정규형 원칙
- 같은 의미를 표현하는 릴레이션 이지만, 좀 더 좋은 구조로 만들어야 하고, 자료의 중복성은 감소해야 하고, 독립적인 관계는 별개의 릴레이션으로 표현해야 하며, 각각의 릴레이션은 독립적인 표현이 가능해야 하는 것이다.
- 제1정규형
- 릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자값만으로 구성되어야 한다.
- 릴레이션의 속성 값 중에서 한 개의 기본 키에 대해 두개 이상의 값을 가지는 반복 집합이 있어서는 안된다.
- 속성 값에 { ..., ...}이 있어서는 안된다.
- 제2정규형
- 릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태이다.
- 모든 비주요 속성이 모든 후보키에 완전 의존적이어야 한다.
- 예시
- R(SSN, pNumber, hours, eName, pName, pLocation)
- SSN pNumber -> hours
- SSN -> eName
- pNumber -> pLocation
- R은 제2정규형이 아님 => 정규화
- R1(SSN, pNumber, hours)
- R2(SSN, eName)
- R3(pNumber, pName, pLocation)
- => 모두 제2정규형 만족
- R(SSN, pNumber, hours, eName, pName, pLocation)
- 제3정규형
- 제2정규형이고, 기본키가 아닌 모든 속성이 이행적 함수 종속(transition FD)을 만족하지 않는 상태
- 제2정규형 중에서 비주요속성이 모든 후보키에 이행적으로 의존적이 아니면 제3정규형이다.
- 또 다른 의미로, 모든 의미있는 함수 종속성 " α -> β"에서 α가 슈퍼키이거나 β가 주요 속성이어야 한다.
- 예시1
- myEmpDept(SSN, Ename, Bdate, Addr, D#, Dname, Dmgr)
- SSN -> Ename Bdate Addr D#
- D# -> Dname Dmgr
- 이 함수 종속성이 이행적으로 의존적이다.
- =>
- ED1(SSN, Ename, Addr, D#)
- ED2(D#, Dname, Dmgr)
- myEmpDept(SSN, Ename, Bdate, Addr, D#, Dname, Dmgr)
- 예시2
- SECOND(S#, Status, City)
- SP(S#, P#, Qty)
- S# -> Status, City
- City -> Status
- 이 함수 종속성이 이행적으로 의존적이다.
- =>
- SC(S#, City)
- CS(City, Status)
- 보이스/코드 정규형 (BCNF)
- 제3정규형이고 결정자가 주 속성이 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모두 주속성이 후보키인 상태이다.
- 모든 의미있는 함수 종속성 " α -> β"에서 α가 슈퍼키이면 BCNF이다.
- 속성이 두개인 테이블은 모두 BCNF이다.
- 예시
- MovieStudio(title, year, length, filmType, studioName, studioAddr)
- title year -> length, filmType, studioName
- studioName -> studioAddr
- => 제2정규형이며 후보키는 title과 year
- 함수 종속성에 따라 두개의 테이블로 나누면 BCNF를 만족한다.
- MovieStudio(title, year, length, filmType, studioName, studioAddr)
728x90
'CS' 카테고리의 다른 글
4.4 데이터베이스의 종류 (2) | 2024.09.26 |
---|---|
4.3 트랜잭션과 무결성 (0) | 2024.09.24 |
4.1 데이터베이스의 기본 (1) | 2024.09.20 |
3.4 CPU 스케줄링 알고리즘 (1) | 2024.09.19 |
3.3 프로세스와 쓰레드 (1) | 2024.09.17 |