1과목 · 데이터 모델링의 이해 › 1-1. 데이터 모델링의 이해

속성

속성(Attribute)은 엔터티가 가진 성질을 나타내는 가장 작은 데이터 단위다. 분류 기준이 여러 가지이므로 각 기준과 그에 속한 종류를 정확히 짝지어 기억해야 한다.

속성의 개념

속성은 업무에서 필요로 하는 정보 중 의미상 더 이상 분리되지 않는 최소의 데이터 단위다.

  • 엔터티를 설명하고, 인스턴스를 구성하는 요소
  • 물리 모델에서는 컬럼으로 구현된다

속성인지 판단하는 기준

  • 업무 필요성 업무에서 관리할 필요가 있는가
  • 분리 불가 의미상 더 쪼갤 수 없는가. "주소"를 시·구·동으로 나눠 관리할 업무 요구가 있으면 각각이 속성이다.
  • 설명 정보 엔터티를 설명하는 정보인가
  • 단일 값 하나의 인스턴스에서 하나의 값만 가지는가

시험 포인트: 속성 판단 기준은 "업무 요구"가 우선이다. 같은 "주소"라도 업무에서 분리해 관리할 필요가 없으면 하나의 속성으로 둔다.

엔터티, 인스턴스, 속성, 속성값의 관계

표 하나로 네 용어를 한 번에 짚을 수 있다. 표 전체가 엔터티, 가로 한 줄이 인스턴스, 세로 한 줄이 속성, 칸 하나가 속성값이다.

사원번호 이름 부서 1001 홍길동 영업 1002 김철수 개발 속성 (컬럼) 속성값 인스턴스 (행) 사원 엔터티 (전체 집합)
엔터티: 사원 / 인스턴스: 1001 행, 1002 행 / 속성: 사원번호, 이름, 부서 / 속성값: 1001, 홍길동, 영업 등
관계 설명
엔터티 : 인스턴스 한 엔터티는 2개 이상의 인스턴스를 가짐
엔터티 : 속성 한 엔터티는 2개 이상의 속성을 가짐
인스턴스 : 속성 한 인스턴스는 엔터티에 정의된 모든 속성을 가짐
속성 : 속성값 한 인스턴스에서 하나의 속성은 하나의 속성값만 가짐

한 칸에 값이 여러 개라면

하나의 속성에 여러 값이 들어가야 한다면 다중값 속성이며, 별도 엔터티로 분리하는 것이 원칙이다 (제1정규형).

특성에 따른 분류

"원래 업무에 있던 값인가, 설계자가 만든 값인가, 계산한 값인가"로 나눈다.

  • 📝 기본 속성 (Basic) 업무 분석을 통해 바로 정의되는 본래의 속성. 대부분의 속성이 여기에 해당한다. 예: 제품명, 가격, 제조일자
  • 🛠️ 설계 속성 (Designed) 업무상 필요하지는 않지만 설계 과정에서 새로 만들거나 변형한 속성. 코드성 데이터, 일련번호 등. 예: 상품코드, 주문일련번호, 상태코드
  • 🧮 파생 속성 (Derived) 다른 속성으로부터 계산·변형되어 만들어진 속성. 예: 주문총액, 합계, 평균점수, 나이

파생 속성 유의점

파생 속성은 최소한으로

  • 원본 값이 바뀌면 파생 값도 함께 갱신해야 하므로 데이터 정합성 관리가 필요하다
  • 가급적 적게 정의하는 것이 좋으며, 조회 성능 등을 위해 꼭 필요할 때만 사용한다
  • 물리 설계 단계의 반정규화 결과로 추가되는 경우가 많다
-- 파생 속성 없이 조회 시 계산
SELECT ORDER_NO, SUM(QTY * UNIT_PRICE) AS TOTAL_AMT
  FROM ORDER_ITEM
 GROUP BY ORDER_NO;

-- 파생 속성(TOTAL_AMT)을 주문 테이블에 둔다면
-- ORDER_ITEM 변경 시마다 ORDER.TOTAL_AMT도 함께 갱신해야 정합성이 유지됨

시험 포인트: "일련번호, 코드"처럼 업무에 원래 없던 값을 설계자가 만든 것은 설계 속성, "합계, 평균, 총액"처럼 계산된 값은 파생 속성이다. 파생 속성은 가능한 한 적게 정의한다는 점도 출제된다.

구성 방식에 따른 분류

