[SQLD] 데이터 모델링의 이해

영태·2022년 8월 15일
0

[SQLD]

목록 보기
1/7

데이터 모델의 이해

  1. 모델링의 이해

    • 모델이란
      • 모형,축소형의 의모 사람이 살아가면서 나타날 수 있는 다양한 현상에 대해서 일정한 표기법에 의해 표현해 놓은 모형이라고 할 수 있다
      • 복잡한 현실세계를 단순히 표현하는 것
      • 사물 또는 사건에 관한 양상이나 관점을 명확하게 하는 것
      • 현실 세계의 추상화된 반영
    • 모델링의 특징
      • 추상화
        • 현실세계를 일정한 형식에 맞춰 표현
      • 단순화
        • 규약에 의한 제한된 표기법이나 언어로 쉽게 이해할 수 있도록 하는 개념
      • 명확화
        • 누구나 이해하기 쉽도록 애매함을 제거하고 정확하게 현상을 기술하는 것
    • 데이터 모델링의 세가지 관점
      • 데이터 관점(what?)
        • 업무와 데이터가 어떤 관련이 있는지, 데이터간의 관계는 무엇인지 모델링하는 방법
      • 프로세스 관점(how?)
        • 업무의 내용은 무엇인지 모델링하는 방법
      • 데이터와 프로세스간의상관관점(interaction)
        • 업무에 따라 데이터는 어떻게 영향을 받고 있는지 모델링하는 방법
  2. 데이터 모델의 기본 개념의 이해

    • 모델링의 정의
      • 정보 시스템을 구축하기 위해, 해당 업무에 어떤 데이터가 존재하는지, 업무자가 필요로 하는 정보는 무엇인지를 분석하는 방법
      • 기업 업무에 대한 이해를 바탕으로 전산화와는 별개의 관점에서 이를 명확하게 표현하는 추상화 기법
    • 데이터 모델이 제공하는 기능
      • 시스템을 가시화하도록 도와준다
      • 시스템의 구조와 행동을 명세화 할 수 있게 한다
      • 시스템을 구축하는 구조화된 틀을 제공한다
      • 시스템을 구축하는 과정에서 결정한 것을 문서화한다
      • 다양한 관점을 제공한다
      • 상세 수준의 표현방법을 제공한다
  3. 데이터 모델링의 중요성 및 유의점

  • 중요성
    • 파급효과
      • 데이터 구조의 변경으로 인한 변경작업은 전체시스템 구축에 있어서 프로젝트에서 큰 위험요소다
    • 복잡한 정보 요구사항의 간결한 표현
      • 데이터모델은 설계 도면이다
      • 정보요구사항을 정확히 이해하게 하기 위해서는 표현하는것도 중요하며 이를 간결하게 표현해야한다
    • 데이터 품질
      • 정확성이 떨어지는 데이터, 그저 그런 데이터라면 데이터 구조의 문제를 일으킨다
  • 유의점
    • 중복
    • 비유연성
      • 데이터 정의를 사용 프로세스와 분리시킴으로써 작은 변화가 중대한 변화로 변형될 위험을 줄여야한다
    • 비일관성
      • 다른 데이터와의 모순을 고려하지 않으면 비일관성이 발생한다
      • 따라서 명확한 정의가 필요하다
  1. 데이터 모델링의 3단계 진행

    • 개념적 데이터 모델링
      • 추상화 수준이 높은 업무중심적, 포괄적 수준의 모델링
      • 사전 데이터 모델링
      • 데이터 요구사항을 발견하는 것을 지원합낟
      • 현 시스템이 어떻게 변형되어야 하는가를 이해하는데 유용하다
      • EA 수립시 이용
    • 논리적 데이터 모델링
      • key, 속성,관계 등을 정확하게 표현
      • 재사용성이 높음
      • 가장 핵심이 되는 부분
      • 정규화
    • 물리적 데이터 모델링
      • 실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계
      • 물리적인 저장구조와 사용될 저장장치, 자료를 추출하기 위해 사용될 접근 방법 결정
  2. 프로젝트 생명주기(Life Cycle)에서 데이터 모델링

    • 계획-분석 단계 : 개념적 데이터 모델링
    • 분석 단계 : 논리적 데이터 모델링
    • 설계 단계 : 물리적 데이터 모델링
    • 현실적인 프로젝트 : 개념적 데이터 모델링이 생략된 개념/논리 모델링이 분석단계에서 수행
    • 객체 지향 개념은 데이터와 프로세스를 한꺼번에 다루기 때문에 데이터 모델링과 프로세스 모델링을 구분하지 않고 일체형으로 진행한다(ex.class)
  3. 데이터 모델링에서 데이터 독립성의 이해

    • 데이터 독립성의 필요성
      • 어떤 단위에 대해 독립적인 의미를 부여하고 효과적으로 구현
      • 고유한 특징을 명확하게 함
      • 다른 기능의 변경으로부터 변경되지 않는 고유성을 안정적으로 지원
      • 유지보수 비용 절감
      • 데이터 복잡도를 낮추며 데이터 자체를 줄이는 목적
      • 뷰와 모델간의 독립성을 유지하기 위한 목적
        • 계층별 뷰에 영향을 주지 않고 변경이 가능
        • DDL과 DML이 다른것을 이해할 수 있음
    • 데이터베이스 3단계 구조
      • ANSI/SPARC의 3단계 구성
      • 외부단계, 개념적 단계, 내부적 단계로 구성된 서로 간섭되지 않는 모델을 제시
      • 외부 - 논리적 데이터독립성 - 개념 - 물리적 데이터 독립성 - 내부
    • 데이터 독립성의 요소
      • 외부 스키마
        • 뷰 단계
        • 여러개의 사용자 관점으로 구성
      • 개념 스키마
        • 개념단계 하나의 개념적 스키마로 구성
      • 내부 스키마
        • DB가 물리적으로 저장된 형식
        • 실제적으로 저장되는 방법을 표현하는 스키마
    • 두 영역의 데이터독립성
      • 논리적 독립성
        • 개념 스키마가 변경되어도 외부 스키마에는 영향 X
        • 논리적 구조가 변경되어도 어플에는 영향 X
      • 물리적 독립성
        • 내부 스키마가 변경되어도 외부/개념 스키마에는 영향 X
        • 저장장치의 구조 변경은 어플과 개념스키마에 영향 X
    • 맵핑
      • 상호 독립적인 개념을 연결시켜주는 다리
        • 외부적/개념적 맵핑(논리적 맵핑)
          • 외부적 뷰와 개념적 뷰의 상호 관련성을 정의
        • 개념적/내부적 맵핑(물리적 맵핑)
          • 개념적 뷰와 저장된 데이터베이스의 상호 관련성을 정의
      • 맵핑을 하는 DDL를 필요에 따라 변경해줘야한다
  4. 데이터 모델링의 중요한 세 가지 개념

    • 데이터 모델링의 세가지 요소
      • 업무가 관여하는 어떤 것(Things)
        • 엔터티
      • 어떤 것이 가지는 성격 (Attributes)
        • 속성
      • 업무가 관여하는 어떤 것 간의 관계 (Relationships)
        • 관계
  5. 데이터 모델링의 이해관계자

    • 이해관계자의 데이터 모델링 중요성 인식
      • 실제 모델링 작업은 개발자나 업무분석가가 담당한다
      • 데이터베이스 설계를 잘못했을 시 영향을 받는 것들
        • 모든 프로그램
        • 시간에 따라 입력되는 모든 데이터
        • 발생되는 모든 트랜잭션
    • 데이터 모델링의 이해관계자
      • 정보시스템 구축 프로젝트에 참여한는 모든 IT 기술자들
      • 해당 업무에서 정보화를 추진하는 위치에 있는 사람들
  6. 데이터 모델의 표기법인 ERD의 이해

    • 데이터 모델 표기법
      • ERD 표기법
        • 피터첸이 ER표기법을 만듬
        • 엔터티를 사각형으로, 관계를 마름모로, 속성을 타원형으로 표현
    • ERD 표기법을 이용하여 모델링하는 방법
      • ERD 특징
        • 분석된 엔터티와 관계, 속성 정보가 바로 ERD에 표현된다
        • 코워커나 고객과의 대화에 있어서 핵심 업무산출물로 사용된다
        • 누구나 공통된 시각으로 데이터 모델을 파악할 수 있고 의사소통을 원활하게 해준다
      • ERD 작업순서
        • 엔터티 그리기
        • 엔터티 배치
        • 관계설정
        • 관계명 기술
        • 관계의 참여도 기술
        • 관계의 필수여부 기술
      • 배치
        • 보기좋게 왼쪽에서 오른쪽으로, 위에서 아래로 배치
      • 연결
        • PK로 속성이 상속되는 식별자 관계를 설정
        • 중복관계, 순환 관계 유의
      • 관계명 표시
        • 명확하게 표현
      • 관계 관계차수와 선택성 표시
  7. 좋은 데이터 모델의 요소

    • 완전성
      • 필요로 하는 모든 데이터가 데이터 모델에 정의되어있어야 한다
    • 중복 배제
      • 동일한 사실은 한번만 기록
    • 업무규칙
      • 컨밴션을 지킨다
    • 데이터 재사용성 향상
      • 데이터가 애플리케이션에 대해 독립적으로 설계되어야 데이터 재사용성을 향상시킬수있다
    • 커뮤니케이션
      • 데이터 모델이 의사소통의 도구로서 역할을 하기 때문에 최대한 자세하게 표현되어야한다
    • 통합성
      • 동일한 데이터는 조직의 전체에서 한번만 정의 다른 영역에서 참조 활용
      • 공동으로 사용하기 용이하게 정의해야한다

