SQLD 정리 - 1. 데이터 모델링의 이해

영준·2020년 3월 14일
5

데이터 모델의 이해

데이터 모델링이란

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

모델링의 특징

  • 현실세계를 일정한 형식에 맞추어 표현하는 추상화의 의미를 가짐
  • 시스템 구현, 업무분석, 업무 형상화의 목적이 있음
  • 복잡한 현실을 제한된 언어나 표기법으로 이해하기 쉽도록하는 단순화의 의미를 가짐
  • 애매모호함을 배제하고 누구나 이해 가능하도록 정확하게 현상을 기술하는 정확화의 의미를 가짐
  • 데이터 모델링 자체로 업무를 설명하고 분석하는 부분에서도 매우 중요한 의미를 가짐

데이터 모델링 유의점

중복(Duplication)

  • 데이터베이스가 여러 장소에 같은 정보를 저장하는 잘못을 하지 않도록 한다.

비유연성(Inflexibility)

  • 데이터의 정의를 데이터의 사용 프로세스와 분리한다.
  • 데이터 혹은 프로세스의 작은 변화가 애플리케이션과 데이터베이스에 중대한 변화를 일으킬 수 있는 가능성을 줄인다.

비일관성(Inconsistency)

  • 데이터의 중복이 없더라도 비일관성은 발생할 수 있다.
  • 데이터와 데이터간의 상호 연관 관계에 대해 명확하게 정의하여야 한다.
  • 사용자가 처리하는 프로세스 혹은 이와 관련된 프로그램과 테이블의 연계성을 높이는 것은 데이터 모델이 업무 변경에 대해 취약하게 만드는 단점.

개념적 데이터 모델링

  • 추상화 수준이 높다.
  • 업무 중심적이고 포괄적인 수준의 모델링 진행.
  • 전사적 데이터 모델링
  • EA(Enterprise Architect) 수립시 많이 사용

논리적 데이터 모델링

  • 시스템으로 구축하고자 하는 업무에 대해 key, 속성, 관계 등을 정확하게 표현, 재사용성이 높음.

물리적 데이터 모델링

  • 실제 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계.

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

개념 스키마

  • 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현
  • 데이터 모델링은 통합 관점을 가지고 있는 개념 스키마(Conceptual Schema)를 만들어 가는 과정.

외부 스키마

  • 사용자 뷰(View)
  • 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의
  • 전체 데이터베이스의 한 논리적인 부분 (서브 스키마)
  • 같은 데이터베이스에 대해서도 서로 다른 관점을 정의 할 수 있도록 허용
  • 일반 사용자는 SQL을 사용하여 DB를 사용한다.

내부 스키마

  • 물리적 저장장치 입장에서 본 데이터베이스 구조, 물리적인 저장 장치와 밀접한 계층
  • 실제 데이터베이스에 저장될 레코드의 물리적인 구조를 정의
  • 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 나타냄
  • 시스템 프로그래머, 설계자가 보는 관점의 스키마

엔티티

엔티티의 특징

  • 반드시 해당 업무에서 필요하고 관리하고자 하는 정보이어야 한다.
  • 유일한 식별자에 의해 식별이 가능해야 한다.
  • 영속적으로 존재하는 두 개 이상의 인스턴스 집합이어야 한다.
  • 엔티티는 반드시 속성이 있어야 한다.
  • 엔티티는 다른 엔티티와 최소 한 개 이상의 관계가 있어야 한다.

ERD 작성 순서

  1. 엔티티를 그린다.
  2. 엔티티를 적절하게 배치한다.
  3. 인티티간 관계를 설정한다.
  4. 관계명을 기술한다.
  5. 관계의 참여도를 기술한다.
  6. 관계의 필수여부를 기술한다.

발생 시점에 따른 엔티티 분류

기본 엔티티 (키 엔티티)

  • 업무에 원래 존재하는 정보
  • 다른 엔티티와의 관계에 의해 생성되지 않고 독립적으로 생성 가능
  • 타 엔티티의 부모역할을 하게됨
  • 사원, 부서, 고객, 상품 등

중심 엔티티

  • 기본 엔티티로부터 발생하며, 업무에 있어서 중요한 역할을 한다.
  • 데이터량이 많이 발생되고 다른 엔티티와의 관계를 통해 행위 엔티티를 생성한다.
  • 계약, 청구, 주문, 매출 등

