통합 요약노트
Ch.9 데이터베이스 (필기 3과목)
관계형 모델, 키, 정규화, SQL, Access
이 챕터의 내용
데이터베이스 개념과 관계형 모델
데이터베이스(DB)와 DBMS는 이 문제를 구조적으로 해결하며, 필기 3과목의 첫 번째 관문입니다
데이터베이스(DB): 여러 사용자가 공유하여 사용할 수 있도록 통합·저장된 데이터의 집합. DBMS: 데이터베이스를 생성·관리·검색·보안·백업하는 소프트웨어 시스템.
DBMS 장점 4가지 (빈출): ① 데이터 중복 최소화 ② 데이터 무결성 보장 ③ 동시 접근 제어 ④ 보안 관리
스키마(Schema)는 데이터베이스의 구조를 정의한 것입니다. ANSI/SPARC 표준에 따라 3단계로 나뉩니다.
- DB 4대 특성: 통합성, 저장성, 공용성, 변화성
- DBMS 장점: 중복 최소화, 무결성 보장, 동시 접근 제어, 보안 관리
- 스키마 3단계: 외부(사용자 뷰) → 개념(전체 논리) → 내부(물리 저장)
- 데이터 독립성: 논리적(외부↔개념), 물리적(개념↔내부)
- 릴레이션=테이블, 튜플=행, 속성=열, 차수=열 수, 카디널리티=행 수
키와 무결성 제약조건
키(Key)와 무결성 제약조건은 DB 설계의 기둥이며 필기 매회 2~3문제 출제됩니다
키(Key)는 릴레이션에서 튜플을 유일하게 식별하기 위한 속성(들)의 집합입니다.
기본키 규칙 2가지: ① NULL 불가 (개체 무결성) ② 중복 불가 (유일성). 시험에서 "기본키에 NULL 허용?" → 아니오!
ER(Entity-Relationship) 모델은 데이터베이스를 개체(Entity)와 관계(Relationship)로 시각화한 설계 도구입니다.
- 키 포함 관계: 슈퍼키 ⊃ 후보키 ⊃ 기본키, 나머지 = 대체키
- 기본키: NULL 불가 + 중복 불가 + 릴레이션당 1개
- 외래키: 다른 릴레이션의 기본키를 참조, NULL 허용 가능
- 개체 무결성 = PK는 NULL 불가, 참조 무결성 = FK는 참조 PK에 존재
- ER 기호: □=개체, ○=속성, ◇=관계, 밑줄=PK
정규화 — 1NF·2NF·3NF
정규화(Normalization)는 이상 현상을 제거하는 테이블 분해 과정이며, 필기 매회 1~2문제 출제됩니다
잘못 설계된 테이블에서 데이터를 조작할 때 발생하는 비정상적 현상을 이상(Anomaly)이라 합니다.
정규화는 낮은 정규형 → 높은 정규형으로 테이블을 분해하는 과정입니다. 컴활 시험에서는 1NF·2NF·3NF까지만 출제됩니다.
암기법: 1NF=원자값, 2NF=부분종속 제거, 3NF=이행종속 제거. "원부이" (원자-부분-이행)
- 이상 현상 3가지: 삽입 이상, 삭제 이상, 갱신 이상
- 정규화 = 이상 현상 제거를 위한 테이블 분해 과정
- 1NF: 원자값 (다중값 제거)
- 2NF: 부분 함수 종속 제거 (복합키 일부에만 종속되는 속성 분리)
- 3NF: 이행 함수 종속 제거 (A→B→C에서 간접 종속 분리)
- 암기: '원부이' (원자-부분-이행)
SQL 기본 — SELECT·INSERT·UPDATE·DELETE
SQL(Structured Query Language)은 필기 3과목에서 매회 5~7문제가 출제되는 최대 비중 영역입니다
시험 빈출: "SELECT는 어떤 언어에 속하는가?" → DML. "CREATE TABLE은?" → DDL. "GRANT는?" → DCL.
LIKE 와일드카드: % = 0개 이상 문자, _ = 정확히 1문자. '김__' = 김 뒤 2글자. 시험 필수!
DROP vs DELETE vs TRUNCATE: DROP = 테이블 자체 삭제(DDL), DELETE = 행 삭제(DML), TRUNCATE = 모든 행 삭제+구조 유지(DDL). 시험 단골!
- SQL 분류: DDL(CREATE/ALTER/DROP), DML(SELECT/INSERT/UPDATE/DELETE), DCL(GRANT/REVOKE)
- SELECT 구조: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
- LIKE 와일드카드: % = 0개 이상, _ = 정확히 1문자
- UPDATE/DELETE에 WHERE 없으면 전체 행 대상 — 매우 위험!
- DROP(테이블 삭제) vs DELETE(행 삭제) vs TRUNCATE(전체 행 삭제, 구조 유지)
SQL 심화 — JOIN·서브쿼리·집계 함수
JOIN과 서브쿼리, 집계 함수는 SQL의 핵심이며 매회 3~4문제 출제됩니다
WHERE vs HAVING 구분 = 시험 매회 출제! WHERE = 개별 행 필터 (집계함수 불가), HAVING = 그룹 필터 (집계함수 가능)
ANY vs ALL 변환: > ANY = > MIN(서브쿼리), > ALL = > MAX(서브쿼리). 이 변환이 시험에 자주 나옵니다!
학생 테이블과 수강 테이블을 JOIN할 때, 수강 기록이 없는 학생도 표시하려면?
- INNER JOIN = 양쪽 매칭만, LEFT JOIN = 왼쪽 전부 + 오른쪽 NULL 가능
- 집계 함수: COUNT, SUM, AVG, MAX, MIN — NULL은 제외 (COUNT(*) 제외)
- WHERE = 행 필터 (집계함수 불가), HAVING = 그룹 필터 (집계함수 가능)
- 서브쿼리: 단일행(=, >, <), 다중행(IN, ANY, ALL)
- > ANY = > MIN, > ALL = > MAX 변환 공식 암기
Access 기초 — 테이블·쿼리·폼·보고서
Microsoft Access는 소규모 관계형 DB를 구축하는 도구이며, 필기에서 3~5문제 출제됩니다
폼 = 입력용 화면, 보고서 = 출력(인쇄)용 화면. 시험에서 "데이터 입력에 적합한 개체?" → 폼
관계 설정: 데이터베이스 도구 → 관계 → 테이블 추가 → 기본키 필드를 외래키 필드로 드래그. 참조 무결성 적용 체크 → 잘못된 데이터 입력 방지. 연속 업데이트/삭제 옵션도 설정 가능.
실행 쿼리 4가지: 추가(Append), 삭제(Delete), 업데이트(Update), 테이블 만들기(Make Table). 원본 데이터를 변경하므로 주의!
- 4대 개체: 테이블(저장), 쿼리(조회), 폼(입력), 보고서(인쇄)
- 주요 데이터 형식: 짧은텍스트, 숫자, 날짜, 통화, 예/아니오, 일련번호
- 필드 속성: 크기, 형식, 입력마스크, 유효성검사, 기본값, 인덱스
- 쿼리 종류: 선택, 매개변수, 크로스탭, 실행(추가/삭제/업데이트/테이블생성)
- 관계 설정: PK→FK 드래그 + 참조 무결성 체크 + 연속 업데이트/삭제 옵션
데이터베이스 모의고사 (20문항)
모의고사를 반복 풀어야 실전 감각이 잡힙니다. 틀린 문제 위주로 복습하세요!
1. 데이터베이스의 정의로 가장 적절한 것은?
2. 스키마 3단계 중 물리적 저장 구조를 정의하는 것은?
3. 관계형 데이터베이스에서 '열(Column)'에 해당하는 용어는?
트랜잭션 & 회복
트랜잭션은 'All or Nothing' 원칙으로 이 문제를 해결하며, 필기 시험에서 ACID와 회복 기법은 매회 1~2문항 출제됩니다
트랜잭션(Transaction)이란 데이터베이스에서 하나의 논리적 작업 단위를 구성하는 연산들의 집합입니다. 은행 이체 = '출금 + 입금'처럼, 반드시 모두 실행되거나 모두 취소되어야 합니다.
ACID 암기법: '원일격영' — 원자성·일관성·격리성·영속성. 시험에서 영문 약자(A·C·I·D)와 한글 설명을 매칭하는 문제가 빈출!
트랜잭션 상태 5가지: ① 활동(Active) → 트랜잭션 실행 중 ② 부분 완료(Partially Committed) → 마지막 연산 실행 직후 (아직 COMMIT 전) ③ 완료(Committed) → COMMIT 수행, 결과 영구 반영 ④ 실패(Failed) → 오류 발생, 더 이상 진행 불가 ⑤ 철회(Aborted) → ROLLBACK 수행, 트랜잭션 이전 상태로 복원
데이터베이스 설계 & ER 모델
ER 모델은 현실 세계를 DB 구조로 옮기는 첫 단계이며, ER 기호 해석과 스키마 변환은 필기 단골 유형입니다
데이터베이스 설계 단계: ① 요구 조건 분석 → 사용자 요구사항 파악 ② 개념적 설계 → ER 다이어그램 작성 (DBMS 독립적) ③ 논리적 설계 → 관계 스키마로 변환 (DBMS 종류 고려) ④ 물리적 설계 → 저장 구조·인덱스 설계 (성능 고려)
개념적 설계 = ER 다이어그램 (추상적, DBMS 무관) 논리적 설계 = 릴레이션 스키마 변환 (DBMS 종류에 따라) 물리적 설계 = 인덱스·파일 조직 (성능 최적화) → 시험에서 '개념적 설계의 결과물은?' → ER 다이어그램!
약한 개체(Weak Entity): • 자체적으로 유일하게 식별할 수 없는 개체 (이중 사각형) • 소유 개체(Owner Entity)에 의존하여 존재 • 부분키(Partial Key): 소유 개체 키와 결합해야 유일 식별 • 예: '부양가족' 개체 — '사원' 없이는 존재 불가
- 1:1 관계 → 전체 참여 쪽에 외래키 추가
- 1:N 관계 → N쪽 테이블에 외래키 추가 (최빈출)
- N:M 관계 → 별도 관계 테이블 생성 (양쪽 PK를 FK로)
- 약한 개체 → 소유 개체 PK + 부분키 = 복합 PK
- 다중값 속성 → 별도 테이블로 분리
Access 폼 & 보고서 심화
Access의 폼·보고서·쿼리·매크로는 실기에서도 빈출이며, 필기에서는 유형 구분 문제가 출제됩니다
폼(Form)은 데이터를 입력·수정·조회하기 위한 화면 인터페이스입니다. Access에서는 5가지 보기 유형을 제공합니다.
분할 폼 = 위: 단일 폼 + 아래: 데이터시트. 시험에서 '상하 분할 표시' → 분할 폼!
콤보 vs 목록: 콤보 상자 = 드롭다운 + 직접 입력 가능 / 목록 상자 = 목록에서만 선택, 직접 입력 불가. 이 차이가 시험 포인트!
SQL 기출 패턴 30선
30문항 반복 드릴로 기출 패턴을 체화하여 실전에서 자동으로 풀 수 있게 합니다
1. 다음 SQL의 실행 결과로 올바른 것은? SELECT 이름 FROM 학생 WHERE 학과 = '컴퓨터공학' AND 학년 >= 3;
2. 이름이 '김'으로 시작하는 학생을 검색하는 SQL의 빈칸을 채우시오. SELECT * FROM 학생 WHERE 이름 ___ '김%';
3. 다음 SQL의 실행 결과로 올바른 것은? SELECT * FROM 학생 WHERE 학년 BETWEEN 2 AND 4;
핵심 용어 모음
통합성(Integrated)
최소한의 중복으로 데이터를 통합 관리
저장성(Stored)
컴퓨터가 접근 가능한 매체에 저장
공용성(Shared)
여러 사용자가 동시에 접근·사용
변화성(Operational)
삽입·삭제·수정으로 항상 최신 상태 유지
DISTINCT
중복 제거: SELECT DISTINCT 학과 FROM 학생
BETWEEN
범위: WHERE 성적 BETWEEN 80 AND 100
IN
목록: WHERE 학과 IN ('컴공', '전자')
LIKE
패턴: WHERE 이름 LIKE '김%' (김으로 시작)
IS NULL
NULL 확인: WHERE 전화번호 IS NULL
필드 크기
텍스트 최대 길이 / 숫자 정밀도 설정
형식(Format)
표시 형식 지정 (날짜, 숫자 서식)
입력 마스크
입력 패턴 강제 (전화번호, 우편번호)
비교 정리
| 항목 | 단계 | 정의 | 대응 |
|---|---|---|---|
| 외부 스키마 | 개별 사용자 관점의 논리 구조 | 서브스키마, 뷰(View) | |
| 개념 스키마 | 조직 전체 관점의 논리 구조 | 전체 DB 구조, 제약조건 | |
| 내부 스키마 | 물리적 저장 구조 | 인덱스, 저장 방식, 레코드 배치 |
| 항목 | 관계형 용어 | 일반 용어 | 파일 시스템 |
|---|---|---|---|
| 릴레이션(Relation) | 테이블 | 파일 | |
| 튜플(Tuple) | 행(Row) | 레코드 | |
| 속성(Attribute) | 열(Column) | 필드 | |
| 도메인(Domain) | 속성이 가질 수 있는 값의 범위 | 데이터 타입 | |
| 차수(Degree) | 속성(열)의 수 | 필드 수 | |
| 카디널리티(Cardinality) | 튜플(행)의 수 | 레코드 수 |
| 항목 | 키 | 정의 | 특징 |
|---|---|---|---|
| 슈퍼키 | 유일성을 만족하는 속성 집합 | 최소성 불필요 (불필요 속성 포함 가능) | |
| 후보키 | 유일성 + 최소성을 만족 | 기본키가 될 수 있는 후보 | |
| 기본키(PK) | 후보키 중 선택된 대표 키 | NULL 불가, 중복 불가 | |
| 대체키 | 후보키 중 기본키로 선택되지 않은 키 | 보조 식별자 역할 | |
| 외래키(FK) | 다른 릴레이션의 기본키를 참조 | 참조 무결성의 핵심 |
| 항목 | 무결성 | 규칙 | 위반 예 |
|---|---|---|---|
| 개체 무결성 | 기본키는 NULL이 될 수 없다 | 학번이 NULL인 학생 레코드 | |
| 참조 무결성 | 외래키 값은 참조 릴레이션의 기본키에 존재하거나 NULL이어야 한다 | 존재하지 않는 학과코드 입력 | |
| 도메인 무결성 | 속성 값이 정의된 도메인 범위 내여야 한다 | 성별 필드에 '3' 입력 |
| 항목 | 기호 | 이름 | 설명 |
|---|---|---|---|
| 사각형 □ | 개체(Entity) | 학생, 과목, 부서 등 실체 | |
| 타원 ○ | 속성(Attribute) | 이름, 학번, 전화번호 등 | |
| 마름모 ◇ | 관계(Relationship) | 수강, 소속, 담당 등 | |
| 밑줄 속성 | 기본키 속성 | 유일 식별자 | |
| 이중 타원 | 다중값 속성 | 취미(여러 개 가능) | |
| 점선 타원 | 유도 속성 | 나이(생년월일에서 계산) |
| 항목 | 이상 | 설명 | 예 |
|---|---|---|---|
| 삽입 이상 | 불필요한 데이터도 함께 삽입해야 함 | 과목 등록 없이 교수 정보만 넣을 수 없음 | |
| 삭제 이상 | 필요한 데이터까지 함께 삭제됨 | 수강 취소 시 교수 정보도 사라짐 | |
| 갱신 이상 | 일부만 수정하면 데이터 불일치 | 교수 연락처 변경 시 일부만 반영 |
| 항목 | 단계 | 조건 | 제거 대상 |
|---|---|---|---|
| 1NF | 모든 속성이 원자값(Atomic Value) | 반복 그룹, 다중값 제거 | |
| 2NF | 1NF + 부분 함수 종속 제거 | 기본키 일부에만 종속되는 속성 분리 | |
| 3NF | 2NF + 이행 함수 종속 제거 | A→B→C에서 A→C 간접 종속 분리 |
| 항목 | 분류 | 풀네임 | 명령어 | 역할 |
|---|---|---|---|---|
| DDL | Data Definition Language | CREATE, ALTER, DROP | 테이블 구조 정의 | |
| DML | Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE | 데이터 조작 | |
| DCL | Data Control Language | GRANT, REVOKE | 권한 제어 |
| 항목 | JOIN | 결과 | NULL 포함 |
|---|---|---|---|
| INNER JOIN | 양쪽 모두 매칭되는 행만 | 없음 | |
| LEFT OUTER JOIN | 왼쪽 전부 + 오른쪽 매칭 | 오른쪽이 NULL | |
| RIGHT OUTER JOIN | 오른쪽 전부 + 왼쪽 매칭 | 왼쪽이 NULL | |
| FULL OUTER JOIN | 양쪽 모두 전부 | 양쪽 모두 NULL 가능 | |
| CROSS JOIN | 모든 행의 조합 (곱집합) | 없음 |
| 항목 | 개체 | 역할 | 엑셀 비유 |
|---|---|---|---|
| 테이블 | 데이터를 저장하는 기본 구조 | 워크시트 | |
| 쿼리 | 데이터를 조회·가공하는 질의 | 필터+수식 | |
| 폼 | 데이터 입력·수정을 위한 화면 | 입력 양식 | |
| 보고서 | 인쇄 목적의 출력 형식 | 인쇄 레이아웃 |
| 항목 | 형식 | 설명 | 예 |
|---|---|---|---|
| 짧은 텍스트 | 최대 255자 문자열 | 이름, 주소 | |
| 긴 텍스트 | 최대 약 1GB 메모 | 비고, 상세 설명 | |
| 숫자 | 정수/실수 (다양한 크기) | 수량, 점수 | |
| 날짜/시간 | 날짜와 시간 | 입사일, 주문일 | |
| 통화 | 소수점 4자리 고정 숫자 | 가격, 급여 | |
| 예/아니오 | True/False (체크박스) | 회원여부, 승인 | |
| 일련 번호 | 자동 증가 숫자 (PK용) | 고객번호, 주문번호 | |
| OLE 개체 | 그림, 파일 등 바이너리 | 사진, 문서 | |
| 하이퍼링크 | URL 링크 | 웹사이트, 이메일 |
| 항목 | 쿼리 | 역할 | 특징 |
|---|---|---|---|
| 선택 쿼리 | 조건에 맞는 데이터 조회 | 가장 기본, SELECT에 해당 | |
| 매개변수 쿼리 | 실행 시 조건값을 입력받아 조회 | [학과를 입력하세요] 형식 | |
| 크로스탭 쿼리 | 행/열로 데이터를 요약 | 피벗 테이블과 유사 | |
| 실행(동작) 쿼리 | 데이터를 변경(추가/삭제/업데이트/테이블생성) | 주의: 원본 데이터 변경! |
| 항목 | 속성 | 영문 | 설명 |
|---|---|---|---|
| 원자성 | Atomicity | All or Nothing — 모두 실행 또는 모두 취소 | |
| 일관성 | Consistency | 트랜잭션 전후로 DB 상태가 일관성 유지 | |
| 격리성 | Isolation | 동시 실행 트랜잭션이 서로 간섭하지 않음 | |
| 영속성 | Durability | 완료된 트랜잭션 결과는 영구 반영 |
| 항목 | 유형 | 영문 | 허용 동작 | 동시 접근 |
|---|---|---|---|---|
| 공유 잠금 | Shared Lock (S-Lock) | 읽기(Read)만 가능 | 다른 S-Lock 허용, X-Lock 불가 | |
| 배타 잠금 | Exclusive Lock (X-Lock) | 읽기 + 쓰기 모두 가능 | 모든 Lock 불가 (독점) |
| 항목 | 기법 | 특징 | 장점 |
|---|---|---|---|
| 지연 갱신 | COMMIT 전까지 DB에 반영하지 않음 (로그만 기록) | UNDO 불필요 (Redo만) | |
| 즉시 갱신 | 트랜잭션 실행 중에도 DB에 바로 반영 | Undo + Redo 모두 필요 | |
| 검사점(Checkpoint) | 주기적으로 검사점을 설정하여 회복 범위 축소 | 회복 시간 단축 | |
| 그림자 페이징 | DB를 Current/Shadow 두 페이지 테이블로 관리 | 로그 불필요 |
| 항목 | 기호 | 도형 | 설명 |
|---|---|---|---|
| 개체(Entity) | 사각형 | 독립적으로 존재하는 객체 (학생, 교수) | |
| 속성(Attribute) | 타원형 | 개체의 특성 (이름, 학번) | |
| 관계(Relationship) | 마름모 | 개체 간의 연관 (수강, 지도) | |
| 키 속성 | 밑줄 타원 | 개체를 유일하게 식별 (학번) | |
| 다중값 속성 | 이중 타원 | 여러 값 가능 (취미, 전화번호) | |
| 유도 속성 | 점선 타원 | 다른 속성에서 계산 (나이 ← 생년월일) |
| 항목 | 유형 | 의미 | 예시 |
|---|---|---|---|
| 1:1 | 한 개체가 다른 개체 하나와만 관계 | 국민 — 주민번호 | |
| 1:N | 한 개체가 여러 개체와 관계 | 학과 — 학생 (한 학과에 여러 학생) | |
| N:M | 양쪽 모두 여러 개체와 관계 | 학생 — 과목 (수강 관계) |
| 항목 | 유형 | 특징 | 용도 |
|---|---|---|---|
| 기본 폼(단일 폼) | 한 번에 한 레코드씩 표시 | 상세 입력/조회 | |
| 연속 폼 | 여러 레코드를 목록처럼 표시 | 목록 조회 + 편집 | |
| 분할 폼 | 상단: 단일 폼 / 하단: 데이터시트 | 조회 + 상세 보기 | |
| 데이터시트 | 엑셀처럼 행/열 형태로 표시 | 대량 데이터 비교 | |
| 피벗 테이블/차트 | 데이터를 피벗 형태로 집계 | 분석·시각화 |
| 항목 | 컨트롤 | 설명 | 예시 |
|---|---|---|---|
| 텍스트 상자 | 데이터 입력/표시 (가장 기본) | 이름, 학번 | |
| 콤보 상자 | 드롭다운 목록 + 직접 입력 가능 | 학과 선택 | |
| 목록 상자 | 항목 목록 표시 (직접 입력 불가) | 과목 목록 | |
| 명령 단추 | 클릭 시 동작 실행 | 저장, 인쇄, 닫기 | |
| 확인란(체크박스) | Yes/No 값 입력 | 수강 여부 | |
| 옵션 그룹 | 여러 옵션 중 하나 선택 | 성별 선택 |
| 항목 | 기능 | 설명 |
|---|---|---|
| 그룹화 | 특정 필드 기준으로 데이터를 묶어 표시 (학과별, 연도별) | |
| 정렬 | 그룹 내 또는 전체 레코드를 오름/내림차순 정렬 | |
| 계산 컨트롤 | =Sum(), =Count(), =Avg() 등 집계 함수 사용 | |
| 페이지 나누기 | 그룹 변경 시 새 페이지에서 시작하도록 설정 | |
| 머리글/바닥글 | 보고서·페이지·그룹 각 수준의 머리글/바닥글 영역 |
| 항목 | 유형 | 특징 | 비유 |
|---|---|---|---|
| 선택 쿼리 | 조건에 맞는 레코드를 검색·표시 (가장 기본) | 검색 필터 | |
| 크로스탭 쿼리 | 행/열 교차로 데이터 집계 (피벗 테이블과 유사) | 피벗 테이블 | |
| 매개변수 쿼리 | 실행 시 사용자에게 값을 입력받아 조건으로 사용 | 검색 대화상자 | |
| 실행 쿼리(Action) | 테이블 만들기/추가/업데이트/삭제 수행 | 일괄 작업 |
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 코스 시작하기