ERD

데이터 모델링

개념적 모델링 단계 -> 논리적 모델링 단계 -> 물리적 모델링 단계

  1. 개념적 모델링은 전체적인 비전을 구축하는 단계. Entity 를 도출하고 ERD를 작성하는 단계이다.

  2. 논리적 모델링은 ERD 를 사용할 특정 DBMS 의 논리적 자료구조에 맞게 매핑
    (Mapping) 하는 과정이다. 예를들어 RDBMS 를 사용한다고 하면, ERD를 RDB로 매핑한다. 테이블 설계와 정규화도 여기서 이루어진다.

  3. 물리적 모델링은 사전적으로 작성된 논리적 데이터 모델을 관계형 데이터베이스의 물리적인 구조(Schema)를 작성해가는 과정. 데이터의 저장공간, 데이터의 분산, 데이터 저장 방법 등을 함께 고려하는 단계

E-R Diagram란 무엇인가?

✨ E-R Diagram이라 불리는 ERD는 관계형 데이터베이스의 엔터티, 속성 및 관계를 시각적으로 나타내기 위해 DB 설계단계중 개념적 모델링에서 사용되는 표기 방법이다.

✨ 데이터베이스 설계의 핵심

  • 데이터베이스 설계 단계에서 맨 처음 단계인 개념적 모델링 단계에서 주로 사용

  • 데이터베이스 구조를 한눈에 알아보기 위해 사용 됨

  • 쿼리문을 작성할 때 테이블들이 구조화된 다이어그램을 보면서 도움을 받을 수 있다.

  • 데이터의 다양한 특징을 확인할 수 있어 요구사항을 파악하기 쉬움

  • 현재 가장 인기있는 관계형 데이터베이스의 테이블 구조로 매핑 하기에도 쉬워 인기가 많은 방식

  • 응용 프로그램의 데이터 요구 사항을 모델링하는 데 사용되며 데이터베이스 설계의 핵심 구성 요소입니다.

✨ ERD의 구성 요소

  • Entity(엔티티), Attribute(속성), Relationship(관계) 세 가지 주요 구성 요소로 이루어 집니다
    Entity : 설계 중인 시스템과 관련된 실제 객체 또는 개념을 나타냅니다. 쉽게는 데이터베이스의 테이블이라 볼 수 있다.
    Attribute : 각 엔터티에 특정한 세부 정보를 설명.
    Relationship : Entity간의 관계를 의미한다. 두 Entity간에 선을 긋고, 관계 명칭을 기록하게 된다.

✨ 각각의 구성요소 예

  • Entity
    ✓ 학교용 데이터베이스를 설계하는 경우 학생, 교사, 과정 및 교실과 같은 엔터티가 있을 수 있습니다

  • Attribute
    ✓ 학생 엔터티의 속성에는 이름, 나이 및 ID 번호가 포함될 수 있습니다.

  • Relationship
    ✓ 한 학생이 여러 과정에 등록되어 있을수 있습니다. 이때 학생 테이블과 과정 테이블이 맺는 것이 관계

📌 ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는데는 유용하지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 있다.

비정형 데이터 : 비구조화 데이터. 미리 정의된 데이터 모델, 또는 스키마를 따르지 않고 행과 열로 쉽게 구성할 수 없는 데이터.

ERD의 표기법

  1. 첸 표기법 (Chen Notation):
    ✓ 실무에서는 잘 사용되지 않는 방식.
    ✓ 엔티티는 직사각형, 속성은 타원형, 관계는 마름모 형태로 표현됩니다. 이 표기법은 E-R 다이어그램의 기본 구성 요소를 간결하고 명확하게 표현할 수 있습니다.

개체 : 고객, 주문서

고객의 속성 : 고객 번호, 성명, 주소

주문서의 속성 : 주문번호, 품명, 수량, 금액

밑줄 친 주문번호와 고객 번호는 기본 키

