CertNote/ 출퇴근 학습 노트
로드맵
SQLD · 개발자SQL 개발자 (SQLD)
  • Week 1
    • 1.데이터 모델링 개요
    • 2.3단계 스키마와 모델링 단계
    • 3.엔터티
    • 4.속성
    • 5.관계
  • Week 2
    • 1.식별자
    • 2.정규화
    • 3.반정규화
    • 4.관계와 조인, 모델이 표현하는 트랜잭션
    • 5.Null 속성과 본질식별자 vs 인조식별자
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← SQLD/Week 2/Day 1

기준: SQLD 출제 기준·오류 제보

SQLD· AssociateWeek 2 · Day 1읽기 약 8분
핵심 정리
  • 식별자는 엔터티 안에서 인스턴스 하나를 다른 것과 구분하는 속성(또는 속성의 묶음)이다.
  • 주식별자의 네 가지 특징은 유일성 · 최소성 · 불변성 · 존재성이다.
  • 분류 기준은 넷이다. 대표성(주/보조) · 생성 여부(내부/외부) · 속성 수(단일/복합) · 대체 여부(본질/인조).
  • 부모의 주식별자가 자식의 주식별자 일부가 되면 식별 관계, 일반 속성으로만 내려가면 비식별 관계다.
  • 식별 관계만 고집하면 자식의 키가 길어지고, 비식별 관계만 고집하면 부모 정보를 얻으려는 조인이 늘어난다.

Day 1 - 식별자

식별자란 무엇인가

사원 테이블에 "SMITH"라는 이름이 두 번 들어오면 어느 SMITH의 급여를 고칠지 정할 수 없다. 그래서 엔터티마다 행 하나를 콕 집어 낼 이름표가 필요하다. 그 이름표가 식별자다.

  • 식별자는 논리 모델의 용어다. 물리 모델로 내려가면 키(Key), 특히 기본키(PK)가 된다.
  • 엔터티 하나에는 식별자 후보가 여럿 있을 수 있다. 그중 대표로 고른 것이 주식별자다.
  • EMP에서는 EMPNO가 주식별자다. ENAME은 지금 데이터에서는 겹치지 않지만, 업무 규칙상 동명이인을 막을 수 없다.

SCOTT 스키마의 EMP에서 값의 겹침을 세어 보면 다음과 같다.

SELECT COUNT(*) AS CNT, COUNT(DISTINCT EMPNO) AS EMPNO_CNT,
       COUNT(DISTINCT ENAME) AS ENAME_CNT, COUNT(DISTINCT JOB) AS JOB_CNT
FROM EMP;
       CNT  EMPNO_CNT  ENAME_CNT    JOB_CNT
---------- ---------- ---------- ----------
        14         14         14          5
  • JOB은 14행에 값이 5개뿐이라 식별자가 될 수 없다.
  • ENAME도 지금은 14개로 겹치지 않는다. 그러나 현재 데이터가 우연히 유일한 것과 업무상 반드시 유일한 것은 다르다. 식별자는 뒤쪽을 기준으로 고른다.

주식별자의 네 가지 특징

특징뜻EMP로 본 예
유일성주식별자로 엔터티 안의 모든 인스턴스를 유일하게 구분한다같은 EMPNO를 가진 사원은 둘일 수 없다
최소성주식별자를 이루는 속성 수가 유일성을 지키는 최소한이다EMPNO만으로 충분하므로 (EMPNO, ENAME)은 최소성 위반
불변성한 번 정해진 주식별자 값은 자주 바뀌지 않아야 한다부서를 옮겨도 사번은 그대로다
존재성주식별자 값은 반드시 있어야 한다(NULL 불가)사번 없는 사원 행은 만들 수 없다
  • 최소성은 "속성이 하나여야 한다"는 뜻이 아니다. 주문상품처럼 (주문번호, 상품번호) 두 개가 있어야 유일해지면 두 개가 최소다.
  • 존재성은 물리 모델에서 PK 칼럼의 NOT NULL 제약으로 나타난다.

⚠️ 함정: "이름이 지금 겹치지 않으니 유일성을 만족한다"는 보기는 틀린다. 유일성은 업무 규칙으로 보장되어야 한다. 또 "주식별자는 단일 속성이어야 한다"도 틀린 서술이다. 복합 주식별자도 최소성을 만족할 수 있다.

주식별자를 고를 때 보는 기준

