1-1. 데이터 모델링의 이해

DEV_HOYA·2023년 10월 28일

SQLD

목록 보기
1/7
post-thumbnail

📌 데이터 모델링

⭐ 데이터 모델링의 중요성 및 유의점

중비유일

  • 중복 : 같은 시간 같은 데이터 제공
  • 비유연성 : 사소한 업무변화에 데이터 모델이 수시로 변경되면 안됨
  • 비일관성 : 데이터간 상호연관에 대해 명확히 정의해야 함
  • 중복성 최소화, 유연성높임, 일관성있게

⭐ 데이터 모델링 필요성

  • 정보시스템을 구축하기 위한 데이터 관점의 업무분석 기법
  • 현실세계의 데이터에 대해 약속된 표기법에 의해 표현하는 과정
  • 데이터베이스를 구축하기 위한 분석/설계의 과정

⭐ 데이터 모델링 종류

개논물

  • 개념적 데이터 모델링
    • 추상화 수준 높음
    • 업무중심적이고 포괄적인 수준의 모델링 진행
    • 전사적 데이터 모델링
    • EA수립시 많이 이용
  • 논리적 데이터 모델링
    • 시스템으로 구축하고자 하는 업무에 대해 Key, 속성, 관계 등을 정확하게 표현
    • 재사용성 높음
  • 물리적 데이터 모델링
    • 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계

⭐ 데이터베이스 스키마 구조 3단계

외개내

  • 외부 스키마 : 개개인 사용자가 보는 개인적 DB 스키마
  • 개념 스키마 : 모든 사용자 관점을 통합한 전체 DB
  • 내부 스키마 : 물리적 장치에서 데이터가 실제적 저장

⭐ 데이터 독립성

  • 논리적 독립성 : 개념스키마가 변경되어도 외부스키마에 영향 X
  • 물리적 독립성 : 내부스키마가 변경되어도 외부/개념스키마에 영향 X

✅ Mapping(사상) : 상호 독립적인 개념을 연결시켜주는 다리

  • 논리적 사상 : 외부 스키마 ~ 개념 스키마
  • 물리적 사상 : 개념 스키마 ~ 내부 스키마

⭐ 데이터 모델링의 3요소

  • 어떤 것(Things)
  • 성격(Attributes)
  • 관계(Relationships)

✅ 데이터 모델링은 프로젝트에 참여한 모두가 알아야함

⭐ 데이터 모델링의 특징

추정단
(현실세계) -> 추상화, 정확화, 단순화 -> (모델)

⭐ ERD

  • 1976년 피터첸이 Entity Relationship Model 개발
  • IE, Barker 기법이 많이 쓰임
  • 속성, 관계, 개체로 이뤄짐 속관개
  • 관계의 명칭은 관계표현에 있어서 매우 중요한 부분에 해당
  • 가장 중요한 엔티티를 왼쪽상단에 배치

⭐ ERD 작성순서

엔그배관 관명참필
1. 엔티티 그림
2. 엔티티 배치
3. 엔티티 관계설정
4. 관계명 기술
5. 관계의 참여도 기술
6. 관계 필수여부

⭐ 좋은 데이터 모델의 요소

  • 완전성 : 업무에 필요한 모든 데이터가 모델에 정의
  • 중복배제 : 하나의 DB내에 동일한 사실은 한번만
  • 업무규칙 : 많은 규칙을 사용자가 공유하도록 제공
  • 데이터 재사용 : 데이터가 독립적으로 설계되야 함
  • 의사소통 : 업무규칙은 엔티티, 서브타입, 속성, 관계 등의 형태로 최대한 자세히 표현
  • 통합성 : 동일한 데이터는 한번만 정의, 참조 활용

📌 엔티티

  • 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것, 보이지 않는 개념 포함

⭐ 엔티티의 특징

  • 반드시 해당 업무에서 필요하고 관리하고자 하는 정보
  • 유일한 식별자에 의해 식별가능
  • 두 개 이상의 인스턴스의 집합
  • 업무 프로세스에 의해 이용되어야 함
  • 반드시 속성이 있어야 함
  • 다른 엔티티와 최소 1개 이상의 관계가 있어야 함(단, 통계성/코드성 엔티티는 관계 생략 가능)