관계 : 고객과 주문서의 주문 관계는 1:N 관계.
      즉 한 사람의 고객이 다수의 주문을 할 수 있고 
      주문서 1개는 특정인의 주문서로 되어 있다.
  1. 까마귀발 표기법 (Crow's Foot Notation)
    ✓ 이 표기법은 관계의 다중성을 나타내는 데 초점을 맞춤
    ✓ 엔티티는 직사각형, 속성은 엔티티 내에 표시되며, 관계는 선으로 표시되고 관계(1:1, 1:N, M:N)를 나타내는 '까마귀 발' 기호로 끝납니다.
    ✓ IE표기법, 바커 표기법 등 다양한 형태로 변형이 존재.

  2. 정보 공학 표기법(Information Engineering Notation)

    Entity와 Attribute

  • Entity의 이름을 상단에 표기.

  • Entity 이름 하단에 그림과 같이 좌측에는 PK, FK 등의 정보 표기, 우측에는 속성의 이름을 표기한다. 속성의 옆에 보통 ()를 열고 데이터 타입을 표기 할 수도있다.

    relation

  • 각 Entity 간의 관계는 기본적으로 실선과 점선으로 표현

    실선은 식별 관계를 나타낸다. 식별관계는 부모 Entity의 PK 또는 유니크키를 자식 Entity의 PK로 사용하는 관계이다. 즉, 자식 Entity 는 부모 Entity 가 존재해야 존재할 수 있다.

    점선은 비식별 관계를 나타낸다. 비식별 관계란 부모 Entity의 PK 또는 유니크키를 자식 Entity 에서 외래키로 사용하는 관계이다. 즉, 자식 Entity 는 부모의 존재유무와 관계 없이 독립적으로 존재할 수 있다.

관계 표현

  • 학생과 학급 간의 관계를 ERD로 그려본 것.

학급과 학생은 비식별 관계로 학생(자식 Entity)이 학급(부모 Entity)의 존재 유무와 관계 없이 독립적으로 존재 가능. - 점선 표시
이때 학급 한개에 학생은 여려명이 있는 1:N의 관계가 되어 까마귀 발로 관계를 표시.

  1. 바커 표기법 (Barker Notation)
    • Entity는 네 부분의 모서리가 둥근 형태인 Soft-Box로 표현
    • Entity 이름은 Box 내부 상단에 표시
    • Attribute 중 필수로 값을 입력하며 식별자인 속성은 #를 표시
    • Attribute 중 필수로 값을 입력하여야 하는 속성은 * 를 표시
    • Attribute 중 선택적인 입력을 하여야 하는 속성은 o 를 표시

바커 표기법과 정보 공학법 표기법의 차이

  1. UML 표기법 (Unified Modeling Language Notation)
  • UML은 객체 지향 시스템의 모델링을 위한 표준화된 표기법입니다. 클래스 다이어그램을 사용하여 엔티티와 관계를 나타낸다.
  • 데이터베이스의 모델링을 위한 기법이 아니라 객체지향 모델링 표기법이였다가 데이터베이스까지 그 영향을 끼침.

E-R diagram 그려 보기

Table Name: 고객 (Customer)

customer_idcustomer_namecustomer_agecustomer_phone
1Kim30010-1234-5678
2Lee25010-9876-5432
3Park40010-2468-1357

Table Name: 주문 (Order)

order_idcustomer_idorder_date
10012023-04-15
10122023-04-22
10232023-04-28

Table Name: 발송물 (Shipment)

shipment_idorder_idshipment_date
5001002023-04-16
5011012023-04-24
5021022023-04-30

위의 관계를 생각해서 E-R 다이어그램을 만들어 본다.

정규화

정규화의 정의

✨ relation간의 잘못된 종속 관계로 이상현상이 있는 relation을 분해하여 이상현상을 없애는 과정
✨ 저장 공간의 효율적 사용을 위해 릴레이션을 여러 개로 분리하는 과정.

데이터베이스 이상 현상의 예
1.회원이 한개의 등급을 가져야 하는데 세 개의 등급을 갖는다거나,
2.삭제할때 필요한 데이터가 같이 삭제되고,
3.데이터를 삽입해야 하는데 하나의 필드 값이 NULL이 되면 안되서 삽입하기 어려운 상황

정규형 원칙

같은 의미를 표현하는 relation이지만 더 좋은 구조로 만들어야 하고, 자료의 중복성은 감소해야 되며, 독립적인 관계는 별개의 relation으로 표현해야 하며, 각각의 relation은 독립적인 표현이 가능해야 한다.

결론

정규화(Normalization)는 데이터베이스 설계에서 중복을 최소화하고 데이터 무결성을 보장하기 위해 데이터를 구조화하는 프로세스

정규화 과정

✨ 예시 데이터:

유저 번호유저 id수강명성취도
1홍철{c++코딩 테스트, 프런트특강}{90%, 10%}
2범석{코드포스특강, DS특강}{7%, 8%}

✨ 정규화 과정의 순서

  1. 제1정규형

    • relation의 모든 Domain이 더 이상 분해될 수 없는 원자적(Atomic)인 값만을 갖도록 구성.

    • 한개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안된다.

    • ex)예시 데이터의 제1정규형 과정

    • "수강명", "성취도" 열은 여러 값을 포함. 값을 나누어 원자적인 값만 남도록 구성.

      유저 번호유저 id수강명성취도
      1홍철c++코딩 테스트90%
      1홍철프런트특강10%
      2범석코드포스특강7%
      2범석DS특강8%

    이제, 각 행에는 하나의 값만 있으므로, 이 테이블은 1차 정규형을 만족합니다.

  2. 제2정규형

    • 테이블의 모든 컬럼이 기본 키(Primary Key)에 대해 완전 함수 종속 관계(Fully Functional Dependency)를 갖도록 테이블을 분해합니다.

    • 테이블의 모든 컬럼이 기본 키에 의해 유일하게 식별되어야 합니다.

      -ex)예시 제2정규형 과정
      수강별 성취도 테이블: 기본 키 [유저 ID, 수강명]

      유저 ID수강명성취도
      홍철c++코딩 테스트90%
      홍철프런트특강10%
      범석코드포스특강7%
      범석DS특강8%

      유저 정보 테이블: 기본 키 [유저 번호]

      유저 번호유저 ID
      1홍철
      2범석

    이렇게 분리하면, 각 테이블은 각각의 기본 키를 가지고 있으며, 수강별 성취도 테이블의 유저 ID는 유저 정보 테이블의 유저 ID에 종속되므로 2차 정규화를 만족합니다.

  1. 3차 정규화

    • 테이블 내에서 이행적 함수 종속 관계(Transitive Dependency)를 제거하기 위해 테이블을 분해합니다.
    • 즉, 테이블의 컬럼 중 다른 컬럼에 의해 결정되는 컬럼이 있으면 분리합니다.
      테이블의 모든 비기본 키 속성이 기본 키에 종속되거나, 다른 비기본 키 속성에만 종속되어 있어야 합니다.

      이행적 함수 종속 관계 : A → B 와 B → C가 존재한다면 논리적으로 A→C가 성립. 이때 집합 C가 집합 A에 이행적으로 함수 종속이 되었다고 합니다.

    위의 제2정규화 과정을 거친 예제는 비기본 키 속성이 성취도뿐이며, 수강별 성취도 테이블에서 이 속성은 [유저 ID, 수강명]에 종속되어 있습니다. 따라서, 이 테이블은 3차 정규화를 만족합니다.

  2. 보이스/코드 정규형

  • 릴레이션이 제3정규형에 속하고, 함수 종속 관계어서 모든 결정자가 후보키이면 보이스코드 정규형에 속한다.
  • 후보키 : 슈퍼 키 중 더 이상 줄일 수 없는(irreducible) 형태를 가진 것. 수퍼 키를 구성하는 속성(열) 중 어느 하나라도 제외될 경우 유일성을 확보할 수 없게 되는 것을 말한다. 기본 키로 선정될 수 있는 후보.