후보가 여럿이면 다음 기준으로 하나를 고른다.

  • 해당 업무에서 조회와 검색에 많이 쓰는 속성을 고른다. 사원은 사번, 주문은 주문번호다.
  • 명칭이나 내역처럼 이름으로 기술되는 속성은 피한다. 부서명·상품명은 바뀌고 겹친다.
  • 속성 수가 너무 많지 않게 한다. 복합 식별자가 대여섯 개로 늘어나면 인조식별자(Day 5)를 검토한다.

식별자의 분류

같은 식별자도 보는 기준에 따라 이름이 네 번 붙는다. 기준과 짝을 함께 기억해야 보기를 가를 수 있다.

분류 기준종류뜻
대표성주식별자엔터티를 대표하고, 다른 엔터티와 참조 관계를 맺을 수 있다
보조식별자인스턴스를 구분할 수는 있지만 대표성이 없어 참조 관계 연결에 쓰지 않는다
생성 여부내부식별자엔터티 내부에서 스스로 만들어진 식별자
외부식별자다른 엔터티와의 관계를 통해 받아 온 식별자
속성 수단일식별자속성 하나로 구성
복합식별자속성 둘 이상으로 구성
대체 여부본질식별자업무에 의해 만들어진 식별자
인조식별자업무적으로는 없지만 인위적으로 만든 식별자(일련번호 등)

EMP와 DEPT에 대입하면 다음과 같다.

속성분류
EMP.EMPNO주식별자 · 내부식별자 · 단일식별자 · 본질식별자
EMP.DEPTNODEPT에서 관계로 받아 온 외부식별자(물리 모델의 FK)
주민등록번호를 사원 엔터티에 둔 경우사원을 구분할 수 있지만 대표로 쓰지 않는 보조식별자
주문상품의 (주문번호, 상품번호)복합식별자
  • 외부식별자는 자기 엔터티의 주식별자를 이루지 않을 수도 있다. EMP.DEPTNO는 외부식별자이지만 EMP의 주식별자에 들어 있지 않다.
  • 교재에 따라 외부식별자를 "외래 식별자"로 부르기도 한다. 물리 모델로 가면 외래키(FK)가 된다.

보조식별자를 따로 두는 이유

  • 사원 엔터티에서 주민등록번호도 사람을 구분한다. 그래도 주식별자는 사번이다. 사번이 사내 업무 전체에서 참조하는 값이기 때문이다.
  • 보조식별자는 검색 조건이나 유일 제약(UNIQUE) 으로 쓰인다. 다른 엔터티가 이 값을 FK로 받아 가지는 않는다.

식별 관계와 비식별 관계

부모 엔터티의 주식별자는 관계를 따라 자식에게 내려간다. 내려간 속성이 자식 안에서 어떤 역할을 하는지에 따라 관계 이름이 갈린다.

[식별 관계]                              [비식별 관계]
 
 주문                주문상품              DEPT              EMP
┌──────────┐       ┌────────────┐       ┌──────────┐      ┌──────────┐
│ 주문번호 PK│──────<│ 주문번호 PK│       │ DEPTNO PK│- - -<│ EMPNO  PK│
│ 주문일자   │       │ 상품번호 PK│       │ DNAME    │      │ ENAME    │
└──────────┘       │ 수량       │       └──────────┘      │ DEPTNO FK│
                   └────────────┘                         └──────────┘
 부모 PK가 자식 PK의 일부               부모 PK가 자식의 일반 속성
 (IE 표기: 실선)                         (IE 표기: 점선)
비교식별 관계비식별 관계
부모 PK의 위치자식 주식별자의 일부자식의 일반 속성
자식의 존재부모 없이 존재할 수 없다부모 없이도 존재할 수 있다(선택 관계일 때)
연결 강도강한 연결약한 연결
IE 표기법실선점선
예주문 → 주문상품DEPT → EMP
  • 식별 관계에서 부모의 주식별자가 자식 주식별자의 전부가 되면 두 엔터티는 1:1 관계가 된다.
  • 비식별 관계의 FK 칼럼은 NULL을 허용할 수도 있다. 부서 배치 전 사원을 받으려면 EMP.DEPTNO가 NULL을 허용해야 한다.
  • 표기법은 교재와 도구마다 다르다. 바커 표기법은 식별 관계를 관계선 끝의 세로 막대로 나타낸다. 실선·점선 구분은 IE(ERwin) 표기 기준이다.

비식별 관계를 고르는 경우

다음 상황이면 식별 관계 대신 비식별 관계를 검토한다.

  • 부모와 자식의 관계가 약할 때. 사원은 부서를 옮겨도 같은 사원이다.
  • 자식의 주식별자를 독립적으로 구성하는 편이 나을 때. 사번만으로 사원이 유일하다.
  • 부모 없이 자식이 먼저 생길 수 있을 때. 부서 미배정 신입 사원이 이 경우다.

