주문 O1001 을 설명하려면 주문번호, 주문일자, 고객번호, 배송지 주소, 결제금액이 필요하다. 이 하나하나가 속성이다. 엔터티가 "무엇을 관리하나"라면 속성은 "그것의 무엇을 기록하나"다.
- 업무에서 필요로 하는 정보다.
- 의미상 더 이상 분리되지 않는 최소의 데이터 단위다.
- 엔터티를 설명하고 인스턴스의 구성 요소가 된다.
"의미상"이라는 말이 중요하다. 주문일자 2026-11-03 은 글자로는 연·월·일로 쪼갤 수 있다. 그러나 업무에서 주문일자를 하나의 의미로 쓴다면 쪼개지 않은 하나의 속성이다.
| 관계 | 규칙 | 쇼핑몰 예 |
|---|
| 엔터티 – 인스턴스 | 한 엔터티는 두 개 이상의 인스턴스를 가진다 | 주문 엔터티에 O1001, O1002 … |
| 엔터티 – 속성 | 한 엔터티는 두 개 이상의 속성을 가진다 | 주문번호, 주문일자, 결제금액 … |
| 속성 – 속성값 | 한 속성은 한 인스턴스에서 하나의 속성값만 가진다 | O1001 의 결제금액은 35,000 하나 |
주문번호 주문일자 고객번호 결제금액 ← 속성
인스턴스 1 → O1001 2026-11-03 C001 35,000
인스턴스 2 → O1002 2026-11-03 C002 12,000
↑ 속성값
- 마지막 규칙은 원자값 원칙이다. 한 칸에 값이 하나만 들어간다.
- 고객의 연락처가 집·휴대폰·회사 셋이라면
연락처 칸에 셋을 넣지 않는다. 연락처를 별도 엔터티로 빼거나, 의미가 서로 다르면 속성 셋으로 나눈다. 이 판단은 1차 정규화로 이어진다(Week 2).
| 분류 | 뜻 | 쇼핑몰 예 |
|---|
| 기본 속성 | 업무 분석에서 바로 뽑아낸 원래 있는 속성. 가장 많다 | 상품명, 상품가격, 주문일자, 주문수량 |
| 설계 속성 | 업무상 원래 없지만 설계하며 새로 만든 속성. 코드나 일련번호가 여기 든다 | 주문상태코드, 주문상품 일련번호 |
| 파생 속성 | 다른 속성에서 계산하거나 변형해 얻는 속성 | 주문총금액(수량 × 단가의 합), 고객 누적구매액 |
- 설계 속성은 "업무 규칙을 단순하게 표현하려고" 만든다. "배송 준비 중, 배송 중, 배송 완료"를
10, 20, 30 코드로 정의하면 설계 속성이다.
- 기본 속성처럼 보여도 코드로 다시 정의했거나 일련번호처럼 시스템이 부여한 것이면 설계 속성으로 본다.
[주문상품]
주문번호 상품 수량 단가
O1001 펜 2 1,000
O1001 노트 1 3,000
│ 2 × 1,000 + 1 × 3,000
▼
[주문]
주문번호 주문총금액(파생)
O1001 5,000
- 주문총금액은 주문상품의
수량 × 단가를 더한 값이다. 주문상품 수량을 3으로 고쳤는데 주문총금액을 함께 고치지 않으면 두 값이 어긋난다.
- 그래서 파생 속성은 데이터 정합성을 해치기 쉽다. 꼭 필요한 경우에만 정의하고, 정의하면 원천 속성이 바뀔 때 함께 갱신되도록 규칙을 둔다.
- 조회 성능 때문에 일부러 파생 속성을 두는 것은 반정규화의 한 형태다.
⚠️ 파생 속성은 "가급적 적게" 정의하는 것이 원칙이다. "성능을 위해 가능한 한 많이 정의한다"는 보기는 틀린 설명이다. 계산값을 저장할수록 갱신을 빠뜨릴 곳이 늘어난다.
| 분류 | 뜻 | 주문 엔터티 예 |
|---|
| PK 속성 (Primary Key) | 엔터티의 인스턴스를 식별할 수 있는 속성 | 주문번호 |
| FK 속성 (Foreign Key) | 다른 엔터티와의 관계에서 포함된 속성 | 고객번호 (고객 엔터티에서 옴) |
| 일반 속성 | PK·FK 가 아닌 나머지 속성 | 주문일자, 배송지주소, 결제금액 |
- 같은 고객번호도 고객 엔터티에서는 PK 속성이고, 주문 엔터티에서는 FK 속성이다. 분류는 어느 엔터티 안에서 보느냐에 따라 달라진다.
- PK·FK 와 식별자의 자세한 분류는 Week 2 Day 1 에서 다룬다.
교재에 따라 이 분류를 두 가지 축으로 나눠 설명한다. 이름이 비슷해 함께 정리한다.
| 기준 | 분류 | 뜻 | 쇼핑몰 예 |
|---|
| 쪼갤 수 있나 | 단순형 (단일) 속성 | 더 작은 단위로 나눌 수 없다 | 주문수량, 상품가격 |
| 복합 속성 | 여러 의미 단위로 나눌 수 있다 | 주소(시·구·동·상세주소), 고객명(성·이름) |
| 값이 몇 개인가 | 단일값 속성 | 인스턴스당 값이 하나 | 생년월일 |
| 다중값 속성 | 인스턴스당 값이 여럿일 수 있다 | 고객의 여러 배송지, 상품의 여러 색상 |
- 복합 속성을 나눌지 말지는 업무가 그 부분을 따로 쓰느냐로 정한다. 구 단위 배송 통계를 낸다면 주소를 시·구·동으로 나눈다.
- 다중값 속성은 한 칸에 여러 값을 넣을 수 없으므로 관계형 모델에서는 별도 엔터티로 분리한다. 고객의 여러 배송지는 "고객배송지" 엔터티가 된다.
- 교재에 따라 "단일 속성 / 복합 속성 / 다중값 속성"처럼 한 줄로 묶어 소개하기도 한다. 용어보다 "나눌 수 있나"와 "여러 값인가"를 구분하는 것이 판단 기준이다.
도메인은 각 속성이 가질 수 있는 값의 범위다.
| 속성 | 도메인 예 |
|---|
| 주문수량 | 1 이상 999 이하의 정수 |
| 주문상태코드 | 10, 20, 30, 40 중 하나 |
| 고객명 | 최대 50자의 문자열, NULL 불가 |
| 주문일자 | 날짜 타입 |
- 도메인에는 데이터 타입, 크기, 제약 조건이 함께 들어간다.
- 물리 모델에서는 칼럼의 타입(
NUMBER, VARCHAR2(50))과 CHECK·NOT NULL 제약으로 구현된다.
- 같은 도메인을 여러 속성이 공유할 수 있다. 주문일자·배송일자·결제일자는 모두 "날짜" 도메인을 쓴다. 도메인을 한 번 정의해 두면 속성마다 타입이 달라지는 문제를 막는다.
| 원칙 | 좋은 예 | 나쁜 예 |
|---|
| 현업 업무에서 쓰는 이름 | 결제금액 | PayAmtVal |
| 서술식 이름 쓰지 않기 | 주문일자 | 고객이주문한날짜 |
| 약어 사용 제한 | 배송지주소 | 배지주 |
| 전체 모델에서 유일한 이름 권장 | 주문일자, 배송일자 | 일자, 일자 |
- 속성 이름은 명사형으로 짓는다. 수식어·소유격이 붙은 서술형은 피한다.
- 유일한 이름은 "권장"이다. 서로 다른 엔터티에
일자라는 같은 이름이 있으면 SQL 조인 결과에서 무엇이 무엇인지 헷갈리고, 반정규화로 칼럼이 합쳐질 때도 충돌한다.
내일은 엔터티 사이를 잇는 관계와 그 표기법을 본다.
- 속성(Attribute) : 엔터티를 설명하는, 의미상 더 쪼갤 수 없는 데이터 단위. 테이블의 칼럼 후보.
- 속성값 : 한 인스턴스에서 속성이 갖는 실제 값. 한 칸에 하나만 들어간다.
- 설계 속성 : 업무에는 원래 없지만 코드·일련번호처럼 설계하며 새로 만든 속성.
- 파생 속성 : 다른 속성을 계산하거나 변형해 얻는 속성. 합계·총액 같은 것.
- 복합 속성 : 주소처럼 더 작은 의미 단위로 나눌 수 있는 속성.
- 다중값 속성 : 한 인스턴스가 값을 여러 개 가질 수 있는 속성. 별도 엔터티로 분리한다.
- 도메인(Domain) : 속성이 가질 수 있는 값의 범위. 타입·크기·제약을 포함한다.
- 정합성 : 서로 관련된 데이터가 어긋나지 않고 맞아떨어지는 상태.
📝 연습 문제
선택지를 클릭하면 정답·해설이 펼쳐집니다.
속성에 대한 설명으로 가장 적절하지 않은 것은?
쇼핑몰 주문 엔터티에서 "주문상품의 수량과 단가를 곱해 합산한 주문총금액"은 특성에 따른 속성 분류 중 무엇에 해당하는가?
다음 중 도메인에 대한 설명으로 가장 적절한 것은?
파생 속성에 대한 설명으로 가장 적절한 것은?
고객 한 명이 여러 개의 배송지를 등록할 수 있을 때, 이를 관계형 데이터 모델로 표현하는 방법으로 가장 적절한 것은?