기록이 힘이다.

[관계형 데이터 모델링 노트] 01. 엔터티 이야기 본문

IT서적

[관계형 데이터 모델링 노트] 01. 엔터티 이야기

dev22 2023. 12. 18. 20:03
728x90

엔터티 정의방법 - 원천 데이터인가? 

- 스스로 존재하는 최초의 데이터이다. 

- 고객이나 사용자가 직접 입력함으로써 생성된다. 즉 화면에서 입력한다. 반면에 가공 데이터는 주로 프로그램에 의해 생성된다. 배치 프로그램이나 데이터 복제 프로그램에 의해 생성된다. 

 

원천 데이터끼리는 관계가 활발하게 존재하는 반면, 원천 데이터와 가공 엔터티, 또는 가공 엔터티끼리는 참조 무결성 관계가 거의 존재하지 않는다. 

 

원천 데이터는 정규화를 철저히 수행해야 하는 데이터다. 가공 데이터는 비정규화가 비교적 빈번하게 수행된다. 

 

꼭 필요하지 않은 실체화된 뷰는 자원을 낭비하고, 성능을 저하시킬 수 있으므로 가공 데이터와 마찬가지로 주의가 필요하다. 

 

가공 엔터티에 사용된 값은 원천 엔터티의 값이 바뀌면 수정해야 한다. 

 

데이터 본질에 따른 엔터티 분류법 - 실체. 행위. 가공. 기준

 

실체 엔터티: 실체 물체(보이는 실상)에 대한 본질적인 데이터를관리하는 엔터티

행위 엔터티: 행위나 활동으로 발생한 원천 데이터를 관리하는 엔터티

가공 엔터티: 원천 데이터를 추출. 집계한 데이터를 관리하는 엔터티

기준 엔터티: 실체나 행위 데이터의 기준(업무 기준)이 되는 데이터를 관리하는 엔터티

 

한 사원이 정규직이나 계약직이 될 수 있더라도 사원 실체는 하나다. 실체로 파악하면 인스턴스는 하나며, 역할로 파악하면 인스턴스는 두 개다. 만약 역할로 파악해서 설계했다면 실체 엔터티를 잘못 설계한 것이다. 

 

실체 엔터티는 행위 엔터티의 주체가 되며, 부모 엔터티가 존재하지 않는다. 

 

고객의 이력 데이터가 고객의 숫자에 영향을 미치면 안 된다. 

대부분 최상위 엔터티인 실체 엔터티를 제대로 설계해야 전체 모델이 안정된다. 단순하게 설계할 수 있고 , 그렇게 설계해야 하는 엔터티가 실체 엔터티다. 

 

 

행위 엔터티는 관리하는 속성도 대부분 많다. 엔터티도 많고 속해 있는 속성도 많기 때문에 모델링 시 가장 많은 시간이 소요되는 엔터티다. 행위 엔터티의 가장 큰 특징 중 하나는 주 식별자가 복잡하다는 것이다. 행위 엔터티는 대부분 하위 엔터티가 적어서 굳이 인조 식별자를 사용할 필요가 없고, 업무 식별자를 사용하기 때문에 주 식별자가 복잡하다. 

 

행위 엔터티의 업무 식별자를 도출하는 방법은 이미 널리 알려진 대로 누가.무엇을.언제.어떻게.어디에서 했는지를 분석하는 것이다. 

 

행위 엔터티와 함께 가장 많은 엔터티가 가공 엔터티다. 업무에 따라 가공 엔터티가 월등히 많아지기도 한다. 많은 만큼 제대로 설계하면 시스템 전체가 깔끔해진다. 

 

교차 엔터티

교차 엔터티는 핵심 엔터티 간에 자주 발생하는 중요한 엔터티다. 

 

엔터티 설계 원칙

 

- 데이터 정체성

- 엔터티 무결성 

- 엔터티 유일성

- 데이터 혼용 배제

- 타 엔터티와 관계 존재

- 프로세스 도출 지양

- 화면 도출 지양

- 데이터 관리 요건

 

엔터티의 정체성이 모호하면 모델을 보고 업무를 파악하기도 어려워진다.

 

데이터 베이스 차원에서 지켜야 할 무결성 

- 엔터티 무결성 : 식별자

- 참조 무결성 : 관계와 관련된 제약

- 도메인 무결성 : 속성과 관련된 제약

- 업무 무결성 : 기업에서 업무를 수행하는 방법이나 데이터를 처리하는 규칙(트리거)

 

제약 특징 주요 무결성
Primary Key - 엔터티에서 PK로 지정된 속성에는 동일한 값을 가질 수 없다.
- PK로 지정된 속성에는 널 값을 가지면 안 된다.
엔터티 무결성
Unique - 엔터티에서 Unique로 지정된 속성에는 동일한 값을 가질 수 없다.
- Unique로 지정된 속성에는 널 값을 가질 수 있다. 
- 엔터티에 여러 개의 Unique 속성이 지정될 수 있다.
엔터티 무결성

Foreign Key  - 관계 속성의 FK 값은 참조 엔터티의 PK 속성에 존재하거나 널 값이어야 한다. 
- 참조 엔터티의 PK 값이 삭제되면 참조한 모든 값은 삭제돼야 한다. 
참조 무결성

Check - 속성 값에는 특정한 범위의 값이나 특정 규칙을 따르는 값만이 존재할 수 있다.  도메인 무결성
Default  - 속성의 값이 지정되지 않을 경우, 대체할 수 있는 기본 값을 설정한다. 도메인 무결성
Data Type - 속성에 데이터 타입을 지정해 특정 형식을 유지할 수 있다 도메인 무결성
Null/ Not Null - 속성 값이 널일 수 있는지, 값이 반드시 존재해야 하는지를 지정한다. 도메인 무결성
Trigger - 속성 값이 입력되거나 수정.삭제될 때 자동으로 데이터를 처리할 수 있도록 지정한다. 업무 무결성

 

성능에 대하여 

조회 성능과 쓰기 성능

쓰기 성능은 많은 트랜잭션을 동시에 최대한 빨리 입력.수정 처리하는 것을 의미한다. 

조회 성능 문제는 대부분 인덱스로 해결한다. 

 

대부분 성능 문제라고 하면 조회 성능을 의미한다. 쓰기 성능과 비교하면 발생 빈도수도 훨씬 많으며, 동일한 성능 문제가 반복적으로 일어나는 것이 조회 성능이다. 한두 건의 소수 데이터를 조회하는 것과 다량의 데이터를 조회하는 것은 다르다. 

 

소량의 데이터에 대한 조회 성능은 주로 인덱스로 해결하며, 대량의 데이터에 대한 조회 성능은 스캔 방법과 조인 방법을 사용해서 해결할 수 있다. 조회 성능 문제를 해결할 수 있는 또 다른 유용한 방법은 비정규형을 채택하는 것이다. 

 

정규화를 할수록 엔터티가 분해되기 때문에 많은 조인이 생겨 조회 성능이 나빠지는 반면에, 중복 데이터를 사용하면 많은 인서트,업데이트가 생겨 쓰기 성능이 나빠진다.

 

데이터가 정확하냐보다는 성능이 빠르냐가 모델링의 주된 관심사일 때가 많다. 

성능 검토는 정규화를 한 상태에서 해야 한다는 점을 주의해야 한다. 성능 문제가 예상돼 먼저 비정규형으로 설계하고 추후 검토하는 방법은 잘못된 접근이다.