이 글의 핵심
엔터티는 관리해야 할 대상, 속성은 대상의 특성, 관계는 대상 사이의 업무 연결입니다.
식별자는 인스턴스를 유일하게 구별하며 최소성·불변성·존재성을 함께 봅니다.
정규화는 중복을 줄이고 삽입·수정·삭제 이상을 예방하는 구조 개선 과정입니다.
엔터티·인스턴스·속성을 한 장면으로 이해하기
온라인 쇼핑몰을 예로 들면 고객, 상품, 주문은 관리 대상이므로 엔터티가 됩니다. 고객 엔터티에 실제로 저장된 김민수 고객 한 명은 인스턴스이고, 고객번호·이름·가입일은 고객의 특성을 표현하는 속성입니다.
문제에서는 명사라고 모두 엔터티가 되지 않습니다. 업무에서 반드시 관리해야 하고, 두 개 이상의 인스턴스가 존재하며, 속성과 관계를 가질 수 있는지 확인해야 합니다.
관계는 존재 관계와 행위 관계로 읽기
부서와 사원처럼 소속 상태를 표현하면 존재 관계, 고객이 주문한다처럼 업무 행위로 생기면 행위 관계로 볼 수 있습니다. 시험에서는 관계 이름보다 참여도와 카디널리티를 정확히 읽는 것이 중요합니다.
고객 한 명이 주문을 여러 개 할 수 있고 각 주문은 반드시 한 고객에게 속한다면 고객과 주문은 1대다 관계입니다. 주문이 없는 고객도 허용된다면 고객에서 주문 방향은 선택 참여입니다.
| 표현 | 질문 | 예시 |
|---|---|---|
| 카디널리티 | 몇 개와 연결되는가? | 고객 1명 : 주문 여러 건 |
| 선택성 | 연결이 반드시 필요한가? | 주문 없는 신규 고객 허용 |
| 관계명 | 어떤 업무 의미인가? | 고객이 주문을 생성한다 |
주 식별자와 인조 식별자
주 식별자는 각 인스턴스를 유일하게 구별하는 대표 식별자입니다. 유일성뿐 아니라 속성 수가 불필요하게 많지 않은 최소성, 값이 자주 바뀌지 않는 불변성, NULL이 없는 존재성도 중요합니다.
업무에서 자연스럽게 존재하는 회원 이메일이나 주민등록번호 같은 값은 본질식별자 후보가 될 수 있습니다. 별도의 일련번호를 새로 만들어 식별에 사용하면 인조식별자입니다. 인조식별자는 단순하지만 원래 업무상 유일성은 별도 제약조건으로 보호해야 합니다.
정규화는 이상 현상을 제거하는 과정
정규화의 목적은 테이블을 무조건 작게 나누는 것이 아니라 데이터 중복 때문에 생기는 삽입·수정·삭제 이상을 줄이는 것입니다. 함수적 종속을 기준으로 속성을 적절한 엔터티로 이동합니다.
- 제1정규형: 한 칸에 여러 값을 넣지 않고 원자값을 유지
- 제2정규형: 복합키 일부에만 종속된 부분 종속 제거
- 제3정규형: 일반 속성이 다른 일반 속성에 종속되는 이행 종속 제거
정규화 문제는 현재 테이블의 기본키를 먼저 표시한 뒤 “이 속성은 키 전체에 종속되는가?”를 묻는 순서로 풀면 안정적입니다.
모델과 SQL을 연결해서 복습하기
모델의 1대다 관계는 SQL에서 주로 기본키와 외래키의 조인 조건으로 나타납니다. 선택 참여가 있는 쪽을 보존하려면 OUTER JOIN이 필요할 수 있고, 선택 속성은 NULL 연산 규칙과 연결됩니다.
따라서 1과목 용어를 독립적으로 외우기보다 “이 모델을 조회하려면 어떤 JOIN이 필요한가?”를 함께 질문하세요. 모델링 개념이 2과목 SQL 문제의 조건 해석에도 도움이 됩니다.
자체 제작 사례: 주문 데이터를 엔터티와 관계로 나누기
한 표에 고객명, 고객전화번호, 주문번호, 주문일, 상품명, 수량이 반복 저장되어 있다고 가정합니다.
- 고객·주문·상품처럼 독립적으로 식별할 대상을 엔터티 후보로 표시합니다.
- 주문과 상품의 다대다 관계를 주문항목으로 해소하고 수량을 주문항목의 속성으로 둡니다.
- 고객 전화번호 변경이 과거 주문 행마다 반복되지 않는지 확인해 이상 현상이 줄었는지 검토합니다.
정규화는 표를 많이 나누는 작업이 아니라 식별자와 종속성을 기준으로 변경 이상을 줄이는 과정입니다.
흔한 오답 사고 바로잡기
업무에서 자주 쓰는 명사를 모두 엔터티로 만들고 모든 속성에 별도 식별자를 부여한다.
왜 틀리는가: 값이나 코드에 불과한 항목까지 엔터티가 되면 관계가 복잡해지고 동일한 사실을 여러 경로로 표현하게 됩니다.
올바른 확인법: 업무상 독립적으로 존재하고 여러 인스턴스를 가지며 식별할 필요가 있는지를 차례로 확인합니다.
복습 체크리스트
엔터티마다 업무적 정의를 한 문장으로 작성
주 식별자의 유일성·최소성·불변성·존재성 확인
관계의 선택성 및 기수성 표시
삽입·수정·삭제 이상 사례로 정규화 결과 검토
자주 묻는 질문
반정규화는 정규화의 반대인가요?
성능이나 조회 단순화를 위해 이미 정규화된 구조에 중복이나 통합을 의도적으로 허용하는 설계입니다. 무계획한 중복과 달리 데이터 일관성 유지 방법을 함께 설계해야 합니다.
외래키는 항상 NULL이 될 수 없나요?
관계의 필수 참여 여부에 따라 달라집니다. 선택 참여 관계라면 외래키가 NULL을 허용할 수 있습니다.
검수 기준과 공식 자료
이 글은 가풀이 직접 작성·검수했으며 실제 기출문제나 복원문제를 옮기지 않았습니다. 시험 일정과 세부 규정은 변경될 수 있으므로 접수 전 아래 공식 공고를 다시 확인하세요.
- SQL 개발자 자격시험 공식 안내 — 한국데이터산업진흥원 데이터자격시험