한쪽만 고집하면 생기는 문제

선택문제
식별 관계만 연결단계가 내려갈수록 자식 주식별자 속성이 계속 늘어난다. 조인 조건도 길어지고 SQL이 복잡해진다
비식별 관계만 연결손자 엔터티에서 할아버지의 값이 필요할 때 중간 엔터티를 거쳐 조인을 여러 번 해야 한다

예를 들어 고객 → 주문 → 주문상품 → 배송을 모두 식별 관계로 이으면 배송의 주식별자는 (고객번호, 주문번호, 상품번호, 배송순번)이 된다. 반대로 모두 비식별로 이으면 배송에서 고객 이름을 보려고 주문상품과 주문을 차례로 조인해야 한다.

EMP의 DEPTNO가 비식별 관계로 받은 외부식별자라는 점은 실제 데이터에서도 보인다.

SELECT EMPNO, ENAME, JOB, MGR, DEPTNO FROM EMP WHERE DEPTNO = 10 ORDER BY EMPNO;
     EMPNO ENAME      JOB              MGR     DEPTNO
---------- ---------- --------- ---------- ----------
      7782 CLARK      MANAGER         7839         10
      7839 KING       PRESIDENT                    10
      7934 MILLER     CLERK           7782         10
  • 주식별자 EMPNO만으로 각 행이 구분된다. DEPTNO는 키를 이루지 않는 일반 속성이다.
  • MGR도 EMP 자신의 EMPNO를 받아 온 외부식별자다. KING처럼 상위 관리자가 없는 사원은 NULL이다. 이 자기 참조 관계는 Day 4에서 다시 본다.

💡 정리 표: 식별 관계 = 부모 PK가 자식 PK 안으로, 비식별 관계 = 부모 PK가 자식 일반 칼럼으로. "자식이 부모 없이 존재할 수 있는가"를 물으면 비식별 관계 쪽이다.

내일은 함수 종속을 기준으로 엔터티를 쪼개는 정규화를 다룬다.

📖 용어

  • 식별자 : 엔터티 안에서 인스턴스 하나를 구분하는 속성. 물리 모델에서는 키가 된다.
  • 주식별자 : 여러 후보 중 엔터티를 대표하도록 고른 식별자. 다른 엔터티가 참조한다.
  • 보조식별자 : 인스턴스를 구분할 수는 있지만 참조 관계 연결에는 쓰지 않는 식별자.
  • 외부식별자 : 다른 엔터티와의 관계를 통해 받아 온 식별자. 물리 모델의 FK다.
  • 복합식별자 : 둘 이상의 속성을 묶어야 유일해지는 식별자.
  • 최소성 : 유일성을 지키는 데 필요한 만큼만 속성을 쓰는 성질.
  • 존재성 : 주식별자에 반드시 값이 있어야 한다는 성질. NULL을 허용하지 않는다.
  • 식별 관계 : 부모의 주식별자가 자식 주식별자의 일부가 되는 관계.
  • 비식별 관계 : 부모의 주식별자가 자식의 일반 속성으로만 내려가는 관계.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 주식별자의 특징에 해당하지 않는 것은?

문제 2

사원 엔터티의 주식별자를 (사번, 사원명)으로 정했다. 사번만으로도 모든 사원이 유일하게 구분된다면 위반한 주식별자의 특징은?

문제 3

식별자를 분류 기준과 함께 짝지은 것 중 옳지 않은 것은?

문제 4

다음 설명에 해당하는 관계로 가장 알맞은 것은? > 부모 엔터티의 주식별자가 자식 엔터티의 일반 속성으로 상속되며, 자식 엔터티는 부모 없이도 생성될 수 있다.

문제 5

고객 → 주문 → 주문상품 → 배송을 모두 식별 관계로만 연결했을 때 나타나는 현상으로 가장 알맞은 것은?

이전관계Week 1 · Day 5다음 정규화Week 2 · Day 2

참고 공식 자료

  • SQLD 공식 출제 기준(새 탭에서 열림)

이 페이지

  • 식별자란 무엇인가
  • 주식별자의 네 가지 특징
  • 주식별자를 고를 때 보는 기준
  • 식별자의 분류
  • 보조식별자를 따로 두는 이유
  • 식별 관계와 비식별 관계
  • 비식별 관계를 고르는 경우
  • 한쪽만 고집하면 생기는 문제
  • 용어
  • 연습 문제