결정자
함수 종속 관계에서 특정 종속자(dependent)를 결정짓는 요소. 'X' -> 'Y'일때 결정자는 X, Y는 종속자이다.

  • 각 수강명에 대해 한 학생은 오직 한 강사의 강의만 수강한다.
  • 각 강사는 한 수강명만 담당한다.
  • 한 수강명은 여러 강사가 담당할 수 있다.

[학번, 수강명]이 후보키에 속하고, 강사 속성은 결정자이다. 하지만 이때 강사는 후보키가 아니다. 그러므로 강사 속성을 분리 해야된다.

  1. 추가 정규화: 4차 정규화 이상의 고급 정규화를 수행하기도 합니다.
  • 기본키(PK)에서 발생함
  • 독립된 속성간의 의미적인 연관성이 있어야 함
  • A,B,C가 있을 때 A-B, A-C는 연관성이 있으나 B-C는 연관성이 없는데도 불구하고 하나의 테이블에 PK로 사용이 될 때 발생이 됨(다치 종속 관계)
개발자자격증언어
홍길동정보처리기사C
임꺽정빅데이터 분석 기사JAVA
장길산정보처리기사C#
  1. <개발자> 마다 <자격증> 값들이 존재하고
  2. 특정 <개발자> 마다 <언어> 값들이 존재하는 경우 다치 종속 관계라고 한다
  3. <개발자, 자격증>, <개발자, 언어> 테이블로 분리하여 관리하면 다치 종속 관계를 제거하기 때문에 제 4 정규형을 만족한다

개발자자격증
홍길동정보처리기사
임꺽정빅데이터 분석 기사
장길산정보처리기사
개발자언어
홍길동C
임꺽정JAVA
장길산C#

profile
공부 정리 블로그

0개의 댓글

Powered by GraphCDN, the GraphQL CDN