전화번호라는 속성은 국번과 번호등으로 구분할 수 있고, 고객주소는 시,구,동 등으로 분해가 가능한데 이처럼 두 개 이상의 속성으로 나누어질 수 있는 속성을 복합 속성(또는 결합 속성)이라고 함
복합 속성은 기본적으로 나눠서(정규화해서) 관리하는 게 원칙이나, 하나의 속성으로 관리하는 것이 효율적일 때가 있음, 이는 업무규칙에 따라서 판단할 문제(예: 통신업체는 휴대전화번호를 3자리로 상세구분하여 관리할 수 있으나, 대부분의 업무에서는 하나의 속성(복합 속성)으로 관리하는 것이 효율적임)
복합 속성을 분해할지말지를 결정할 때의 판단 기준 중 하나는 '개별적인 의미로 조회가 이뤄지는 가'임
전화번호가 국번이나, 지역번호로 조회하는 일이 거의 없다면 하나의 속성으로 관리하는 것이 효율적이며, 국번이나 지역번호로 조회하는 요건이 다수 존재한다면 별개의 속성으로 분해하는 것이 효율적임
계좌번호나 계약번호같이 속성 값에 지점코드 등의 의미를 내포한 인조식별자의 경우 복합 속성과 성격이 유사하며 인조 식별자를 체계화하여 의미를 부여하는 일은 자제할 것
코드 속성에 여러 의미가 있는 코드값을 사용하는 것도 복합 속성의 일종으로 코드속성에 맞게 분해하는 것이 원칙
텍스트 속성에 이름, 전화번호, 주소 등 특정도메인으로 도출할 수 있는 데이터가 존재하면 개별 속성으로 분해하는 것이 바람직
다가 속성
한 속성에 유사한 종류의 여러 값이 존재하는 속성 <-> 단일 값 속성은 하나의 값만이 존재하는 속성
고객 엔터티의 주민등록번호 속성은 하나의 값만을 가짐(단일 값 속성), 전화번호 속성은 집전화번호, 사무실전화번호, 휴대폰번호 등의 여러 값을 가질 수 있음(다가 속성)
위 모델에서 전화번호, 우편주소, 취미, 가족속성이 다가 속성
위 모델은 제1정규화를 수행한 모델
하나의 속성에 쉼표, 세미콜론 등의 구분자를 이용해 여러개의 값을 관리하는 다가속성도 존재(예 : 100, 101, 102) -> 업데이트나 정렬등의 작업에 불리하므로 사용하지 않는 것을 권장
'1101' 등처럼 비트연산을 이용해 1이면 true, 0이면 false 형태로 데이터를 관리하는 것도 다가속성임
집전화번호, 사무실 전화번호 등을 고객전호번화 등과 같이 물리적으로 하나의 값을 가지나 의미상으로 여러 종류의 값을 가지는 경우도 다가 속성 -> 바람직하지 않으며, 분해하는 것이 원칙
한 속성이 배타적인 의미를 나타낼 때도 다가 속성과 유사함(예 : 가입일자, 탈퇴일자를 구분코드(가입, 탈퇴)와 날짜 속성을 사용하는 경우) -> 속성을 분해하여 둘 중 하나의 값만 입력하는 것이 바람직
복합 속성, 다가 속성의 정규화
복합 속성, 다가 속성이 모델링하는 과정 중에서 발생할 수 있으나, 최종 물리모델에서는 존재해서는 안됨
최종 물리 모델에서는 여러 개의 속성으로 분해하거나, 별도의 1정규형 엔터티로 분리해야 함