개념적 모델링 단계 -> 논리적 모델링 단계 -> 물리적 모델링 단계
개념적 모델링은 전체적인 비전을 구축하는 단계. Entity 를 도출하고 ERD를 작성하는 단계이다.
논리적 모델링은 ERD 를 사용할 특정 DBMS 의 논리적 자료구조에 맞게 매핑
(Mapping) 하는 과정이다. 예를들어 RDBMS 를 사용한다고 하면, ERD를 RDB로 매핑한다. 테이블 설계와 정규화도 여기서 이루어진다.
물리적 모델링은 사전적으로 작성된 논리적 데이터 모델을 관계형 데이터베이스의 물리적인 구조(Schema)를 작성해가는 과정. 데이터의 저장공간, 데이터의 분산, 데이터 저장 방법 등을 함께 고려하는 단계
✨ E-R Diagram이라 불리는 ERD는 관계형 데이터베이스의 엔터티, 속성 및 관계를 시각적으로 나타내기 위해 DB 설계단계중 개념적 모델링에서 사용되는 표기 방법이다.
✨ 데이터베이스 설계의 핵심
데이터베이스 설계 단계에서 맨 처음 단계인 개념적 모델링 단계에서 주로 사용
데이터베이스 구조를 한눈에 알아보기 위해 사용 됨
쿼리문을 작성할 때 테이블들이 구조화된 다이어그램을 보면서 도움을 받을 수 있다.
데이터의 다양한 특징을 확인할 수 있어 요구사항을 파악하기 쉬움
현재 가장 인기있는 관계형 데이터베이스의 테이블 구조로 매핑 하기에도 쉬워 인기가 많은 방식
응용 프로그램의 데이터 요구 사항을 모델링하는 데 사용되며 데이터베이스 설계의 핵심 구성 요소입니다.
✨ ERD의 구성 요소
✨ 각각의 구성요소 예
Entity
✓ 학교용 데이터베이스를 설계하는 경우 학생, 교사, 과정 및 교실과 같은 엔터티가 있을 수 있습니다
Attribute
✓ 학생 엔터티의 속성에는 이름, 나이 및 ID 번호가 포함될 수 있습니다.
Relationship
✓ 한 학생이 여러 과정에 등록되어 있을수 있습니다. 이때 학생 테이블과 과정 테이블이 맺는 것이 관계
📌 ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는데는 유용하지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 있다.
비정형 데이터 : 비구조화 데이터. 미리 정의된 데이터 모델, 또는 스키마를 따르지 않고 행과 열로 쉽게 구성할 수 없는 데이터.
첸 표기법 (Chen Notation):
✓ 실무에서는 잘 사용되지 않는 방식.
✓ 엔티티는 직사각형, 속성은 타원형, 관계는 마름모 형태로 표현됩니다. 이 표기법은 E-R 다이어그램의 기본 구성 요소를 간결하고 명확하게 표현할 수 있습니다.
개체 : 고객, 주문서
고객의 속성 : 고객 번호, 성명, 주소
주문서의 속성 : 주문번호, 품명, 수량, 금액
밑줄 친 주문번호와 고객 번호는 기본 키
관계 : 고객과 주문서의 주문 관계는 1:N 관계.
즉 한 사람의 고객이 다수의 주문을 할 수 있고
주문서 1개는 특정인의 주문서로 되어 있다.
까마귀발 표기법 (Crow's Foot Notation)
✓ 이 표기법은 관계의 다중성을 나타내는 데 초점을 맞춤
✓ 엔티티는 직사각형, 속성은 엔티티 내에 표시되며, 관계는 선으로 표시되고 관계(1:1, 1:N, M:N)를 나타내는 '까마귀 발' 기호로 끝납니다.
✓ IE표기법, 바커 표기법 등 다양한 형태로 변형이 존재.
정보 공학 표기법(Information Engineering Notation)
Entity의 이름을 상단에 표기.
Entity 이름 하단에 그림과 같이 좌측에는 PK, FK 등의 정보 표기, 우측에는 속성의 이름을 표기한다. 속성의 옆에 보통 ()를 열고 데이터 타입을 표기 할 수도있다.
각 Entity 간의 관계는 기본적으로 실선과 점선으로 표현
실선은 식별 관계를 나타낸다. 식별관계는 부모 Entity의 PK 또는 유니크키를 자식 Entity의 PK로 사용하는 관계이다. 즉, 자식 Entity 는 부모 Entity 가 존재해야 존재할 수 있다.
점선은 비식별 관계를 나타낸다. 비식별 관계란 부모 Entity의 PK 또는 유니크키를 자식 Entity 에서 외래키로 사용하는 관계이다. 즉, 자식 Entity 는 부모의 존재유무와 관계 없이 독립적으로 존재할 수 있다.
관계 표현
학급과 학생은 비식별 관계로 학생(자식 Entity)이 학급(부모 Entity)의 존재 유무와 관계 없이 독립적으로 존재 가능. - 점선 표시
이때 학급 한개에 학생은 여려명이 있는 1:N의 관계가 되어 까마귀 발로 관계를 표시.
#
를 표시*
를 표시o
를 표시Table Name: 고객 (Customer)
customer_id | customer_name | customer_age | customer_phone |
---|---|---|---|
1 | Kim | 30 | 010-1234-5678 |
2 | Lee | 25 | 010-9876-5432 |
3 | Park | 40 | 010-2468-1357 |
Table Name: 주문 (Order)
order_id | customer_id | order_date |
---|---|---|
100 | 1 | 2023-04-15 |
101 | 2 | 2023-04-22 |
102 | 3 | 2023-04-28 |
Table Name: 발송물 (Shipment)
shipment_id | order_id | shipment_date |
---|---|---|
500 | 100 | 2023-04-16 |
501 | 101 | 2023-04-24 |
502 | 102 | 2023-04-30 |
위의 관계를 생각해서 E-R 다이어그램을 만들어 본다.
✨ relation간의 잘못된 종속 관계로 이상현상이 있는 relation을 분해하여 이상현상을 없애는 과정
✨ 저장 공간의 효율적 사용을 위해 릴레이션을 여러 개로 분리하는 과정.
데이터베이스 이상 현상의 예
1.회원이 한개의 등급을 가져야 하는데 세 개의 등급을 갖는다거나,
2.삭제할때 필요한 데이터가 같이 삭제되고,
3.데이터를 삽입해야 하는데 하나의 필드 값이 NULL이 되면 안되서 삽입하기 어려운 상황
같은 의미를 표현하는 relation이지만 더 좋은 구조로 만들어야 하고, 자료의 중복성은 감소해야 되며, 독립적인 관계는 별개의 relation으로 표현해야 하며, 각각의 relation은 독립적인 표현이 가능해야 한다.
정규화(Normalization)는 데이터베이스 설계에서 중복을 최소화하고 데이터 무결성을 보장하기 위해 데이터를 구조화하는 프로세스
✨ 예시 데이터:
유저 번호 | 유저 id | 수강명 | 성취도 |
---|---|---|---|
1 | 홍철 | {c++코딩 테스트, 프런트특강} | {90%, 10%} |
2 | 범석 | {코드포스특강, DS특강} | {7%, 8%} |
✨ 정규화 과정의 순서
제1정규형
relation의 모든 Domain이 더 이상 분해될 수 없는 원자적(Atomic)인 값만을 갖도록 구성.
한개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안된다.
ex)예시 데이터의 제1정규형 과정
"수강명", "성취도" 열은 여러 값을 포함. 값을 나누어 원자적인 값만 남도록 구성.
유저 번호 | 유저 id | 수강명 | 성취도 |
---|---|---|---|
1 | 홍철 | c++코딩 테스트 | 90% |
1 | 홍철 | 프런트특강 | 10% |
2 | 범석 | 코드포스특강 | 7% |
2 | 범석 | DS특강 | 8% |
이제, 각 행에는 하나의 값만 있으므로, 이 테이블은 1차 정규형을 만족합니다.
제2정규형
테이블의 모든 컬럼이 기본 키(Primary Key)에 대해 완전 함수 종속 관계(Fully Functional Dependency)를 갖도록 테이블을 분해합니다.
테이블의 모든 컬럼이 기본 키에 의해 유일하게 식별되어야 합니다.
-ex)예시 제2정규형 과정
수강별 성취도 테이블: 기본 키 [유저 ID, 수강명]
유저 ID | 수강명 | 성취도 |
---|---|---|
홍철 | c++코딩 테스트 | 90% |
홍철 | 프런트특강 | 10% |
범석 | 코드포스특강 | 7% |
범석 | DS특강 | 8% |
유저 정보 테이블: 기본 키 [유저 번호]
유저 번호 | 유저 ID |
---|---|
1 | 홍철 |
2 | 범석 |
이렇게 분리하면, 각 테이블은 각각의 기본 키를 가지고 있으며, 수강별 성취도 테이블의 유저 ID는 유저 정보 테이블의 유저 ID에 종속되므로 2차 정규화를 만족합니다.
3차 정규화
이행적 함수 종속 관계 : A → B 와 B → C가 존재한다면 논리적으로 A→C가 성립. 이때 집합 C가 집합 A에 이행적으로 함수 종속이 되었다고 합니다.
위의 제2정규화 과정을 거친 예제는 비기본 키 속성이 성취도뿐이며, 수강별 성취도 테이블에서 이 속성은 [유저 ID, 수강명]에 종속되어 있습니다. 따라서, 이 테이블은 3차 정규화를 만족합니다.
보이스/코드 정규형
결정자
함수 종속 관계에서 특정 종속자(dependent)를 결정짓는 요소. 'X' -> 'Y'일때 결정자는 X, Y는 종속자이다.
[학번, 수강명]이 후보키에 속하고, 강사 속성은 결정자이다. 하지만 이때 강사는 후보키가 아니다. 그러므로 강사 속성을 분리 해야된다.
개발자 | 자격증 | 언어 |
---|---|---|
홍길동 | 정보처리기사 | C |
임꺽정 | 빅데이터 분석 기사 | JAVA |
장길산 | 정보처리기사 | C# |
개발자 | 자격증 |
---|---|
홍길동 | 정보처리기사 |
임꺽정 | 빅데이터 분석 기사 |
장길산 | 정보처리기사 |
개발자 | 언어 |
---|---|
홍길동 | C |
임꺽정 | JAVA |
장길산 | C# |