엔터티(Entity)

  1. 엔터티의 개념
    • 사람,장소,물건,사건,개념 등의 명사
    • 업무상 관리가 필요한 관심사
    • 저장이 되기 위한 어떤 것
  2. 엔터티와 인스턴스에 대한 내용과 표기법
    • 대부분 ERD 상에서 사각형으로 표현된다
  3. 엔터티의 특징
    • 반드시 해당 업무에 필요하고 관리하고자 하는 정보여야한다
    • 유일한 식별자에 의해 식별 가능해야 한다
    • 한개가 아닌 두개 이상의 인스턴스의 집합이어야한다
    • 업무 프로세스에 의해 이용되어야 한다
    • 반드시 속성이 있어야 한다
    • 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다
  4. 엔터티의 분류
    • 유무형에 따른 분류
      • 유형 엔티티
        • 물리적인 형태가 잇고 안정적,지속적으로 활용되는 엔티티
        • 사원,물품,강사 등
      • 개념 엔티티
        • 조직,보험상품 등
      • 사건 엔티티
        • 주문,청구,미납 등
    • 발생시점에 따른 분류
      • 기본 엔티티
        • 원래 존재하는 정보로서 다른 엔티티와의 관계에 의해 생성되지 않고 타 엔티티의 부모의 역할을 주로 하게 되는 엔티티
        • 사원,부서,고객,상품 등
      • 중심 엔티티
        • 업무에 중심적인 역할
          • 계약,청구,주문,게시글 등
      • 행위 엔티티
        • 두개 이상의 부모엔티티로부터 발생
        • 자주 내용이 바뀌거나 데이터량이 증가
        • 주문목록,사원변경이력
  5. 엔터티의 명명
    • 현업업무에서 사용되는 용어를 사용한다
    • 가능하면 약어를 사용하지 않는다
    • 단수명사를 사용한다
    • 유일한 이름이어야한다
    • 생성의미대로 명명한다

