데이터 모델링

June Lee·2021년 2월 25일
0

Database

목록 보기
13/19

어떤 서비스를 도식화 할 때, 클래스 다이어그램은 서비스 자체에 포커스를 두고 모델링한 것이고, ER 다이어그램은 그 서비스의 데이터에 포커스를 두고 모델링한 결과이다.

그렇다면 데이터 모델링은 어떤 과정을 거쳐야할지에 대해 알아보자.

1. 엔티티 타입 선정

엔티티 타입은 엔티티라는 인스턴스의 객체(클래스)를 가리키는 말이다. 즉 엔티티타입은 여러 엔티티의 집합으로 표현될 수 있다. 그러나 통상적으로 엔티티 타입을 엔티티라고 부르기도 한다.

엔티티 타입의 도출은 다음의 단계를 거치는 것이 좋다.

  1. 요구사항 분석을 통해 명사 추출
  2. 개념이 불명확한 것 제거
  3. 엔티티 타입의 특성(attribute)에 해당하는 것 제거
  4. 중복된 명사 제거
  5. 그 외에 필요한 엔티티 타입 유추

그리고 이렇게 얻어진 엔티티 타입을 검증하기 위해서는 다음의 항목들을 생각해보아야 한다.

  1. 업무에 필요한 것인지
  2. 식별자가 있어서 식별 가능한지
  3. 영속적으로 존재하는 데이터인지
  4. 업무 프로세스에서 이용되는지
  5. 속성이 한 개 이상 있으며 속성들을 객관적으로 정해줄 수 있는지
  6. 최소 한 개 이상의 다른 엔티티타입과 관계(relationship)를 맺고 있는지 (물론 여기에는 비등가 조인에 쓰이는 테이블과 같은 예외도 있다.)

2. 식별자(혹은 대리 식별자) 선정

1단계에서 선정된 엔티티타입에 대해서 식별자(primary key)를 정해준다.
마땅한 식별자가 없어서 식별자를 여러 개로 설정해야할 때에는 이를 합한 대체 식별자(주문번호 = 주문일자 + 상품번호,..)를 만들어주는 것도 좋다.


3. 엔티티타입 간의 관계 정의

관계형 데이터 베이스에서 엔티티 타입 간에는 관계가 존재한다. 따라서 3번째 단계에서는 이런 관계의 내용(소유, 대여...)과 Cardinality(1:1, 1:N,..)를 파악해야한다.


4. 일반 속성 정의

3단계까지 마친 후에 최종적으로 엔티티 타입 별로 식별자가 아닌 일반 속성들을 정의해준다.


식별자(Primary Key)

엔티티 타입 내에서 각각의 엔티티들을 구분할 수 있도록 하는 것을 식별자라고 한다.


속성(Attribute)

업무에 필요한 엔티티 타입에서 관리하고자 하는 더 이상 분리되지 않는 최소의 데이터 단위를 속성이라 한다.


도메인(Domain)

각 속성이 가질 수 있는 값의 범위(타입과 크기) 그리고 제약사항을 지정한 것을 도메인이라고 한다.


관계(Relationship)

1) 관계 참여도

2) 관계의 종류

  • 병렬관계

  • 주식별자 관계/비식별자 관계
    주식별자 관계: fk가 primary key의 역할을 하는 경우
    비식별자 관계: fk가 일방 속성인 경우


🔍 둘 중 어떤 관계를 선택하는 것이 더 좋을까?

테이블 간에 주식별자 관계를 맺어주면 상속받은 테이블의 Primary key가 한 번 상속을 거칠 때마다 하나씩 증가한다. 이 상태에서 다른 테이블과 조인을 해야한다면 코드가 매우 길고 복잡해진다. 그러나 이렇게 해줬을 때의 장점은 관계상 멀리 떨어진 테이블에서 데이터를 가져올 때에 이미 해당 테이블의 PK가 현재 테이블에 존재하기 때문에 두 테이블 사이에 존재하는 모든 테이블을 다 조인하지 않아도 된다는 점이다.
한편 테이블 간 비식별자 관계이와 반대로 PK가 매우 적기 때문에 조인 시 코드가 간결하다는 장점이 있다. 그러나 멀리 떨어진 테이블에서 데이터를 가져와야할 때에는 그 사이에 존재하는 모든 테이블을 다 조인해줘야한다.


  • 데이터 모델링 예시

입사 날짜를 가진 직원 테이블과 비등가 조인하여 월급과 직급을 얻을 수 있는 직원 등급 테이블을 뒀다.
티켓 판매, 안전 검사는 직원이 놀이 기구를 검사하는 행위, 직원이 티켓을 판매하는 행위를 통해서 새로운 데이터가 나오는 것들을 표현하는 행위 엔티티 타입(Active Entity Type)이다. 이런 행위 엔티티 타입이 많아져야 데이터 모델이 역동성을 갖는다.

profile
📝 dev wiki

0개의 댓글

관련 채용 정보