⭐ 엔티티의 분류(유/무형)

유사개

  • 유형 엔티티 : 물리적 형태
    ex) 사원, 물품, 강사
  • 사건 엔티티 : 업무 수행 시 발생
    ex) 주문, 청구, 미납
  • 개념 엔티티 : 개념적 정보
    ex) 조직, 보험상품

⭐ 엔티티의 분류(발생시점)

기행중

  • 기본 엔티티(키 엔티티) : 그 업무에 원래 존재하는 정보, 타 엔티티의 부모 역할, 자신의 고유한 주식별자 가짐
    ex) 사원, 부서, 고객, 상품, 자재
  • 행위 엔티티 : 2개 이상의 부모 엔티티로부터 발생, 자주 바뀌거나 양이 증가
    ex) 주문목록, 사원변경이력
  • 중심 엔티티 : 기본 엔티티로부터 발생, 다른 엔티티와의 관계로 많은 행위 엔티티 생성
    ex) 계약, 사고, 주문

✅ 교차 엔티티

  • M:N관계를 해소하기 위해서 인위적으로 만들어진 엔티티
    ex) 학생, 과목 테이블을 이어주는 수강테이블

⭐ 엔티티의 명명

  • 현업업무에서 사용하는 용어 사용
  • 약어 사용금지
  • 단수명사 사용
  • 유일한 이름 사용
  • 생성의미대로 부여

📌 속성

  • 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더이상 분리되지 않는 최소의 데이터 단위
  • 엔티티에 대한 자세하고 구체적인 정보를 나타냄
  • 한개의 엔티티는 2개 이상의 인스턴스 집합
  • 한개의 엔티티는 2개 이상의 속성을 가짐
  • 한개의 속성은 1개의 속성값을 가짐

⭐ 속성의 분류

기설파

  • 기본 속성 : 업무로부터 추출한 모든 일반적인 속성
  • 설계 속성 : 업무를 규칙화하기 위해 새로 만들거나 변형, 정의하는 속성
    ex) 일련번호
  • 파생 속성 : 다른 속성에 영향을 받아 발생하는 속성, 빠른 성능을 낼수 있도록 원래 속성의 값을 계산, 적을수록 좋음
    ex) 합

⭐ 도메인

  • 각 속성이 가질 수 있는 값의 범위
  • 속성에 대한 데이터 타입/크기/제약사항 지정
    ex) 5글자

⭐ 속성의 명명

  • 해당업무에서 사용하는 이름 부여
  • 서술식 속성명은 사용 금지
  • 약어 사용 금지
  • 구체적으로 명명하여 데이터 모델에서 유일성 확보

📌 관계

  • 엔티티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태
  • 존재적 관계와 행위에 의한 관계로 나눌 수 있음
  • 관계 페어링의 집합
    ex) 강사 - 가르친다(관계) - 학생

✅ 페어링 : 엔티티 안에 인스턴스가 개별적으로 관계를 가지는 것

⭐ UML에서의 관계

  • 연관관계(실선) : 항상 이용하는 관계
    ex) 소속된다
  • 의존관계(점선) : 상대 행위에 의해 발생하는 관계
    ex) 주문한다

⭐ 관계 ERD, UML 표기법 비교

  • ERD는 존재와 행위를 구분하지 않고 단일화된 표기법 사용
  • UML에는 클래스다이어그램 관계 중 연관관계, 의존관계가 있고 이것은 실선과 점선표기법으로 다르게 표현

⭐ 관계의 표기법

명차선

  • 관계명 : 관계의 이름
  • 관계차수 : 1:1, 1:M, M:N
  • 선택성(관계선택사양) : 필수관계, 선택관계