속성

  1. 속성의 개념
    • 업무상에서 필요로 한다
    • 의미상 더이상 분리되지 않는다
    • 엔티티를 설명하고 인스턴스의 구성요소가 된다
  2. 엔터티 인스턴스와 속성 속성값에 대한 내용과 표기법
    • 엔터티 인스턴스 속성 속성값의 관계
      • 속성은 엔티티의 구체적인 정보를 나타내며 각각의 속성은 구체적인 값을 갖는다
      • 속성정보를 두개 이상 갖는다
      • 속성은 관계로 기술될 수 없다
      • 속성이 속성을 가질 수 없다
      • 한개의 속성은 한개의 속성값을 갖는다
    • 속성의 표기법
      • 언티티 내의 이름을 포함하여 표현한다
  3. 속성의 특징
    • 해당 업무에 필요하고 관리하고자 하는 정보여야 한다
    • 정규화 이론에 근간하여 정해진 주식별자에 의해 함수적 종속성을 가져야한다
    • 하나의 속성은 한개의 값만 가진다
    • 여러개의 값일 경우 엔티티를 이용해 분리한다
  4. 속성의 분류
    • 특성에 따른 분류
      • 기본속성
      • 설계속성
        • enum 타입 같은 개념
        • 제품코드 등
      • 파생속성
        • 계산된 값
        • 적게 정의하는 것이 좋다
    • 엔터티 구성방식에 따른 분류
      • PK 속성
      • FK 속성
      • 일반 속성
      • 복합속성
      • 단순속성
      • 단일값 속성
      • 다중값 속성 : 정규화하거나 엔티티를 만들어 관계로 연결
  5. 도메인
    • 속성이 가질 수 있는 값의 범위
    • 속성에 대한 데이터타입과 크기, 제약사항을 설정하는 것
  6. 속성의 명명
    • 현업에서 사용하는 이름으로 부여
    • 가급적 서술식의 속성명 지양
    • 명사형으로 사용
    • 약어 사용 지양
    • 가급적 유일한 이름으로 작성