분류 설명
PK 속성 (Primary Key) 엔터티의 인스턴스를 유일하게 식별하는 속성
FK 속성 (Foreign Key) 다른 엔터티와의 관계에서 포함된 속성 (부모의 식별자를 상속)
일반 속성 PK, FK에 포함되지 않는 나머지 속성

ERD에서 보면 다음과 같다. 사원의 부서번호는 부서로부터 받아온 FK 속성이고, 사원명은 일반 속성이다.

erDiagram
  부서 ||--o{ 사원 : "포함한다"
  부서 {
    string 부서번호 PK
    string 부서명
  }
  사원 {
    string 사원번호 PK
    string 사원명
    string 부서번호 FK
  }

하나의 속성이 PK이면서 동시에 FK일 수도 있다. 식별 관계에서 자식 엔터티가 부모의 식별자를 자기 PK의 일부로 받는 경우다 (식별자 참고).

분해 여부와 값의 개수에 따른 분류

단일 속성과 복합 속성

  • 단일 속성 (Simple) 하나의 의미로만 구성되어 더 이상 분해되지 않는다. 예: 회원번호, 이름, 나이
  • 복합 속성 (Composite) 여러 의미 있는 하위 속성으로 분해될 수 있다. 예: 주소(시, 구, 동, 상세주소), 날짜(연, 월, 일)

단일값 속성과 다중값 속성

  • 단일값 속성 (Single-Valued) 하나의 인스턴스에서 하나의 값만 가진다. 예: 주민등록번호, 생년월일
  • 다중값 속성 (Multi-Valued) 하나의 인스턴스에서 여러 값을 가질 수 있다. 예: 전화번호(집, 휴대폰, 회사), 차량 색상

다중값 속성은 그대로 두면 하나의 속성에 여러 값이 들어가므로 별도 엔터티로 분리하여 1:M 관계로 표현한다.

erDiagram
  회원 ||--o{ 회원전화번호 : "가진다"
  회원 {
    string 회원번호 PK
    string 이름
  }
  회원전화번호 {
    string 회원번호 PK
    string 전화구분 PK
    string 전화번호
  }

도메인

도메인(Domain)은 각 속성이 가질 수 있는 값의 범위다. 엔터티 내에서 속성에 대한 데이터 타입과 크기, 제약사항을 정의하는 것으로, 다음을 포함한다.

  • 데이터 타입, 길이(크기), 허용 값, 제약조건(NOT NULL, CHECK 등)
속성 도메인 예
학점 0.0 이상 4.5 이하의 숫자
성별 'M' 또는 'F'
나이 0 이상의 정수
CREATE TABLE STUDENT (
    STU_NO   VARCHAR2(10) PRIMARY KEY,
    GENDER   CHAR(1)      CHECK (GENDER IN ('M', 'F')),
    GPA      NUMBER(2,1)  CHECK (GPA BETWEEN 0 AND 4.5)
);
-- 데이터 타입, 길이, CHECK 제약으로 도메인을 물리적으로 구현

실무에서는 공통 도메인

"금액", "일자", "코드"처럼 공통 도메인을 정의해 여러 속성에 일관되게 적용한다 (표준화).

시험 포인트: "속성이 가질 수 있는 값의 범위"를 묻는 용어는 도메인이다. 도메인은 데이터 타입·크기·제약조건을 함께 포함하는 개념이다.

속성 명명 규칙

규칙 설명
현업 업무 용어 사용 실제 업무에서 쓰는 이름을 사용
서술식 이름 지양 "고객이 주문한 날짜"보다 "주문일자"처럼 명사형으로
약어 사용 지양 의미 혼란 방지
수식어·소유격 지양 "고객의 이름"보다 "고객명"
전체 모델에서 유일한 이름 권장 같은 이름이 다른 의미로 쓰이지 않도록 하여 반정규화·통합 시 혼란 방지

핵심 요약

  • 속성은 업무상 필요하고 의미상 더 이상 분리되지 않는 최소 데이터 단위
  • 한 인스턴스에서 한 속성은 하나의 속성값만 가짐
  • 특성 분류: 기본 / 설계(코드, 일련번호) / 파생(계산값, 정합성 주의, 최소화)
  • 구성 방식 분류: PK / FK / 일반 속성
  • 분해 여부: 단일 / 복합
  • 값의 개수: 단일값 / 다중값 (다중값은 별도 엔터티로 분리)
  • 도메인은 속성이 가질 수 있는 값의 범위 (타입, 크기, 제약조건)
  • 명명: 현업 용어, 서술식·약어·소유격 지양, 모델 전체에서 유일하게

이 절 음성 강의 듣기