DB 05 - 데이터베이스 설계
01. ER 다이어그램
ER 다이어그램(ERD) : 데이터베이스를 구성하는 요소들의 관계를 나타내는 그림
목적 : 데이터베이스의 저장되는 엔티티의 구조를 모델링하는 것(즉, 시각적으로 설계하는 것)
효과 : 추후에 데이터베이스를 확장하거나 수정할 때, 어떤 부분이 영향을 받는지 쉽게 파악할 수 있어, 유지보수가 용이하고 원활한 소통이 가능하다.
ERD 표기 방식 1 - 피터 첸 표기법
이런 표기방식은 개념적으로 엔티티를 모델링하는 데에 매우 유용하다.
하지만 엔티티가 많아질 경우 그림이 다소 복잡해지고 RDBMS 상에서 어떻게 테이블의 형태로 표현되는지 한 눈에 파악하기 어렵다.
따라서, 요즘에는 IE 표기법(새 발 표기법, 까마귀 발 표기법)이라고 하는 ERD 표기 방식을 사용한다.
ERD 표기 방식 2 - IE(Information Engineering) 표기법
그림에서 처럼 그림의 사각형 하나가 테이블 하나를 나타낸다.
상단 사각형에 테이블의 이름을 쓰고, 내부에는 속성(필드)를 쓰는 방식이다.
이 테이블 간의 관계를 나타내는 표기는 ERD에서 매우 중요한 개념이다.
참고 - 식별/비식별 관계
식별관계 : 참조되는 엔티티가 존재해야만 엔티티가 존재할 수 있는 관계
비식별관계 : 참조되는 엔티티가 존재하지 않아도 존재할 수 있는 관계
위 그림에서 동그라미가 붙은 관계의 경우가 식별 관계이다.
ERD를 그리기 위한 도구(무료)및 특징
-
- 온라인 사용
- 쉬운 사용성 및 공유
-
- 다이어그램을 저장할 위치 지정
- 여러 언어로 사용 가능
- Jira 및 Confluence와의 통합
-
- 온라인 사용
- 광범위한 도형 라이브러리
- 공유 링크를 통한 프로젝트 공유
02. 정규화
정규화(Normalization) : 테이블간의 중복된 데이터를 허용하지 않음으로써 무결성을 개선하기 위해 데이터를 정규형에 맞도록 구조화하는 프로세스
1. 제 1 정규형 (1NF)
- 모든 속성이 원자 값을 가진다.
- 즉, 필드 데이터가 더 이상 쪼개질 수 없는 값을 가져야 한다는 것이다.
Example
정규화되지 않은 테이블
방법 1 - 하나의 테이블로 중복을 감수하고 설계
방법 2 - 테이블을 쪼개는 것
2. 제 2 정규형 (2NF)
- 제 1 정규형을 만족함과 동시에,
- 기본 키가 아닌 모든 필드들이 모든 기본 키에 완전히 종속될 것
참고
부분 함수 종속성 : 기본 키가 아닌 필드가 기본 키의 일부에 종속된 경우
완전 함수 종속성 : 기본 키 전체에 완전하게 종속되어 있는 경우
제 2정규형은 부분 함수 종속성이 없는 완전 함수 종속성을 만족하는 상태라고 할 수 있다.
Example
정규화되지 않은 테이블
제2 정규화를 마친 테이블
3. 제 3 정규형 (3NF)
- 제 2 정규형을 만족함과 동시에,
- 기본 키가 아닌 모든 필드가 기본 키에 이행적 종속성이 없는 상태
이행 함수 종속성 : 속성 X, Y, Z 가 있을 때, X가 Y 를 결정하고, Y는 Z를 결정하는 경우 이행함수 종속성이 있다고 말한다.
- 예를 들어, X(학생 ID), Y(학과 ID), Z(학과 이름) 과 같은 경우를 예시로 들 수 있다.
Example
정규화되지 않은 테이블
제2 정규화를 마친 테이블
4. 보이스/코드 정규형(BNCF)
- 제 3정규형을 만족하는 동시에,
- 모든 결정자가 후보 키여야 한다는 조건
결정자 : 특정 필드를 식별할 수 있는 필드
- 위의 테이블은 제3정규형을 만족하는 테이블이다.
- 하지만, BNCF는 만족하지 않는다.
- '담당 교수'는 '과목 코드'의 결정자 역할을 하기 때문이다.
- 따라서, '학번과 과목코드'를 하나의 테이블로, '과목 코드와 담당교수'를 다른 하나의 테이블로 분리해야 한다.
정리
전체 정규화 과정
역정규화
정규화를 거듭반복하다보면 테이블이 쪼개지면서 너무 많아질 수 있고,
이 때문에, 조인연산이 빈번해지고, 성능적인 비용이 늘어날 수 있다.
따라서, 어느 정도의 데이터 중복 및 연산의 번거로움을 감수하더라도 ㅔ이블을 합쳐서 관리하는 경우가 있다.
'내가 만드는 개발자 교안 > Computer Science' 카테고리의 다른 글
Every CS - Network 01 - 네트워크 개요 (0) | 2024.12.20 |
---|---|
Every CS - 데이터베이스 06 - NoSQL (1) | 2024.12.18 |
Every CS - 데이터베이스 04 - SQL 심화 (1) | 2024.11.06 |
Every CS - 데이터베이스 03 - SQL (2) | 2024.10.31 |