관계

  1. 관계의 개념

    • 관계의 정의
      • 엔티티의 인스턴스 사이에 서로간의 연관성이 부여된 상태
    • 관계의 페어링
      • 엔터티 안에 인스턴스가 개별적으로 관계를 갖지느 것
      • 두 엔티티 사이에는 두개 이상의 관계가 형성될 수 있다
  2. 관계의 분류

    • 어떤 목적으로 연결되었느냐에 따라 분류
  3. 관계의 표기법

    • 관계명
      • 애매한 동사를 피한다
      • 능동적-수동적, 포함된다-소속된다 등의 동사를 사용
      • 현재형으로 표현한다
    • 관계차수
      • 1:1
      • 1:M
      • N:M
    • 관계선택사양
      • 필수 참여관계
        • ex) 지하철 출발 - 지하철 문닫힘
      • 선택 참여관계
        • ex) 지하철 출발 - 출발 안내방송
  4. 관계의 정의 및 읽는 방법

    • 관계 체크사항

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

      • 기준 엔티티는 One 혹은 Each로 읽는다
      • 대상 엔티티의 관계참여는 개수로 읽는다
      • 관계선택사양과 관계명을 읽는다

식별자

  1. 식별자 개념

    • 엔티티를 구별할 수 있는 논리적인 이름을 식별자라고 한다
    • 엔티티의 속성들 중 엔티티를 대표할 수 있는 속성을 의미한다
    • 식별자는 논리 데이터 모델링 단계에서의 개념, 키는 물리 데이터 모델링 단계에서의 개념이다
  2. 식별자 특징

    • 유일성 : 주식별자에 의해 엔티티 내의 모든 인스터스들이 유일하게 구분되어야 한다
    • 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다
    • 불변성 : 주식별자의 값은 자주 변하지 않는 것이어야 한다
    • 존재성 : 지정이 되면 반드시 값이 있어야 한다
  3. 식별자 분류 및 표기법
    - 식별자 분류
    - 스스로 생성여부
    - 내부식별자
    - 외부식별자
    - 속성의 수
    - 단일식별자
    - 복합식별자
    - 대표성 여부
    - 주식별자
    - 보조식별자
    - 대체 여부
    - 본질식별자
    - 인조식별자
    - 식별자 표기법

  4. 주식별자 도출기준

    • 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다
    • 명칭,내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다
    • 복합으로 주식별자를 구성할 경우 너무 많은 속성이 포함되지 않도록 해야 한다
  5. 식별자관계와 비식별자관계에 따른 식별자

    • 식별자관계와 비식별자 관계의 결정
      • 다른 엔티티와의 관계를 통해 자식 쪽 엔티티에 생성되는 속성을 외부식별자라고 하며 FK역할을 한다
      • 이를 주식별자로 이용할것인지 연결되는 속성으로서만 이용할 것인지 결정해야한다
    • 식별자 관계
      • 부모엔티티가 생성되어야 자기 자신의 엔티티가 생성되는 경우
      • 자식엔티티의 주식별자로 부모의 주식별자가 상속이 되는 경우를 식별자 관계라고 한다
    • 비식별자관계
      • 부모로부터 속성을 받았지만 자식엔티티의 주식별자로 이용하지 않고 일반적인 속성으로만 이용하는 경우
        • 자식엔티티에서 받은 속성이 반드시 필수가 아니어도 무방하기 때문에 부모 없는 자식이 생성될수 있는 경우
        • 엔티티별로 데이터의 생명주기를 다르게 관리할 경우
          • 자식만 남겨두고 부모엔티티가 먼저 삭제될 수 있는 경우
          • FK를 연결하지 않는 방법이 있지만 비식별자관계로 조정하는 것이 가장 좋은 방법이다
        • 각각의 엔티티가 별도의 관계를 가질때
        • 자식엔티티에 주식별자로 사용하여도 되지만 자식 엔티티에서 별도의 주식별자를 생성하는 것이 유리하다고 판단되는 경우
    • 식별자 관계로만 설정할 경우의 문제점
      • 식별자 관계만으로 연결된 데이터 모델은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로 개발의 복잡성과 오류 가능성을 유발시킬 수 있는 요인이 된다
    • 비식별자 관계로만 설정할 경우의 문제점
      • 데이터를 조회하려고 하면 불필요한 조인이 다량으로 유발되면서 SQL 구문이 길어지고 성능이 저하된다
    • 식별자관계와 비식별자관계 모델링 - 비식별자 관계 선택 프로세스 - 관계분석 -> 관계의 강/약 분석(약한 관계일시) -> 자식테이블 독립PK 필요(필요할시) -> SQL 복잡도 증가 개발생산성저하
      | 항목 |식별자 관계 | 비식별자 관계|
      |:--|:--|:--|
      |목적| 강한 연결관리 표현|약한연결관계표현|
      |자식 주식별자영향| 자식 주식별자의 구성에 포함됨 | 자식 일반속성에 포함됨|
      |표기법|실선표현|점선표현|
      |연결고려사항1| 반드시 부모엔티티 종속 | 약한 종속관계 |
      |연결고려사항2| 자식 주식별자구성에 부모주식별자 포함 필요 | 자식 주식별자구성을 독립적으로 구성, 자식 주식별자 구성에 부모 주식별자 부분 필요|
      |연결고려사항3| 상속받은 주식별자 속성을 타 엔티티에 이전 필요| 상속받은 주식별자속성을 타 엔티티에 차단 필요 부모쪽의 관계참여가 선택관계|
profile
개발 공부중

0개의 댓글