관계 데이터 모델
목차 23
23강이 데이터의 설계 청사진(E-R 다이어그램)을 그리는 단계였다면, 24강은 그 청사진이 실제 컴퓨터 안에서 어떤 모양의 테이블로 안착하는가다. 관계 모델이 무엇이고(E.F. 코드 1970·2차원 테이블) → 릴레이션은 어떤 구조이고(스키마·인스턴스·튜플·속성) → 행과 열을 어떻게 세고(카디널리티·디그리) → 행을 어떻게 식별하고(키 5종) → 데이터의 정합성을 어떻게 지키는가(무결성 3종)를 관통한다. 점수밭은 릴레이션 구조·키 5종·무결성 3종 — 논리 데이터베이스 설계 단원의 거의 매회 출제처다.
핵심 암기: 카디널리티 = 행(튜플) 수 카·기·행·튜플 · 디그리 = 열(속성) 수 디·차·열·속성 · 키 5종 슈후기대외(슈퍼·후보·기본·대체·외래) · 무결성 3종 개참도(개체·참조·도메인)
관계 데이터 모델과 E-R 변환
관계 데이터 모델 정의 — E.F. 코드 1970 ·관계 데이터 모델·
[정의] 관계 데이터 모델(Relational Data Model) = 데이터를 2차원 테이블(릴레이션) 형태로 표현하는 데이터 모델. 1970년 E.F. 코드(Edgar F. Codd) 가 IBM 논문(A Relational Model of Data for Large Shared Data Banks)에서 제안. 관계대수·관계해석에 수학적 기반을 둔, 50년 넘게 OLTP 시장의 표준 모델이다.
[표] 논리적 데이터 모델 4종 — 그중 ③ 관계형이 현재 주류(23강 계네관객 회수).
| 모델 | 구조 | 시대 | N:M | 비고 |
|---|---|---|---|---|
| 계층형 | 트리(Tree) | 1960s | ❌ (1:N만) | 부모 하나뿐 |
| 네트워크형 | 그래프(Graph) | 1970s | ✅ | 다중 부모 |
| 관계형 | 2차원 테이블 | 1970s ~ 현재 | ✅ | 현재 주류 · 24강 본격 |
| 객체지향형 | 객체+관계 | 1990s ~ | ✅ | 한정된 영역 |
🔑 암기 관계 데이터 모델 = E.F. 코드(1970)·2차원 테이블. 관계대수 제안자도 같은 사람. 4종 중 N:M을 못 그리는 건 계층형 하나뿐(트리라서). ⚠️ 함정 '관계 데이터 모델 = 관계대수' ❌(→ 관계 데이터 모델은 표로 보는 모델 개념, 관계대수는 그 위에 돌리는 연산 4종 σ·π·⋈·÷ — 25강) / '객체지향 데이터 모델 제안자 = 코드' ❌(→ 객체지향은 1980년대 별도 흐름). 🎯 빈출 제안자·연도 매칭, 논리 모델 4종 구분. 간헐. 💡 보충 관계형이 50년 표준인 이유는 '행과 열이 있는 표' 한 문장의 단순함 + 집합론 기반 수학적 엄밀성 + 선언적 SQL. 누구나 만져본 엑셀 스프레드시트 한 장이 곧 릴레이션 한 개라는 친숙함이 핵심이다.
E-R → 관계 모델 변환 4규칙 ·E-R 변환·
[정의] E-R 다이어그램(23강 산출물)이 실제 테이블로 변환되는 규칙은 4가지. 개체·속성은 그대로 1:1 변환되고, 다중값과 N:M만 별도 테이블로 분리된다.
[표] 변환 4대 규칙.
| # | ERD 요소 | → | 관계 모델 | 변환 본질 |
|---|---|---|---|---|
| ① | 개체(사각형 □) | → | 릴레이션(테이블) 1개 | 개체 → 테이블 |
| ② | 속성(타원 ○) | → | 컬럼(속성) 1개 | 속성 → 헤더 한 칸 |
| ③ | 다중값 속성(이중 타원 ⊙) | → | 별도 릴레이션 분리 | 1NF 위반 방지 |
| ④ | 관계(마름모 ◇) | → | 카디널리티에 따라 분기 | FK 또는 연결 테이블 |
[표] ④번 관계 변환 — 카디널리티별 3분기.
| 카디널리티 | 변환 방식 | 예시 |
|---|---|---|
| 1 : 1 | 어느 한쪽에 FK 1개 추가 | 사용자 ↔ 프로필 |
| 1 : N | N쪽에 FK 추가(1쪽 PK를 가리킴) | 부서 ↔ 사원 — 사원.부서번호 FK |
| N : M | 연결 테이블 별도 생성 + 양쪽 FK + 복합 PK | 학생 ↔ 과목 — enrollment 별도 |
🔑 암기 개체→테이블 / 속성→컬럼 / 다중값→별도 테이블 / 관계→카디널리티 분기. 외래키는 항상 많은 쪽(N쪽)에 붙는다. ⚠️ 함정 '다중값 속성은 같은 테이블에 콤마로 저장' ❌(→ 별도 테이블 분리) / '1:N은 1쪽에 FK 추가' ❌(→ N쪽에 FK) / 'N:M은 한 테이블에 펼친다' ❌(→ 연결 테이블 별도 생성). 🎯 빈출 변환 규칙·FK 위치(N쪽). 간헐~보통. 💡 보충 다중값과 N:M을 별도 테이블로 빼는 건 둘 다 '한 칸에 여러 값을 욱여넣지 말라'는 같은 원칙 — 속성 원자성(1NF)의 첫 다리다.
N:M → 3 테이블 분해 — enrollment 시그니처 ·N:M 분해·
[정의] 24강의 상징 예제 — 학생-과목 N:M → student·course·enrollment 3 테이블 분해. N:M 관계는 가운데에 연결 테이블을 끼우고, 양쪽 PK를 외래키로 가리키며, 그 둘을 묶어 복합 PK로 삼는다.
[표] 3 테이블 분해 구조.
| 테이블 | 역할 | 키 |
|---|---|---|
| student | 학생 개체 | PK: 학번 |
| course | 과목 개체 | PK: 과목번호 |
| enrollment | 연결 테이블(N:M 분해) | 복합 PK: (학번, 과목번호) + 양쪽 FK |
[학생] ──── N:M ──── [과목] ERD: 다대다 관계
↓ 분해
student enrollment course
(학번 PK) (학번 FK → student (과목번호 PK)
과목번호 FK → course
복합 PK = 두 FK 묶음
+ 성적·수강년도 부가 속성)
🔑 암기 N:M은 가운데 연결 테이블 + 양쪽 FK로 PK를 가리킨다. 연결 테이블 PK = 양쪽 FK를 묶은 복합 PK(한 학생이 같은 과목 두 번 등록 ❌).
⚠️ 함정 'N:M은 한 테이블에 저장 가능' ❌(→ 연결 테이블 분해, 안 하면 1NF 위반) / '연결 테이블의 PK는 단일 컬럼' ❌(→ 복합 PK 또는 별도 ID + 양쪽 UNIQUE).
🎯 빈출 N:M 분해 구조·복합 PK. 보통.
💡 보충 이 한 예제가 25강 관계대수(student ⋈ enrollment ⋈ course)·26강 DDL(CREATE TABLE ... FOREIGN KEY)·27강 DML(다중 조인 SELECT)로 계속 이어진다. 이커머스 주문 ↔ 상품 → 주문항목도 같은 결.
릴레이션 구조 — 스키마·튜플·속성·카디널리티
릴레이션 구조 — 스키마 vs 인스턴스 ·릴레이션 구조·1순위·
[정의] 릴레이션(Relation) = 행과 열로 구성된 2차원 테이블. 구조는 스키마(헤더·설계) 와 인스턴스(본문·데이터) 두 부분으로 나뉜다 — 엑셀 시트 한 장으로 한방에 시각화된다.
[student 릴레이션 = 엑셀 시트 한 장]
┌─ 스키마(1행 헤더 · 구조 정의) ──────────
│ 학번 이름 학년 학과
├──────────────────────────────────────
│ 2024001 김철수 2 컴퓨터
│ 2024002 이영희 3 경영 ← 인스턴스(본문 · 실제 데이터)
│ 2024003 박민수 1 통계
└──────────────────────────────────────
한 열 ↓ = 속성(Attribute) 한 행 → = 튜플(Tuple)
[표] 스키마 vs 인스턴스.
| 구분 | 정의 | 엑셀 비유 | 변경 시점 |
|---|---|---|---|
| 릴레이션 스키마(Schema) | 헤더·구조 정의 — 속성명·도메인·제약 | 1행 헤더 + 데이터 타입 | 설계 시(DDL) · 거의 고정 |
| 릴레이션 인스턴스(Instance) | 본문·실제 데이터 — 튜플들의 집합 | 본문 데이터 | 운영 시(DML) · 매 순간 변함 |
🔑 암기 릴레이션 = 스키마 + 인스턴스. 스키마는 거의 고정, 바뀌는 건 인스턴스. ⚠️ 함정 '스키마가 매 순간 바뀐다' ❌(→ 인스턴스가 바뀜) / 'INSERT가 스키마를 바꾼다' ❌(→ INSERT는 인스턴스만 갱신·DML / 스키마는 DDL만) / '인스턴스 = 설계도' ❌(→ 인스턴스는 본문, 설계도는 스키마). 🎯 빈출 스키마·인스턴스 분별. 간헐. 💡 보충 운영 중 스키마 변경(ALTER TABLE)은 락이 걸려 신중히, 인스턴스 관리(INSERT·DELETE)는 수시로 — 스키마=느림, 인스턴스=빠름이 함정의 본질.
튜플과 속성 — 각 4동의어 ·튜플·속성·1순위·
[정의] 릴레이션의 가로 한 줄 = 튜플(Tuple), 세로 한 칸 = 속성(Attribute). 둘 다 시험에 4개씩 동의어가 나온다.
[표] 튜플·속성 4동의어 매칭 — '같은 것을 모두 고르시오' 단골.
| 구분 | 방향 | 동의어 4종 |
|---|---|---|
| 튜플(Tuple) | 가로(행) | 튜플 · 행(Row) · 레코드(Record) · 인스턴스(Instance) |
| 속성(Attribute) | 세로(열) | 속성 · 열(Column) · 필드(Field) · 프로퍼티(Property) |
🔑 암기 튜플 = 행·레코드·Row·Instance / 속성 = 열·필드·Column·Property. 한 줄이 한 사람의 모든 정보(튜플), 한 칸이 한 항목의 모든 값(속성). ⚠️ 함정 '튜플 = 컬럼' ❌(→ 튜플은 행, 컬럼은 속성) / '속성 = 행' ❌(→ 속성은 열) / '튜플 = 인스턴스' ✅(같은 말). 🎯 빈출 4동의어 매칭이 매년 단골. 보통. 💡 보충 다음 카드에서 튜플 수를 세면 카디널리티, 속성 수를 세면 디그리다.
카디널리티 = 행 수 · 디그리 = 열 수 ·카디널리티·디그리·1순위·
[정의] 카디널리티(Cardinality) = 릴레이션의 튜플(행) 개수(= 기수). 디그리(Degree) = 릴레이션의 속성(열) 개수(= 차수). 둘 다 숫자로 표기하며, 24강 1순위 출제 영역이다.
[student 릴레이션]
학번 이름 학년 학과
2024001 김철수 2 컴퓨터 → 튜플 5개 → 카디널리티 = 5 (위에서 아래로)
2024002 이영희 3 경영
2024003 박민수 1 통계 → 속성 4개 → 디그리 = 4 (학번·이름·학년·학과)
2024004 최지영 4 컴퓨터
2024005 정혜진 2 수학
[표] 카디 vs 디그리 매트릭스.
| 구분 | 카디널리티 | 디그리 |
|---|---|---|
| 측정 | 튜플(행) 수 | 속성(열) 수 |
| 한자 | 기수(基數) | 차수(次數) |
| 시간성 | 매 순간 변함(INSERT/DELETE·인스턴스 성질) | 거의 고정(ALTER만·스키마 성질) |
| 즉답 카드 | 카·기·행·튜플 | 디·차·열·속성 |
🔑 암기 "카디는 카드 세듯 행, 디그리는 학위 분야처럼 열." Card 한 장씩 위에서 아래로 세듯 = 카디널리티(행), Degree(학위)는 여러 분야처럼 = 디그리(열). ⚠️ 함정 '카디 = 열 수' ❌(→ 디그리) / '디그리 = 행 수' ❌(→ 카디) / '카디 = 차수' ❌(→ 카디 = 기수, 디그리 = 차수) / '카디 = 키 개수' ❌(→ 키와 무관·튜플 수). 🎯 빈출 인스턴스 주고 카디·디그리 값 계산. 거의 매회. 💡 보충 카디널리티는 인스턴스 성질이라 INSERT 한 번에 +1, DELETE 한 번에 −1. 디그리는 스키마 성질이라 컬럼을 추가/삭제할 때만 변한다.
⚠️ 카디널리티 두 의미 분별 — 관계 다중도 vs 튜플 수 ·카디널리티 두 의미·1순위·
[정의] 카디널리티는 한 단어에 두 의미가 있다. 23강의 카디널리티(관계 다중도)와 24강의 카디널리티(튜플 수)는 같은 단어인데 측정 대상이 완전히 다르다 — 매년 변형 함정으로 출제되는 1순위 영역이다.
[표] 3단어 종합 분별 — 시험장 즉답 카드.
| 단어 | 측정 | 표기 | 분별 키 |
|---|---|---|---|
| 관계 카디널리티(23강·관계 다중도) | 두 개체 사이 매핑 비율 | 1:1·1:N·N:M(콜론) | 보기에 콜론(:) |
| 릴레이션 카디널리티(24강) | 한 릴레이션의 튜플(행) 수 | 숫자(예: 50) | 보기에 숫자·튜플·행·기수 |
| 디그리(24강) | 속성(열) 수 | 숫자(예: 4) | 보기에 속성·열·차수 |
🔑 암기 "콜론은 관계 다중도, 숫자는 튜플 수, 열은 디그리." 9글자 압축 — "콜론은 관계, 카는 행, 디는 열." ⚠️ 함정 '카디 1:N은 튜플 수가 1과 N' ❌ — 한 보기에 관계 다중도 의미(1:N)와 튜플 수 의미가 섞이면 100% 함정 / '카디는 1:1·1:N·N:M 세 종류뿐' ❌(→ 그건 관계 다중도 의미, 릴레이션 카디는 임의의 자연수). 🎯 빈출 같은 단어 두 의미 분별. 보통(매년 변형). 💡 보충 실무에서도 'cardinality'는 컨텍스트로 갈린다 — ERD 설계 회의면 관계 다중도, 쿼리 옵티마이저·인덱스 튜닝 회의면 튜플(유니크 값) 수. 산업 어휘 자체가 두 자리로 분리돼 쓰여 시험에도 그대로 반영된다.
릴레이션 5대 특성
릴레이션 5대 특성 ·5대 특성·1순위·
[정의] 릴레이션이 수학적 집합으로 다뤄지기 위해 지켜야 하는 5대 특성. 정규화 1NF의 다리이자 시험 단독 출제 빈출 영역이다.
[표] 5대 특성 — 위반 시 무엇이 깨지나.
| # | 특성 | 정의 | 위반 시 |
|---|---|---|---|
| ① | 튜플 유일성 | 완전히 같은 튜플 두 개 ❌ | 키 무결성 위반 |
| ② | 튜플 무순서 | 튜플 사이 순서 의미 없음 | 정렬은 ORDER BY로 별도 |
| ③ | 속성 무순서 | 속성 사이 순서 의미 없음 | SELECT 컬럼 순서로 별도 |
| ④ | 속성 원자성 | 한 속성 값은 더 못 쪼개는 원자값 | 1NF 위반 |
| ⑤ | 도메인 동일 | 한 속성의 모든 값은 같은 도메인 | 도메인 무결성 위반 |
🔑 암기 "튜플은 유일·무순서, 속성은 무순서·원자성, 속성값은 도메인 동일." 대상별로 — 튜플(①②)·속성(③④)·속성값(⑤). ⚠️ 함정 '튜플 사이에 순서가 있다' ❌(→ 무순서·함정 1순위) / '한 속성에 여러 값 가능' ❌(→ 원자성 위반·1NF 위반) / '튜플은 중복 가능' ❌(→ 유일성) / '속성 원자성은 BCNF 조건' ❌(→ 1NF 조건). 🎯 빈출 특성 중 틀린 것 고르기 — 거의 항상 '순서 있다' 또는 '여러 값 가능' 패턴. 거의 매회. 💡 보충 ④ 속성 원자성이 곧 제1정규형(1NF)의 출발점. 변환 4규칙 ③(다중값→별도 테이블)·5대 특성 ④·1NF가 같은 사슬(28강에서 본격).
키 5종 — 슈후기대외
슈퍼키 · 후보키 — 유일성·최소성 두 잣대 ·키 5종·1순위·
[정의] 키(Key) = 튜플을 유일하게 식별하는 속성(조합). 모든 키는 두 잣대로 갈린다 — 유일성(모든 튜플이 다른 값)과 최소성(속성 하나라도 빼면 유일성이 깨짐). 슈퍼키는 유일성만, 후보키는 둘 다 만족한다.
[표] 슈퍼키 vs 후보키.
| 키 | 유일성 | 최소성 | 개수 | 한 줄 본질 |
|---|---|---|---|---|
| 슈퍼키(Super Key) | ✅ | ❌ 가능 | 여러 개 | 군더더기 포함 OK — 가장 느슨 |
| 후보키(Candidate Key) | ✅ | ✅ | 여러 개 | 기본키 후보들 |
student 속성: 학번, 주민번호, 이름, 학년
- {학번} 유일성 ✅, 최소성 ✅ → 후보키
- {주민번호} 유일성 ✅, 최소성 ✅ → 후보키
- {학번, 이름} 유일성 ✅, 최소성 ❌ → 슈퍼키만(이름은 군더더기)
🔑 암기 유일성만 = 슈퍼키 / 유일성 + 최소성 = 후보키. 포함 관계 슈퍼키 ⊃ 후보키(슈퍼키가 더 넓음). ⚠️ 함정 '슈퍼키는 최소성 만족' ❌(→ 유일성만) / '슈퍼키 ⊂ 후보키' ❌(→ 방향 반대·슈퍼키 ⊃ 후보키) / '후보키는 1개만' ❌(→ 여러 개) / '후보키는 NULL 금지' ❌(→ 후보키 NULL 가능, 금지는 기본키만). 🎯 빈출 두 잣대 매칭·포함 방향. 거의 매회. 💡 보충 최소성을 따지지 않으니 슈퍼키는 무수히 많다 — 실무 코드엔 거의 안 쓰이는 학술·시험 개념. 후보키가 둘 이상이면 DBA가 그중 하나를 기본키로 고른다.
기본키 — 대표 1개, NULL ❌ ·기본키·1순위·
[정의] 기본키(Primary Key) = 후보키 중 DBA가 대표로 선택한 1개. 릴레이션의 모든 튜플을 유일하게 식별하며, NULL과 중복을 절대 허용하지 않는다.
[표] 기본키 4대 성질.
| # | 성질 | 본질 |
|---|---|---|
| ① | 유일성 + 최소성 ✅ | 후보키 성질 상속 |
| ② | NULL ❌ | 식별 불가 → 데이터 의미 상실 |
| ③ | 중복 ❌ | 같은 PK 두 튜플 → 식별 충돌 |
| ④ | 자동 인덱스 ✅ | DBMS가 자동 생성 |
CREATE TABLE student (
학번 INT PRIMARY KEY, -- NULL ❌ · 중복 ❌ · 자동 인덱스
이름 VARCHAR(20) NOT NULL,
학년 INT
);
🔑 암기 기본키 = NULL 금지·중복 금지·대표 1개·자동 인덱스. "신분증 없으면 사람 식별 불가" — PK NULL은 곧 누군지 모른다는 뜻(개체 무결성).
⚠️ 함정 '기본키 NULL 가능' ❌(→ 절대 NULL ❌) / '기본키 여러 개' ❌(→ 딱 1개, 후보키가 여러 개) / '기본키 = 후보키' ❌(→ 대표 1개) / '기본키 중복 가능' ❌(→ 중복 ❌).
🎯 빈출 기본키 NULL·개수 함정. 거의 매회(키 문항 1순위).
💡 보충 복합 PK((학번, 과목번호))도 '기본키 1개'로 센다 — 여러 컬럼이 하나로 묶여 1개. OLTP 표준 첫 줄이 거의 항상 id BIGINT PRIMARY KEY, PK 없는 테이블은 코드 리뷰에서 보통 반려.
대체키 · 외래키 — UNIQUE vs FK NULL ✅ ·대체키·외래키·1순위·
[정의] 대체키(Alternate Key) = 후보키 중 기본키로 선택되지 않은 나머지(UNIQUE 제약으로 식별 보장). 외래키(Foreign Key) = 다른 릴레이션의 기본키를 참조하는 속성(관계 표현·NULL 허용).
[표] 대체키 vs 외래키.
| 키 | 유일성 | NULL | 본질 | SQL |
|---|---|---|---|---|
| 대체키(Alternate) | ✅ | ✅ | 같은 테이블 내 식별(후보키 − 기본키) | UNIQUE |
| 외래키(Foreign) | ❌ | ✅ | 다른 테이블 PK 참조·관계 표현 | FOREIGN KEY ... REFERENCES |
CREATE TABLE enrollment (
학번 INT,
과목번호 CHAR(4),
PRIMARY KEY (학번, 과목번호), -- 복합 PK
FOREIGN KEY (학번) REFERENCES student(학번), -- 외래키 (같은 학번 중복 OK)
FOREIGN KEY (과목번호) REFERENCES course(과목번호)
);
🔑 암기 대체키 = UNIQUE·후보키 − 기본키 / 외래키 = 다른 PK 참조·NULL ✅·유일성 ❌. 외래키 NULL 가능은 '관계가 아직 결정 안 됨'을 표현(예: 부서 미배정 사원). ⚠️ 함정 '외래키는 NULL이 될 수 없다' ❌(→ NULL 가능, 금지는 기본키만·★시험 1순위★) / '외래키 유일성 만족' ❌(→ 유일성 ❌, 1:N에서 같은 FK 여러 번) / '대체키 = 외래키' ❌(→ 대체키는 같은 테이블 식별, 외래키는 다른 테이블 참조) / '대체키 NULL 금지' ❌(→ NULL 가능). 🎯 빈출 외래키 NULL 허용·대체키 vs 외래키 분별. 거의 매회. 💡 보충 외래키 위반 시 처리 4옵션(RESTRICT·CASCADE·SET NULL·SET DEFAULT)은 참조 무결성 카드에서 본격. 수억 행 규모에선 성능상 FK 제약을 코드 레벨로 옮기기도 하지만, 시험에선 항상 FK 제약 ON으로 가정한다.
★ 슈후기대외 ★ 종합 + 제약 매트릭스 ·키 5종 종합·1순위·
[정의] 키 5종을 한 두문자로 종합 — 슈후기대외(슈퍼·후보·기본·대체·외래). 포함 관계와 제약을 한 매트릭스로 굳힌다.
[표] ★슈후기대외★ 제약 종합 매트릭스 — 시험 직전 마지막 카드.
| 키 | 유일성 | 최소성 | NULL | 중복 | SQL 제약 | 개수 |
|---|---|---|---|---|---|---|
| 슈퍼키 | ✅ | ❌ 가능 | – | – | – | 여러 개 |
| 후보키 | ✅ | ✅ | ✅ | ❌ | – | 여러 개 |
| 기본키 | ✅ | ✅ | ❌ | ❌ | PRIMARY KEY |
1개 |
| 대체키 | ✅ | ✅ | ✅ | ❌ | UNIQUE |
여러 개 |
| 외래키 | ❌ | – | ✅ | ✅ | FOREIGN KEY ... REFERENCES |
여러 개 |
[표] 핵심 분별 한눈에.
| 분별 | 정답 |
|---|---|
| NULL 금지인 키 | 기본키만 |
| 중복·유일성 ❌인 키 | 외래키만 |
| 반드시 1개인 키 | 기본키만 |
| 자동 인덱스 | 기본키 무조건 / 대체키 보통 |
🔑 암기 "슈는 느슨, 후는 빡빡, 기는 NULL 금지, 대는 후−기, 외는 다른 PK 참조." 포함 관계 슈퍼키 ⊃ 후보키 ⊃ 기본키 / 후보키 = 기본키 + 대체키 / 외래키는 별도(참조). ⚠️ 함정 '외래키 NULL ❌' ❌(→ NULL 가능) / '기본키 여러 개' ❌(→ 1개) / '슈퍼키 최소성' ❌(→ 유일성만) / '대체키 = 외래키' ❌(→ 별도 개념). 🎯 빈출 키 5종 성질 매칭 2~3문항. 거의 매회. 💡 보충 호텔 예약으로 비유하면 — 슈퍼키(객실+층+동) / 후보키({객실번호},{예약코드}) / 기본키(객실번호) / 대체키(예약코드·UNIQUE) / 외래키(손님ID→customer 참조). 실무 표준 어휘는 PK·UNIQUE Key·FK 3종(슈퍼·후보는 학술 개념).
무결성 3종 — 개참도
개체 무결성 ·개체 무결성·1순위·
[정의] 개체 무결성(Entity Integrity) = 기본키(PK)는 NULL ❌, 중복 ❌. 모든 튜플이 유일하게 식별 가능해야 한다는 제약. 슈후기대외의 '기'가 본격 제약으로 변신한 것.
[표] 무결성 3종 검사 대상 — '누구를 검사하나'.
| 무결성 | 검사 대상 | 규칙 |
|---|---|---|
| 개체 | 기본키 | NULL ❌ · 중복 ❌ |
| 참조 | 외래키 | 참조 PK 존재 OR NULL |
| 도메인 | 일반 속성 | 도메인 범위 안 |
🔑 암기 개체 무결성 = 기본키 검사(NULL ❌·중복 ❌). "신분증 없으면 식별 불가" — NULL을 원천 차단.
⚠️ 함정 '개체 무결성은 외래키 NULL 금지' ❌(→ 기본키 NULL 금지, 외래키는 NULL 가능) / '개체 무결성 = 외래키 검사' ❌(→ 기본키 검사) / '개체 무결성 = 도메인 검사' ❌(→ 도메인 무결성 영역).
🎯 빈출 검사 대상(기본키) 매칭. 거의 매회.
💡 보충 학번 INT PRIMARY KEY 한 줄이 개체 무결성을 자동 보장 — NULL이나 중복을 INSERT하면 DBMS가 거부한다.
참조 무결성 + FK 4옵션 ·참조 무결성·1순위·
[정의] 참조 무결성(Referential Integrity) = 외래키(FK)는 참조하는 PK 값과 일치하거나 NULL이어야 한다. 참조 대상이 실제로 존재해야 하며, 참조 PK가 삭제·수정될 때의 처리는 4옵션 중 선택한다.
[표] ★ 외래키 위반 시 4옵션 ★ — 시험 1순위.
| # | 옵션 | 동작 | 예시(참조 student 삭제 시) |
|---|---|---|---|
| ① | RESTRICT | 거부(기본) | 참조 중이면 삭제 거부·에러 |
| ② | CASCADE | 연쇄 삭제 | 관련 enrollment 자동 삭제 |
| ③ | SET NULL | NULL로 | enrollment.학번을 NULL로 |
| ④ | SET DEFAULT | 기본값으로 | enrollment.학번을 기본값으로 |
FOREIGN KEY (학번) REFERENCES student(학번)
ON DELETE CASCADE -- student 삭제 시 enrollment 자동 삭제
ON UPDATE CASCADE;
🔑 암기 참조 무결성 = 외래키 검사(참조 PK 존재 OR NULL). 위반 시 RESTRICT(기본)·CASCADE·SET NULL·SET DEFAULT 4옵션. ⚠️ 함정 '참조 무결성은 기본키 검사' ❌(→ 외래키 검사) / 'FK는 항상 NULL 금지' ❌(→ NULL 가능) / 'CASCADE가 기본' ❌(→ RESTRICT가 기본) / 'FK 옵션은 2종뿐' ❌(→ 4종). 🎯 빈출 4옵션 매칭·검사 대상(외래키). 보통~거의 매회. 💡 보충 옵션 선택은 곧 비즈니스 정책 — 게시글-댓글은 CASCADE(같이 삭제), 사용자-주문 이력은 RESTRICT/SET NULL(보존). 개인정보 보호 정책이 옵션을 가르기도 한다.
도메인 무결성 ·도메인 무결성·
[정의] 도메인(Domain) = 한 속성(컬럼)에 들어올 수 있는 값의 합법적 집합(타입·범위·열거 3형식). 도메인 무결성(Domain Integrity) = 속성값이 정의된 도메인 범위 안에 있어야 한다는 제약 — '컬럼의 입국 심사대'.
[표] 도메인 3형식 = 도메인 무결성 제약.
| 형식 | SQL 제약 | 예시 |
|---|---|---|
| 데이터 타입 | INT, VARCHAR(20), DATE |
학번 INT, 이름 VARCHAR |
| 범위(CHECK) | CHECK (조건) |
CHECK (나이 BETWEEN 0 AND 150) |
| 열거(ENUM) | ENUM(...) · CHECK (... IN (...)) |
CHECK (성별 IN ('M','F')) |
나이 INT CHECK (나이 BETWEEN 0 AND 150), -- 범위
성별 CHAR(1) CHECK (성별 IN ('M', 'F')) -- 열거
-- 나이 200 INSERT → CHECK 위반 거부 / 성별 'X' → 거부
🔑 암기 도메인 무결성 = 일반 속성 검사(타입·범위·열거 3형식). 통과 못 하는 값은 입국 거부.
⚠️ 함정 '도메인 무결성은 PK 검사' ❌(→ 개체 무결성) / '도메인 = 데이터 타입만' ❌(→ 타입 + 범위 + 열거 3종) / 'ENUM은 도메인이 아님' ❌(→ 열거형 도메인) / '도메인 무결성 = 외래키 검사' ❌(→ 일반 속성).
🎯 빈출 도메인 3형식·검사 대상(일반 속성). 간헐~보통.
💡 보충 도메인을 좁힐수록 데이터 품질은 올라가고 ALTER 비용도 올라간다. 간편송금 시스템의 잔액 DECIMAL(15,2) CHECK (잔액 >= 0)로 음수 차단이 표준.
★ 개참도 ★ 종합 — 무결성 3종 ·무결성 종합·1순위·
[정의] 무결성 3종을 한 두문자로 종합 — 개참도(개체·참조·도메인). 정처기 표준 무결성은 개·참·도 딱 3종이며, 그 외 단어는 모두 함정이다.
[표] ★개참도★ 종합 — 즉답 매트릭스.
| 글자 | 무결성 | 검사 대상 | SQL 제약 |
|---|---|---|---|
| 개 | 개체 | 기본키 | PRIMARY KEY(NULL·중복 ❌) |
| 참 | 참조 | 외래키 | FOREIGN KEY ... REFERENCES(4옵션) |
| 도 | 도메인 | 일반 속성 | CHECK·ENUM·타입 |
[표] ⚠️ 무결성 3종이 아닌 것 — 매년 변형 단골.
| 오답 보기 | 왜 ❌ |
|---|---|
| 트랜잭션 무결성 | ACID와 혼동(별도) |
| 사용자 무결성 | DCL(권한)과 혼동 |
| 키 무결성 | 개체 무결성과 혼동(별도 용어 ❌) |
| 응용·세션·테이블 무결성 | 일반 용어와 혼동 |
🔑 암기 "무결성 = 개·참·도 3종만, 나머지 다 함정." 슈후기대외 짝꿍 — 기(기본키)=개 / 외(외래키)=참 / 일반 속성=도. ⚠️ 함정 '무결성 3종에 트랜잭션 무결성 포함' ❌(→ 개·참·도 3종) / '무결성 = 개체·참조 2종' ❌(→ 3종, 도메인 포함). 개·참·도 세 글자 밖이면 무조건 오답. 🎯 빈출 '무결성이 아닌 것 고르기' — 거의 매회. 💡 보충 SQL 코드 리뷰 체크리스트도 정확히 'PRIMARY KEY(개체)·FOREIGN KEY(참조)·CHECK(도메인)' 세 줄 — 외운 두문자가 곧 실무 어휘다.
기출 다지기
[기출 1 출제] 다음 릴레이션의 카디널리티(Cardinality)와 디그리(Degree)를 순서대로 옳게 나타낸 것은? (값 계산)
[student]
학번 이름 학년 학과
2024001 김철수 2 컴퓨터
2024002 이영희 3 경영
2024003 박민수 1 통계
2024004 최지영 4 컴퓨터
2024005 정혜진 2 수학
- ① 5, 4
- ② 4, 5
- ③ 4, 4
- ④ 5, 5
정답 및 해설 보기
정답 ①
카디널리티 = 튜플(행) 5개 = 5, 디그리 = 속성(열) 4개(학번·이름·학년·학과) = 4. "카·기·행 / 디·차·열"로 즉답.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 정답 | 카디=5(행) / 디그리=4(열) |
| ② | 오답 | 카디·디그리 자리 바꿔치기 |
| ③ | 오답 | 카디를 4로(행 5개를 잘못 셈) |
| ④ | 오답 | 둘 다 5로 헷갈리는 함정 |
🔑 카는 행, 디는 열 — "카·기·행·튜플 / 디·차·열·속성".
[기출 2 출제] 키(Key)에 대한 설명으로 옳지 않은 것은? (부정형)
- ① 슈퍼키는 유일성은 만족하지만 최소성은 만족하지 않을 수 있다.
- ② 후보키는 유일성과 최소성을 모두 만족한다.
- ③ 기본키는 NULL 값을 가질 수 있다.
- ④ 외래키는 다른 릴레이션의 기본키를 참조하는 속성이다.
정답 및 해설 보기
정답 ③
기본키는 절대 NULL을 가질 수 없다(개체 무결성 본질). NULL 금지는 키 5종 중 기본키뿐.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 옳음 | 슈는 느슨 — 유일성만 |
| ② | 옳음 | 후는 빡빡 — 유일성 + 최소성 |
| ③ | 정답(틀린 것) | 기본키는 NULL ❌(개체 무결성) |
| ④ | 옳음 | 외는 다른 PK 참조 |
🔑 NULL 금지는 기본키만, 외래키는 NULL ✅ — "기는 NULL 금지, 외는 다른 PK 참조".
[기출 3 출제] 관계 데이터베이스의 무결성(Integrity) 제약조건이 아닌 것은? (소거형)
- ① 개체 무결성(Entity Integrity)
- ② 참조 무결성(Referential Integrity)
- ③ 도메인 무결성(Domain Integrity)
- ④ 트랜잭션 무결성(Transaction Integrity)
정답 및 해설 보기
정답 ④
정처기 표준 무결성 = 개·참·도 3종. 트랜잭션 무결성은 ACID와 혼동한 함정.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 옳음 | 개 — 기본키 NULL·중복 ❌ |
| ② | 옳음 | 참 — 외래키 = 참조 PK 존재 OR NULL |
| ③ | 옳음 | 도 — 속성값이 도메인 범위 안 |
| ④ | 정답(아닌 것) | 트랜잭션 무결성 = ACID 혼동(별도) |
🔑 개·참·도 세 글자 밖이면 함정 — 트랜잭션·사용자·키 무결성 모두 ❌.
[기출 4 출제] 관계 데이터 모델의 릴레이션 특성으로 옳지 않은 것은? (부정형)
- ① 한 릴레이션에는 동일한 튜플이 두 개 이상 존재할 수 없다.
- ② 한 릴레이션의 튜플 사이에는 순서가 있다.
- ③ 한 속성의 값은 더 이상 분해할 수 없는 원자값이다.
- ④ 한 속성의 모든 값은 같은 도메인에서 온다.
정답 및 해설 보기
정답 ②
튜플은 무순서(5대 특성 ②) — '먼저 들어온 튜플이 위'는 의미 없다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 옳음 | 튜플 유일성(같은 튜플 ❌) |
| ② | 정답(틀린 것) | 튜플 무순서 |
| ③ | 옳음 | 속성 원자성 = 1NF |
| ④ | 옳음 | 도메인 동일 |
🔑 5대 특성 함정은 거의 항상 '순서 있다' 또는 '여러 값 가능' — "튜플은 유일·무순서, 속성은 무순서·원자성".
[기출 5 출제] 다음 중 릴레이션의 카디널리티(Cardinality), 즉 튜플(행) 수 의미에 해당하는 것은? (의미 분별)
- ① E-R 모델에서 두 개체 사이의 관계가 1:N이다.
- ② student 릴레이션의 튜플 개수가 50,000개이다.
- ③ student 릴레이션의 속성 개수가 5개이다.
- ④ student 릴레이션의 기본키는 학번이다.
정답 및 해설 보기
정답 ②
릴레이션 카디널리티 = 튜플(행) 수. '50,000개'처럼 숫자로 표기된 튜플 수가 정답.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 오답 | 1:N = 관계 카디널리티(관계 다중도) |
| ② | 정답 | 튜플 50,000개 = 릴레이션 카디널리티 |
| ③ | 오답 | 속성 5개 = 디그리 |
| ④ | 오답 | 키 정의 — 카디널리티와 무관 |
🔑 콜론(:)이 보이면 관계 다중도, 숫자가 보이면 튜플 수, 열은 디그리.
[기출 6 출제] 외래키(Foreign Key)에 대한 설명으로 옳지 않은 것은? (부정형)
- ① 다른 릴레이션의 기본키를 참조하는 속성이다.
- ② NULL 값을 가질 수 없다.
- ③ 여러 튜플이 같은 외래키 값을 가질 수 있다.
- ④ 참조 무결성 제약조건과 관련이 있다.
정답 및 해설 보기
정답 ②
외래키는 NULL 가능('관계 미결정' 상태 허용). NULL 금지는 기본키뿐.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 옳음 | 외래키 = 다른 PK 참조 |
| ② | 정답(틀린 것) | 외래키 NULL ✅, 금지는 기본키만 |
| ③ | 옳음 | 유일성 ❌ — 1:N에서 같은 FK 여러 번 |
| ④ | 옳음 | 외래키 = 참조 무결성 검사 대상 |
🔑 NULL ❌은 기본키만, 외래키는 NULL ✅ + 유일성 ❌.
[기출 7 출제] 학생(N) — 과목(M)의 N:M 관계를 관계 데이터 모델로 변환할 때 가장 적절한 방법은? (변환)
- ① 학생 테이블에 과목 컬럼을 콤마로 나열한다.
- ② 과목 테이블에 학생 외래키 하나만 추가한다.
- ③ 양쪽 외래키와 복합 기본키를 가진 연결 테이블을 별도로 만든다.
- ④ 하나의 테이블에 학생과 과목을 모두 펼쳐 저장한다.
정답 및 해설 보기
정답 ③
N:M은 가운데에 연결 테이블을 끼우고 양쪽 PK를 외래키로 가리키며, 그 둘을 묶어 복합 PK로 삼는다(enrollment).
| 선지 | 판정 | 근거 |
|---|---|---|
| ① | 오답 | 콤마 나열 = 원자성 위반(1NF ❌) |
| ② | 오답 | FK 하나만으론 1:N — N:M 표현 불가 |
| ③ | 정답 | 연결 테이블 + 양쪽 FK + 복합 PK |
| ④ | 오답 | 한 테이블에 펼치면 중복·이상현상 |
🔑 N:M은 연결 테이블 분해 — 양쪽 FK로 PK를 가리키고 복합 PK로 묶는다.
한 장 요약
| 영역 | 핵심 | 암기팁 |
|---|---|---|
| 관계 데이터 모델 | E.F. 코드(1970)·2차원 테이블·현재 주류 | 논리 모델 4종 중 계층형만 N:M ❌ |
| E-R 변환 4규칙 | 개체→테이블 / 속성→컬럼 / 다중값→별도 / 관계→분기 | 1:N은 N쪽에 FK |
| N:M 분해 | student·course·enrollment 연결 테이블 | 양쪽 FK + 복합 PK |
| 릴레이션 구조 | 스키마(헤더·고정) vs 인스턴스(본문·변함) | INSERT는 인스턴스만 |
| 튜플·속성 | 튜플=행·레코드·Row·Instance / 속성=열·필드·Column·Property | 4동의어 매칭 |
| 카디널리티 = 행 수 | 튜플 수·기수·매 순간 변함 | 카·기·행·튜플 |
| 디그리 = 열 수 | 속성 수·차수·거의 고정 | 디·차·열·속성 |
| └ 두 의미 분별 | 관계 다중도(콜론) vs 튜플 수(숫자) | 콜론은 관계, 카는 행, 디는 열 |
| 릴레이션 5대 특성 | 튜플 유일·무순서 / 속성 무순서·원자성 / 도메인 동일 | 원자성=1NF·튜플 무순서 함정 |
| 키 5종 | 슈퍼·후보·기본·대체·외래 | 슈후기대외 |
| └ 두 잣대 | 유일성(슈퍼부터) + 최소성(후보부터) | 슈퍼키 ⊃ 후보키 ⊃ 기본키 |
| └ NULL | 기본키만 NULL ❌ / 외래키 NULL ✅ | 외는 NULL 가능 |
| 무결성 3종 | 개체(기본키)·참조(외래키)·도메인(일반 속성) | 개참도 |
| └ 참조 4옵션 | RESTRICT(기본)·CASCADE·SET NULL·SET DEFAULT | 기본은 RESTRICT |
| └ 함정 | 트랜잭션·사용자·키 무결성 = ❌ | 개·참·도 3종만 |
🎯 합격 한 끗: 24강은 네 공식이 전부다 — 카·기·행(카디) / 디·차·열(디그리) / 슈후기대외(키 5종) / 개참도(무결성 3종). 시험 직전 함정 5쌍만 더 굴리면 끝 — 외래키 NULL ✅(금지는 기본키만) · 기본키 1개 · 무결성 개참도 3종(트랜잭션 ❌) · 튜플 무순서 · 콜론은 관계 다중도·숫자는 튜플 수. 이 다섯이면 24강 출제분의 90%는 즉답이다.
