속성은 엔티티 성격을 상세히 기술하는 요소이기도 합니다. 그래서 속성을 보면 엔티티 성격이나 특성을 알 수 있어야 합니다. 엔티티가 상세화되고 속성이 모두 정이돼야 엔티티가 온전해집니다.
속성은 데이터 값을 저장하는 저장소입니다. 데이터를 관리하는 독립된 가장 작은 단위로 연관성 있는 속성은 같은 엔티티에 존재해야 합니다. 연관된 속성을 묶는 과정이 정규화입니다.
결정자 역할을 하는 속성과 종속자 역할을 하는 속성이 정해지면 엔티티 정의도 끝납니다. 결정자 속성과 종속자 속성이 모여서 엔티티가 됩니다.
결정자 속성에는 엔티티 본질이나 태생에 대한 내용 종속자 속성은 엔티티 특성을 묘사하는 역할을 갖습니다. 엔티티 특성은 종속자 속성에 의해 열거되며 만약 A 속성에 종속자가 존재하면 A 속성은 결정자 이므로 독립된 엔티티로 도출해야 합니다.
속성 도출에는 몇 가지 원칙이 있습니다. 원자값이어야 합니다. 원자값은 더 분해되지 않는 최소 단위로 이루어진 값입니다.
속성을 정의할 때 값이 반드시 존재하는지 파악하는 것은 속성의 성격을 이해하는데 중요합니다. 인스턴스가 생성될 때 속성 값이 반드시 존재하는지와 Null 이 허용되는지를 정의하는 것이 바람직합니다.
입력 시점에 값을 모른다면 Null 값을 입력하는 것이 원칙입니다. 입력된 값에 나중에 변경될 수 있는지 정의하는 것도 의미가 있습니다. 값이 변하지 않는 속성이라면 엔티티 중복 속성으로 사용해도 부작용이 줄어듭니다. 중복 속성의 여러 부작용 중 하나는 원천 값이 변경되면 중복으로 사용한 값도 전부 변경되어야 합니다. 중복 속성을 채택하는 것 자체가 바람직하지 않지만 변하지 않는 값이라면 중복해서 사용하는 것이 필요할 수도 있습니다.
기초속성, 관계속성, 추출속성, 시스템 속성 4가지로 구분할 수 있습니다.
기초속성
모든 속성이 엔티티를 묘사하는 요소지만 그 중에서도 엔티티 본질을 잘 설명해주는 속성이 기초 속성입니다. 업무 식별자와 후보 식별자, 엔티티 성격을 대표할 수 있는 핵심 속성, 업무를 정의하는 코드 속성 등이 기초 속성입니다.
주문 엔티티의 주문번호, 고객번호, 주문일자, 배송요청일자, 배송지 주소 등이 기초 속성입니다. 주문 상품 엔티티에서 주문번호, 상품번호, 주문수량 등이 기초 속성입니다. 주문 엔티티의 고객번호 속성과 주문상품 엔티티의 상품번호 속성은 기초 속성이면서 관계 속성 입니다.
주문 테이블 : 주문번호 (PK) / 고객번호 / 주문일자 / 배송요청일자 / 주문총금액 / 배송지주소 / 담당 직원번호
주문상품 테이블 : 주문번호 (FK) / 상품번호 (PK) / 주문단가 / 주문수량 / 주문금액 / 등록 직원번호 / 등록시각
기초 속성은 엔티티 오너십과 연관됩니다. 여러 종류의 오너십이 있고 그 중 특정 엔티티가 어떤 주제 영역에 속해야 하는지 의미하는 것이 모델 오너십 입니다. 모델 오너십을 정하는 기준이 기초 속성이 될 수 있는데 기초 속성의 값을 주로 생성하는 영역에서 모델 오너십을 가지는 것이 일반적입니다. 데이터 오너십을 관리하면 마찬가지로 기초 속성의 데이터를 생성하는 조직에서 가지게 될 것입니다. 만약 엔티티에서 기초 속성을 전부 삭제하고 나면 나머지 속성만으로 해당 엔티티가 어떤 데이터를 관리하는지 알 수 없게 됩니다. 그만큼 엔티티 본질과 연관된 중요 속성이 기초 속성입니다.
관계속성
하나의 엔티티에는 타 엔티티와 관계가 다수 존재하여 관계 속서도 중요한 종류의 속성입니다. 관계 속성은 당연히 타 엔티티와 연관성을 나타냅니다.
관계 속성은 다른 엔티티의 주 식별자 속성입니다. 보통 참조되는 엔티티는 핵심적인 역할을 하는 엔티티인 경우가 많습니다. 참조되는 엔티티의 주 식별자 속성이므로 관계속성 또한 핵심적인 속성입니다.
추출속성
원문 속성의 값을 연산해서 생성할 수 있는 속성입니다. 주문 엔티티의 주문총금액 속성과 주문 상품 엔티티의 주문금액 속성이 추출 속성입니다. 주문총금액 속성은 주문상품 엔티티의 주문금액 속성의 합계이며 주문금액 속성은 주문 단가와 수량을 곱하면 알 수 있는 금액입니다.일반적으로 여러 인스턴스에서 추출하는 주문총금액 속성은 채택을 검토해야 하며 같은 인스턴스에서 계산하는 주문금액 속성은 채택하지 않는 것을 원칙으로 합니다.
추출 속성과 항상 유사하게 사용되는 것이 중복 속성입니다. 말 그대로 원본 속성을 그대로 복사해서 사용하는 속성입니다.
추출 속성을 사용하는 목적은 데이터 조회 시간 단축을 위해서입니다. 하지만 데이터 정합성을 맞춰야 하는 부가적인 부하가 필요해 조회 속도가 문제 되지 않는 한 사용하지 않는 것을 원칙으로 해야 합니다. 추출 속성을 채택할 때는 반드시 정합성을 유지시킬 수 있는 방안이 마련돼야 합니다.
시스템 속성
기초, 관계, 추출 속성 외 자주 사용하는 속성이 시스템 속성입니다.
시스템 속성은 전체 엔티티에 존재하는 속성으로 주로 데이터에 대한 추적, 감시를 위해 사용합니다. 누가, 언제 생성하고 수정했는지 추적 데이터는 당장 필요 없을 수 있지만 언젠가 필요해질 수 있는 데이터여서 중요할 수 있습니다.
시스템 속성은 가능한 최소한으로 채택하는게 최선입니다. 속성을 채택하면 모델 관리를 불편하게 하고 성능에도 악영향을 주고 미래에 발생할 가능성이 있는 감시 요건을 위해 현 시스템이 불편하게 돼서는 안됩니다. 그리고 시스템 속성은 데이터 추적 용도로만 사용하는 것이 바람직합니다.
여기서 도메인은 속성과 연관된 도메인입니다. 도메인은 속성에 허용된 유요한 값의 집합을 의미합니다. 예를 들어 정수의 집합이나 세 자리 문자의 집합 등을 의미합니다. 유효한 값이라는 의미에는 데이터 타입과 같이 허용값, 기본값, 값의 포맷 등이 포함됩니다.
일반적으로 속성명은 도메인으로 끝나 도메인을 사용하면 속성을 일관되게 정의할 수 있습니다. 도메인 속성을 분석할 때 분류 기준이 됩니다.
실무에서 날짜를 의미하는 속성에 어떤 데이터 타입을 사용해야 할지 이야기가 많습니다. 날짜 도메인 데이터 타입을 Varchar(8)로 할지 Date로 할지 고민하지만 단순하게 날짜를 의미하므로 Date 데이터 타입을 사용해야 한다는 것이 기본 원칙입니다. 그래야 온전한 데이터가 돼 무경성을 지키게 됩니다. 저장되는 데이터 성격 자체가 도메인이 돼야 합니다. 숫자를 저장하는 속성은 숫자 도메인을 사용해야지 문자 도메인을 사용하면 안됩니다.
도메인의 데이터 포맷 : yyyy-mm-dd
도메인의 데이터 타입 : date
고객번호 : 1 부터 99999까지 숫자
고객명 : 최대 10자
가입금액 : 0원 부터 999999999원 까지 금액
가입일자 : 1990년 1월 1일 부터 9999년 12월 31일 까지 날짜
~여부 : Yes, No
요일 : 월 ~ 일
속성명, 속성코드 모델, 널(Null) (0) | 2024.04.22 |
---|---|
엔티티 복합속성 다가속성 (0) | 2024.04.09 |
엔티티 주 식별자 상속, PK 제약, 유니크 인덱스 (0) | 2024.04.03 |
엔티티 주 식별자 선정 방법 (0) | 2024.04.01 |
엔티티 식별자 (후보, 대리, 주, 외래, 슈퍼, 인지) (1) | 2024.03.25 |
댓글 영역