행위 엔티티

  • 두 개 이상의 부모 엔티티로부터 발생
  • 자주 내용이 바뀌거나 데이터량이 증가한다.
  • 분석 초기 단계에서는 잘 나타나지 않고 상세 설계나 프로세스와 상관 모델링을 하면서 도출될 수 있다.
  • 주문목록, 사원 변경이력 등

엔티티 명명 기준

  • 가능하면 현업에서 사용하는 용어를 사용한다.
  • 가능하면 약어를 사용하지 않는다.
  • 단수명사를 사용한다.
  • 모든 엔티티를 통틀어서 유일하게 이름이 부여되어야 한다.
  • 엔티티 생성 의미대로 이름을 부여한다.

속성(Attribute)

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

엔티티, 인스턴스, 속성, 속성값의 관계

  • 한 개의 엔티티는 두 개 이상의 인스턴스의 집합이어야 한다.
  • 한 개의 엔티티는 두 개 이상의 속성을 갖는다.
  • 한 개의 속성은 한 개의 속성값을 갖는다.

속성 특성에 따른 분류

기본 속성

  • 원래 가지고 있어야 하는 속성
  • 업무로 부터 추출된 일반적인 속성

설계 속성

  • 원래 존재하지 않지만 필요에 따라 설계자가 추가한 속성
  • 주문번호, 예약번호, 고객번호, 상품코드 등

파생 속성

  • 데이터를 조회할 때 빠른 성능을 낼 수 있도록 하기 위해 원래 속성의 값을 계산하여 저장할 수 있도록 만든 속성

도메인

  • 각 속성이 가질 수 있는 값의 범위
  • 엔티티 내에서 속성에 대한 데이터타입과 제약사항을 지정하는 것
  • 예) 제품명이라는 속성은 길이가 20자리 이내의 문자열로 정의 할 수 있다.

속성 명칭 부여

  • 해당 업무에서 사용하는 이름을 부여한다.
  • 서술적인 속성명을 사용하지 않는다.
  • 약어는 가급적 사용하지 않는다.
  • 전체 데이터 모델에서 유일성을 확보하는 것이 좋다.

관계

관계의 표기법

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

관계 도출시 체크 사항

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

식별자

식별자의 종류

대표성 여부

  • 주 식별자 : 인스턴스를 유일하게 구분 할 수 있으며 참조관계를 연결 할 수 있음
  • 보조 식별자 : 유일하게 구분 가능하지만 대표성을 가지지 못해 참조관계 연결을 못함

스스로 생성 여부

  • 내부 식별자 : 엔티티 내부에서 스스로 만들어지는 식별자
  • 외부 식별자 : 타 엔티티와의 관계를 통해 타 엔티티로부터 받아오는 식별자

속성의 수

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

대체 여부

  • 본질 식별자 : 업무에 의해 만들어지는 식별자
  • 인조 식별자 : 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자

주 식별자의 특징

  • 유일성 : 엔티티내의 모든 인스턴스를 유일하게 구분함
  • 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함
  • 불변성 : 식별자가 한 번 지정되면 그 값은 변하지 않아야 함
  • 존재성 : 주식별자가 존재하면 반드시 데이터 값이 존재 (null 안됨)

주식별자를 도출하는 기준

  • 해당 업무에서 자주 사용되는 속성을 주식별자로 지정
  • 명칭, 내역 등과 같이 이름으로 기술되는 속성은 주식별자로 지정하지 않는다.
  • 복합으로 주식별자를 구성하는 경우 너무 많은 속성이 포함되지 않도록 한다.

식별자 관계

  • 부모 엔티티의 주식별자가 자식 엔티티의 주 식별자로 상속된 경우

비식별자 관계

  • 부모 엔티티의 주식별자가 자식 엔티티의 일반 속성으로 상속된 경우

비식별자 관계로 설정하는 경우

  • 부모 없는 자식이 생성될 수 있는 경우
  • 부모가 있었지만 자식만 남겨두고 먼저 소멸될 수 있는 경우
  • 여러 엔티티가 하나의 엔티티로 통합되어 표현될 경우
  • 자식 엔티티에서 별도의 주식별자를 생성하는 것이 더 유리하다고 판단될 때
  • 자식과 관련이 있는 엔티티로의 주식별자 상속을 차단하기 위해
profile
자바 백엔드 개발자입니다.

0개의 댓글