💡 핵심 인사이트
도메인(Domain)은 관계형 데이터베이스에서 **하나의 속성(열)이 가질 수 있는 '합법적인 원자값(Atomic Value)들의 전체 집합'**을 의미합니다.
사용자가 엉뚱한 데이터를 입력하여 데이터 무결성이 깨지는 것을 막아주는 '보이지 않는 울타리(제약 조건)' 역할을 합니다.
Ⅰ. 도메인의 개념과 필요성
만약 성별이라는 속성(컬럼)이 있다고 가정해 봅시다.
여기에 누군가는 "남", 다른 사람은 "M", 또 다른 사람은 "Male", 심지어 "강아지"라고 적을 수도 있습니다. 이렇게 데이터가 파편화되면 나중에 "남자 고객 수"를 집계할 때 시스템이 엉망이 됩니다.
이를 막기 위해 **"성별 속성에는 오직 {'남', '여'}라는 두 가지 값만 들어올 수 있다"**라고 수학적인 집합(범위)을 선언해 두는 것, 이 허용된 값들의 풀(Pool)이 바로 도메인입니다.
Ⅱ. 도메인의 주요 특성
- 원자성 (Atomicity): 도메인에 속한 모든 값은 더 이상 쪼갤 수 없는 기본 단위(원자값)여야 합니다.
- 데이터 타입과 길이: 실무(SQL)에서 도메인은 보통 '데이터 타입'과 '길이'로 물리적 구현이 됩니다.
- 예:
나이속성의 도메인은 "0 이상의 정수(INT)" - 예:
이름속성의 도메인은 "최대 10글자의 문자열(VARCHAR(10))"
- 예:
- 논리적 유효성 검사: 단순히 숫자냐 문자냐를 넘어서, 비즈니스 로직에 맞는 값인지를 검사하는 CHECK 제약조건으로 확장됩니다.
- 예: "성적(Grade)의 도메인은 {A, B, C, D, F} 중 하나여야 한다."
Ⅲ. 관계 대수와 도메인
도메인은 테이블 간의 조인(Join) 연산을 할 때 매우 중요한 기준이 됩니다.
- 두 릴레이션을 조인하려면 공통된 속성이 있어야 하는데, 이때 이름이 같다고 무조건 조인할 수 있는 것이 아닙니다. 두 속성의 도메인(값의 성격과 타입)이 완벽하게 일치해야만 의미 있는 조인이 성립합니다.
- 예를 들어, A 테이블의 '부서 번호(정수형: 10, 20)'와 B 테이블의 '사원 번호(정수형: 10, 20)'는 숫자라는 데이터 타입은 같지만, '의미하는 바(도메인)'가 완전히 다르기 때문에 이 둘을 등호(=)로 조인하는 것은 논리적 오류입니다.
📢 섹션 요약 비유: 도메인은 식당의 **'메뉴판(선택지)'**과 같습니다. 손님이 '음료수' 속성을 주문할 때 "콜라, 사이다, 환타"라는 메뉴판(도메인) 안에서만 고를 수 있지, 갑자기 "된장찌개 주세요"라고 엉뚱한 값을 입력하는 것을 메뉴판이 원천 차단하여 주문의 정상성(무결성)을 지켜줍니다.