⭐ 2개의 엔티티 사이에 정의한 관계 체크사항

  • 2개의 엔티티 사이에 관심있는 연관규칙이 존재 하는가?
  • 2개의 엔티티 사이에 정보의 조합 발생되는가?
  • 업무기술서, 장표에 관계 연결에 대한 규칙 서술되어 있는가?
  • 업무기술서, 장표에 관계 연결을 가능케 하는 동사가 있는가?

📌 식별자

  • 엔티티내에서 인스턴스를 구분하는 구분자
  • 식별자는 논리데이터 모델링 단계에 사용
  • Key는 물리데이터 모델링 단계에 사용

⭐ 식별자의 특징

유최불존

  • 유일성 : 주 식별자에 의해 모든 인스턴스들을 유일하게 구분
  • 최소성 : 주 식별자를 구분하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함
  • 불변성 : 지정된 주식별자의 값은 자주 변하지 않아야 함, 변하면 이전기록 말소됨
  • 존재성 : 주 식별자가 지정되면 반드시 값이 들어와야 함, NULL 안됨

⭐ 식별자 분류(대표성)

대주보

  • 주 식별자 : 엔티티 내에서 각 어커런스(레코드)를 구분할 수 있는 구분자, 타 엔티티와 참조관계를 연결할 수 있음
  • 보조 식별자 : 엔티티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결 불가

⭐ 식별자 분류(스스로 생성여부)

생내외

  • 내부 식별자 : 엔티티 내부에서 스스로 생성되는 식별자
  • 외부 식별자 : 타 엔티티와의 관계를 통해 타 엔티티로부터 받아오는 식별자

⭐ 식별자 분류(속성의 수)

수단복

  • 단일 식별자 : 하나의 속성으로 구성
  • 복합 식별자 : 2개 이상의 속성으로 구성

⭐ 식별자 분류(대체 여부)

대본인

  • 본질 식별자 : 업무에 의해 만들어지는 식별자
  • 인조 식별자 : 업무적으로 만들어지지 않고 인위적으로 만든 식별자

⭐ 엔티티내에 주식별자 도출 기준

  • 해당 업무에서 자주 이용되는 속성
  • 명칭, 내역등과 같이 이름으로 기술되는 것들은 X
  • 복합으로 주 식별자를 구성할 경우 너무 많은 속성 X => 너무 많으면 인조 식별자 생성한다
  • 자주 수정되는 속성 X

⭐ 식별자 관계, 비식별자 관계

  • 식별자 관계
    • 자식의 주 식별자로 부모의 주 식별자 상속
    • 강한연결관게 표현
    • 실선 표기
    • 부모로부터 받은 식별자를 자식 엔티티의 주 식별자로 이용하는 경우
    • 반드시 부모엔티티 종속
    • 자식 주식별자구성에 부모 주식별자포함 필요
    • 상속받은 주식별자속성을 타엔티티에 이전 필요
    • 부모엔티티의 주식별자를 자식엔티티에서 받아 손자엔티티까지 계속 흘려보낼 때
    • 부모 엔티티의 인스턴스가 자식 엔티티와 같이 소멸되는 경우
  • 비 식별자 관계
    • 부모 속성을 자식의 일반 속성으로 사용
    • 약한연결관계 표현
    • 점선 표기
    • 약한 종속관계
    • 자식 주식별자구성을 독립적으로 구성
    • 자식 주식별자구성에 부모 주식별자 부분 필요
    • 상속받은 주식별자속성을 타 엔티티에 차단 필요
    • SQL문장이 길어져 복잡성 증가되는 것 방지
    • 부모쪽의 관계참여가 선택관계
    • 부모엔티티에 참조값이 없어도 자식엔티티의 인스턴스가 생성될 수 있는 경우
    • 부모와 자식의 생명주기가 다른 경우(별도로 소멸)
    • 여러개의 엔티티가 하나로 통합되면서 각각의 엔티티가 갖고있던 여러개의 개별 관계가 통합되는 경우
    • 자식엔티티의 주 식별자를 부모엔티티와는 별도로 생성하는 것이 더 유리한 경우
    • 비 식별자 관계로만 설정 시 부모엔티티와 조인하여 성능저하

0개의 댓글