속성의 사전적 의미는, 어떤 사물의 성질이나 특징, 그것이 없다면 실체를 생각 또는 표현할 수 없는 것으로 정의할 수 있다.
데이터 모델의 관점에서 속성은,
인스턴스로 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위로 정의할 수 있다.
사원정보를 관리하고자 사원엔티티를 추출했을때,
사원의 정보를 하나씩 쪼갠것이 '속성'이라 할 수 있다.
추가로 쇼핑몰을 예시로 들어보자.
A라는 회원이 가입을 했다면,
우리는 아이디, 이름, 연락처, 주소, 결제수단 등의 정보를 가진 회원 DB를 갖게 된다.
이때 고객의 정보를 담는 그릇 “고객”이라는 개체 집합이 생기고, 이름, 전화번호, 주소, 고객ID와 같은 정보는 개체의 속성이 된다.
그 외에도 “상품”, “장바구니”, "배송" 등의 개체를 가질 수 있겠다.
속성의 종류는 다음과 같다.
(1) 더 작은 단위로 나눌 수 있나? — 단순속성 vs 복합속성
예를 들어 고객 가입 일시와 같은 속성은 년/월/일로 더 작게 쪼갤 수 있으므로 복합속성이다.
반면 나이와 같은 속성은 숫자를 쪼개면 의미가 없어지므로 쪼갤 수 없는 단순속성이다.
(2) 값을 더 가질 수 있나? — 단일값 vs 다중값
하나의 개체에 한 개 값만 가질 수 있을 경우 단일값이라고 한다.
고객 ID와 같은 속성은 한 개체의 고유한 성질이므로 단일값으로 지정해야한다.
반면 고객 전화 번호는 핸드폰 번호, 집 전화번호, 회사 번호와 같이 여러 개 값을 받을 수 있기 때문에 다중값이다.
-> 추가적으로, 고객 ID는 개체를 구분하는 유일한 값으로, 키 속성이라고도 한다. 키 속성은 ERD를 그릴 때 밑줄을 그어 표시한다.
(3) 다른 정보로 유추할 수 있나? — 저장속성 vs 유도속성
회원 가입할 때 첫 페이지에 오만떼만 정보를 다 입력하라고 한다면?
귀찮은 생각에 뒤로가기를 먼저 누르게 될 것이다.
그만큼 필수적인 정보만을 받아서 간결히 유지하는 것이 중요한대,
이렇게 필수적인 것을 저장속성이라고 한다. 유도속성은 저장속성으로 부터 유추할 수 있는 정보로, 생년월일이란 저장속성을 통해 유추할 수 있는 ‘나이’가 유도속성이다.
엔터티와 마찬가지로 반드시 비즈니스에서 필요로 하고 IT시스템에서 저장 및 관리하고자 하는 정보여야 한다.
Ex) 회원개체의 아이디, 비밀번호, 이름 등의 속성
정규화 이론에 따라 속성이 속해 있는 엔티티의 주식별자에 함수적 종속성을 가져야 한다.
Ex) 예약개체의 식별자인 예약번호는 예약일과 예약시간을 나타낸다.
하나의 속성에는 1개의 값만 가진다.
하나의 속성에 여러 개의 값이 있는 다중 값일 경우 별도의 엔터티를 이용하여 분리한다.
Ex) 회원개체에서 회원아이디와 이름은 각각 하나씩이다.
끝.