3과목 데이터베이스구축
기출 160문항(과목3)의 빈출 순서는 이렇다 — SQL(38) · 무결성(32) · 관계(30) · 로킹(30) · 릴레이션(20) · 이상·정규화(21) · 투명성(15).
다른 과목과 결이 다른 점 하나 — 손으로 계산하거나 문법을 직접 읽는 문항이 많다. SQL 38회,
WHERE24회,SELECT23회가 실제로 지문에 등장했다. 그래서 이 편은 개념 정의보다 문법과 계산 절차에 무게를 뒀다.
0. 이 과목의 지형
논리 데이터베이스 설계 관계 모델 · 키 · 무결성 · 정규화 · 관계대수
물리 데이터베이스 설계 인덱스 · 파티션 · 뷰 · 반정규화
SQL 응용 DDL · DML · DCL · TCL · 조인 · 서브쿼리 · 트리거
데이터 전환·품질 트랜잭션 · 로킹 · 회복 · 분산 DB · 데이터 활용
1. 데이터베이스 기본
정의와 특성
정의 통합(Integrated) · 저장(Stored) · 운영(Operational) · 공용(Shared) 데이터
특성 실시간 접근성 · 계속적 변화 · 동시 공용 · 내용에 의한 참조
함정 — 데이터베이스는 주소가 아니라 내용으로 참조한다(내용에 의한 참조). 그리고 "정적으로 고정된 데이터의 집합"은 틀린 설명이다 — 계속 변화한다.
DBMS 의 필수 기능 셋
| 기능 | 담당 언어 |
|---|---|
| 정의(Definition) | DDL — 구조를 만든다 |
| 조작(Manipulation) | DML — 데이터를 넣고 꺼낸다 |
| 제어(Control) | DCL — 권한·무결성·동시성 |
| 언어 | 명령 |
|---|---|
| DDL | CREATE · ALTER · DROP · TRUNCATE |
| DML | SELECT · INSERT · UPDATE · DELETE |
| DCL | GRANT · REVOKE |
| TCL | COMMIT · ROLLBACK · SAVEPOINT |
함정 —
COMMIT·ROLLBACK을 DCL 로 묶은 교재도 있으나, 기출은 대체로 DCL(권한) / TCL(트랜잭션) 을 구분해 낸다.SELECT는 DML 이다.
스키마 3계층 — 누구의 관점인가로 외운다
| 스키마 | 관점 | 내용 |
|---|---|---|
| 외부(External) | 사용자·응용 프로그램 | 개인이 보는 뷰. 여러 개 존재 |
| 개념(Conceptual) | 조직 전체 | 전체 논리 구조. 하나만 존재 |
| 내부(Internal) | 저장 장치 | 물리적 저장 구조·인덱스·레코드 배치 |
데이터 독립성
논리적 독립성 개념 스키마가 바뀌어도 외부 스키마(응용)는 영향 없음
물리적 독립성 내부 스키마가 바뀌어도 개념 스키마는 영향 없음
DBA(데이터베이스 관리자) — 스키마 정의, 저장 구조·접근 방법 결정, 보안·권한 부여, 백업·회복 정책 수립, 성능 감시(3회 출제).
2. 관계 데이터 모델
관계형 데이터베이스(Relational Database) 는 데이터를 2차원 표(릴레이션) 로 표현하는 모델이다. 계층형·네트워크형 모델과 달리 포인터가 아니라 값으로 관계를 표현하기 때문에 구조가 단순하고 SQL 로 다룰 수 있다.
용어 — 차수와 카디널리티가 계산으로 나온다
| 용어 | 뜻 |
|---|---|
| 릴레이션(Relation) | 표(테이블) |
| 튜플(Tuple) | 행(row), 레코드 |
| 속성(Attribute) | 열(column), 필드 |
| 도메인(Domain) | 속성이 가질 수 있는 값의 집합 |
| 차수(Degree) | 속성의 개수 |
| 카디널리티(Cardinality) | 튜플의 개수 |
| 릴레이션 스키마 | 릴레이션의 구조(속성 이름·타입) — 내연 |
| 릴레이션 인스턴스 | 특정 시점의 튜플 집합 — 외연 |
함정 — 차수는 열, 카디널리티는 행이다. 이 둘을 바꿔 낸 문항이 반복 출제된다.
릴레이션의 특징
튜플은 중복되지 않는다 · 튜플의 순서는 무의미
속성의 순서도 무의미 · 속성 값은 원자값(더 쪼갤 수 없다)
속성 이름은 릴레이션 안에서 유일
키 5종 — 유일성과 최소성으로 갈린다
| 키 | 유일성 | 최소성 | 설명 |
|---|---|---|---|
| 슈퍼키(Super Key) | ✅ | ❌ | 유일하게 식별하지만 불필요한 속성이 붙어도 됨 |
| 후보키(Candidate Key) | ✅ | ✅ | 유일성 + 최소성을 모두 만족 |
| 기본키(Primary Key) | ✅ | ✅ | 후보키 중 선정한 것. NULL 불가·중복 불가 |
| 대체키(Alternate Key) | ✅ | ✅ | 후보키 중 기본키가 되지 못한 것 |
| 외래키(Foreign Key) | — | — | 다른 릴레이션의 기본키를 참조. NULL 허용 가능 |
함정 둘 — ① 슈퍼키는 최소성을 만족하지 않는다. ② 외래키는 NULL 이 될 수 있다 (참조 대상이 없는 상태). 기본키는 NULL 이 될 수 없다.
3. 무결성 (무결성 32회 — 이 과목 2위)
| 무결성 | 규칙 |
|---|---|
| 개체 무결성(Entity) | 기본키는 NULL 이 될 수 없고 중복될 수 없다 |
| 참조 무결성(Referential) | 외래키는 참조하는 릴레이션의 기본키에 존재하거나 NULL |
| 도메인 무결성(Domain) | 속성 값은 정의된 도메인에 속해야 한다 |
| 사용자 정의 무결성 | 업무 규칙에 따른 제약 (CHECK) |
| 키 무결성 | 릴레이션에 최소 하나의 키가 존재 |
참조 동작 — 부모 행을 지우거나 바꿀 때
CASCADE 참조하는 자식 행까지 함께 삭제·변경
RESTRICT 자식이 있으면 삭제·변경을 취소 (= NO ACTION)
SET NULL 자식의 외래키를 NULL 로
SET DEFAULT 자식의 외래키를 기본값으로
함정 —
DROP TABLE 학생 CASCADE;는 이 테이블을 참조하는 것까지 함께 삭제,RESTRICT는 참조가 있으면 삭제하지 않는다. 이 두 옵션의 동작을 바꿔 낸 문항이 단골이다.
4. 관계대수와 관계해석 (관계대수 6회 · 관계해석 2회)
관계대수는 절차적(어떻게 구하는지), 관계해석은 비절차적(무엇을 원하는지)이다. 관계해석은 수학의 술어 해석(predicate calculus) 에 기반하며 튜플·도메인 관계해석으로 나뉜다.
관계해석의 논리 기호 — 기호 자체를 묻는다
| 기호 | 이름 | 뜻 |
|---|---|---|
| ∀ | 전체(보편) 한정자 | "모든 것에 대하여" (for all) |
| ∃ | 존재 한정자 | "존재한다" (there exists) |
∧ ∨ ¬ | AND · OR · NOT | 논리 연산 |
∈ ⊂ | 원소 · 부분집합 | 집합 기호 (한정자가 아니다) |
함정 — "모든 것에 대하여"는 ∀ 이고 ∃ 는 "존재한다"다. 그리고
∈·⊂는 집합 기호라서 한정자 보기로 섞여 나온다.
순수 관계 연산자 4개
| 연산자 | 기호 | 뜻 |
|---|---|---|
| SELECT | σ (시그마) | 조건을 만족하는 튜플(행) 을 고른다 |
| PROJECT | π (파이) | 지정한 속성(열) 만 뽑는다 |
| JOIN | ⋈ (보타이) | 공통 속성으로 두 릴레이션을 연결 |
| DIVISION | ÷ | R 의 튜플 중 S 의 모든 값과 짝을 이루는 것 |
함정 — σ 는 행, π 는 열이다. SQL 의
SELECT절이 열을 고르는 것과 관계대수의 SELECT 가 행을 고르는 것이 반대로 헷갈린다. 기출이 노리는 지점이다. DIVISION(5회 출제)은 "모든 ~을 수강한 학생" 유형의 질의에 대응한다.
일반 집합 연산자 4개 — 차수·카디널리티 계산
| 연산 | 기호 | 결과 차수 | 결과 카디널리티 |
|---|---|---|---|
| 합집합 | ∪ | 그대로 | 최대 n + m (중복 제거) |
| 교집합 | ∩ | 그대로 | 최대 min(n, m) |
| 차집합 | − | 그대로 | 최대 n |
| 카티션 프로덕트 | × | 두 차수의 합 | 두 카디널리티의 곱 |
계산 예 — 차수 3·카디널리티 4 인 R 과 차수 2·카디널리티 5 인 S 의 카티션 프로덕트는 차수 5, 카디널리티 20. 합집합·교집합·차집합은 합집합 호환(차수와 도메인이 같아야) 조건이 필요하다.
5. 함수 종속과 정규화 (이상 21회 · 정규화)
이상(Anomaly) 세 가지
| 이상 | 언제 |
|---|---|
| 삽입 이상 | 원하지 않는 값까지 함께 넣어야 삽입이 되는 경우 |
| 삭제 이상 | 하나를 지우면 관련 없는 정보까지 사라지는 경우(연쇄 삭제) |
| 갱신 이상 | 중복된 값 중 일부만 고쳐져 불일치가 생기는 경우 |
함수 종속
X → Y X 가 결정되면 Y 가 유일하게 결정된다. X 는 결정자(Determinant)
완전 함수 종속 Y 가 X 전체에 종속 (X 의 일부만으로는 결정 불가)
부분 함수 종속 Y 가 X 의 일부에만 종속
이행 함수 종속 X → Y, Y → Z 이면 X → Z
정규화 단계 — "무엇을 제거하는가"로 외운다
| 단계 | 조건 | 제거 대상 |
|---|---|---|
| 1NF | 모든 속성이 원자값 | 반복 그룹·다중값 |
| 2NF | 1NF + 부분 함수 종속 제거 | 부분 종속 |
| 3NF | 2NF + 이행 함수 종속 제거 | 이행 종속 |
| BCNF | 3NF + 모든 결정자가 후보키 | 후보키가 아닌 결정자 |
| 4NF | BCNF + 다치 종속 제거 | 다치(다중값) 종속 |
| 5NF | 4NF + 조인 종속 제거 | 조인 종속 |
암기 도우미 — 도부이결다조 (도메인 원자값 → 부분 → 이행 → 결정자 → 다치 → 조인).
함정 — BCNF 는 3NF 보다 강한 조건이며 "모든 결정자가 후보키" 가 정의다. 그리고 정규화의 목적은 중복 제거와 이상 현상 방지이며, 정규화를 진행하면 조인이 늘어 조회 성능은 떨어질 수 있다는 점도 그대로 나온다.
반정규화(De-normalization)
성능을 위해 의도적으로 중복을 허용하는 설계. 테이블 병합·분할, 중복 칼럼 추가, 파생 칼럼 추가, 이력 테이블 반정규화 등. 정규화를 하지 않은 것과는 다르다 — 대가(정합성 관리 책임)를 알고 선택한 것이다.
6. SQL — 이 과목 최다 출제(38회)
DDL
CREATE TABLE 학생 (
학번 CHAR(8) PRIMARY KEY,
이름 VARCHAR(20) NOT NULL,
학과 VARCHAR(20),
학년 INT CHECK (학년 BETWEEN 1 AND 4),
등록일 DATE DEFAULT SYSDATE,
FOREIGN KEY (학과) REFERENCES 학과(학과명) ON DELETE SET NULL
);
ALTER TABLE 학생 ADD 전화 VARCHAR(20); -- 속성 추가
ALTER TABLE 학생 MODIFY 이름 VARCHAR(30); -- 속성 변경
ALTER TABLE 학생 DROP COLUMN 전화; -- 속성 삭제
DROP TABLE 학생 CASCADE; -- 참조까지 함께 삭제
DROP TABLE 학생 RESTRICT; -- 참조가 있으면 삭제 취소
TRUNCATE TABLE 학생; -- 구조는 남기고 데이터 전체 삭제(롤백 불가)
함정 —
ALTER의 키워드는ADD/MODIFY(또는ALTER COLUMN) /DROP이다.UPDATE는 데이터를 바꾸는 DML 이고, 구조를 바꾸는 건ALTER다.
DML — SELECT 의 문법 순서와 실행 순서
SELECT DISTINCT 학과, COUNT(*) AS 인원
FROM 학생
WHERE 학년 >= 2
GROUP BY 학과
HAVING COUNT(*) >= 3
ORDER BY 인원 DESC;
문법 순서 SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
실행 순서 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
핵심 함정 —
WHERE는 그룹 이전,HAVING은 그룹 이후에 걸린다. 그래서WHERE COUNT(*) >= 3은 오류이고HAVING에 써야 한다.
WHERE 절 연산자
WHERE 학년 BETWEEN 2 AND 3 -- 2, 3 포함(양 끝 포함)
WHERE 학과 IN ('컴공', '전자')
WHERE 이름 LIKE '김%' -- 김으로 시작 ( % = 0자 이상, _ = 정확히 1자 )
WHERE 전화 IS NULL -- NULL 비교는 = 가 아니라 IS
WHERE NOT (학년 = 1)
WHERE EXISTS (SELECT 1 FROM 수강 WHERE 수강.학번 = 학생.학번)
함정 —
NULL은= NULL로 비교할 수 없다. 반드시IS NULL/IS NOT NULL. 그리고LIKE '_김%'은 두 번째 글자가 김.%와_를 바꿔 낸다.
집계 함수와 NULL
| 함수 | NULL 처리 |
|---|---|
COUNT(*) | NULL 인 행도 센다 |
COUNT(칼럼) | 그 칼럼이 NULL 인 행은 제외 |
SUM · AVG · MAX · MIN | NULL 은 무시하고 계산 |
함정 —
AVG(점수)는 NULL 을 0으로 보지 않고 분모에서도 제외한다.COUNT(*)와COUNT(칼럼)의 결과가 다를 수 있다는 것이 그대로 문항이 된다(NULL 19회 출제).
INSERT · UPDATE · DELETE
INSERT INTO 학생 (학번, 이름, 학년) VALUES ('20260001', '홍길동', 1);
INSERT INTO 졸업생 SELECT * FROM 학생 WHERE 학년 = 4; -- 조회 결과를 그대로 삽입
UPDATE 학생 SET 학년 = 학년 + 1 WHERE 학년 < 4;
DELETE FROM 학생 WHERE 학번 = '20260001';
DELETE FROM 학생; -- 전체 행 삭제(구조는 남는다)
함정 —
DELETE FROM 학생은 테이블을 지우는 것이 아니라 행을 지운다. 테이블 자체를 없애는 것은DROP TABLE. 이 셋(DELETE/DROP/TRUNCATE)의 차이가 단골이다.
조인
-- 내부 조인 (매칭되는 행만)
SELECT s.이름, c.과목명
FROM 학생 s JOIN 수강 c ON s.학번 = c.학번;
-- 왼쪽 외부 조인 (왼쪽은 전부, 짝 없으면 NULL)
SELECT s.이름, c.과목명
FROM 학생 s LEFT OUTER JOIN 수강 c ON s.학번 = c.학번;
-- 자연 조인 (같은 이름 칼럼으로 자동 결합, 중복 칼럼 하나만)
SELECT * FROM 학생 NATURAL JOIN 수강;
-- 교차 조인 (카티션 프로덕트)
SELECT * FROM 학생 CROSS JOIN 학과;
함정 — 외부 조인에서 오른쪽 테이블 조건을
WHERE에 쓰면 내부 조인이 되어 버린다. 그 조건은ON절에 넣어야 한다. 그리고 자연 조인은 공통 칼럼이 하나로 합쳐진다.
집합 연산과 서브쿼리
SELECT 학번 FROM 재학생 UNION SELECT 학번 FROM 졸업생; -- 중복 제거
SELECT 학번 FROM 재학생 UNION ALL SELECT 학번 FROM 졸업생; -- 중복 유지
SELECT 학번 FROM 재학생 INTERSECT SELECT 학번 FROM 장학생;
SELECT 학번 FROM 재학생 EXCEPT SELECT 학번 FROM 휴학생; -- MINUS
-- 서브쿼리
SELECT 이름 FROM 학생
WHERE 학번 IN (SELECT 학번 FROM 수강 WHERE 과목 = 'DB');
뷰(View)
CREATE VIEW 우수학생 AS
SELECT 학번, 이름 FROM 학생 WHERE 학년 >= 3;
DROP VIEW 우수학생 CASCADE;
| 장점 | 단점 |
|---|---|
| 논리적 독립성 제공 | 삽입·갱신·삭제에 제약이 많다 |
| 접근 제어로 보안 향상 | 독립적인 인덱스를 가질 수 없다 |
| 복잡한 질의를 단순화 | 정의를 변경할 수 없다 (ALTER VIEW 불가 → DROP 후 재생성) |
함정 — 뷰는 ALTER 로 변경할 수 없다는 점이 자주 나온다. 그리고 뷰가 참조하는 기본 테이블이 삭제되면 뷰도 자동으로 삭제된다.
DCL — 권한
GRANT SELECT, UPDATE ON 학생 TO 사용자1 WITH GRANT OPTION; -- 재부여 권한까지
REVOKE SELECT ON 학생 FROM 사용자1 CASCADE; -- 전파된 권한까지 회수
GRANT ALL ON 학생 TO PUBLIC;
함정 —
WITH GRANT OPTION은 받은 사람이 다시 남에게 줄 수 있게 하는 옵션.REVOKE ... CASCADE는 그렇게 전파된 권한까지 함께 회수한다.
TCL 과 저장 프로그램
SAVEPOINT sp1;
ROLLBACK TO sp1; -- 지정 시점까지만 되돌린다
COMMIT; -- 확정
| 객체 | 뜻 |
|---|---|
| 트리거(Trigger) | 삽입·수정·삭제 이벤트가 발생하면 자동 실행되는 프로시저 (4회) |
| 프로시저(Procedure) | 미리 컴파일해 저장한 SQL 묶음, 호출로 실행 (2회) |
| 사용자 정의 함수 | 값을 반환한다 (프로시저는 반환이 목적이 아니다) |
| 커서(Cursor) | 질의 결과를 한 행씩 처리하는 포인터 |
함정 — 트리거는 직접 호출하지 않고 이벤트로 실행된다. 프로시저와 함수의 차이는 반환값 유무다.
7. 트랜잭션과 동시성 제어 (로킹 30회 · "단위가" 17회)
ACID
| 특성 | 뜻 |
|---|---|
| 원자성(Atomicity) | 전부 반영되거나 전부 취소 |
| 일관성(Consistency) | 실행 전후 데이터가 모순 없는 상태 유지 |
| 격리성(Isolation) | 실행 중 다른 트랜잭션이 중간 결과를 볼 수 없다 |
| 영속성(Durability) | 성공한 트랜잭션의 결과는 영구 보존 |
상태 전이
활동(Active) → 부분 완료(Partially Committed) → 완료(Committed)
↘ 실패(Failed) → 철회(Aborted)
로킹(Locking) — 단위 크기가 핵심 문항
공유 락(S, Shared) 읽기용. 여러 트랜잭션이 동시에 가질 수 있다
배타 락(X, Exclusive) 쓰기용. 하나만 가질 수 있고 공유 락과도 공존 못 한다
로킹 단위(Granularity)의 트레이드오프 — 이 표가 그대로 문제다
| 로킹 단위 | 로크 수 | 병행성(동시성) | 오버헤드 |
|---|---|---|---|
| 크다 (DB·테이블) | 적다 | 낮다 | 낮다(관리 쉬움) |
| 작다 (레코드·필드) | 많다 | 높다 | 높다(관리 복잡) |
함정 — "로킹 단위가 크면 병행성이 높아진다"는 틀린 보기다. 단위가 크면 한 번에 많이 잠그니 동시성은 떨어지고 관리는 쉬워진다. 기출에서 "단위가"가 17회 등장할 만큼 이 표 하나로 나오는 문항이 많다.
2단계 로킹 규약(2PL)
확장(성장) 단계 락을 획득만 한다 (해제 불가)
수축 단계 락을 해제만 한다 (획득 불가)
직렬 가능성을 보장하지만 교착 상태는 여전히 발생할 수 있다.
교착 상태(Deadlock)
발생 조건 상호 배제 · 점유와 대기 · 비선점 · 환형 대기 (4개 동시 성립)
해결 예방(Prevention) · 회피(Avoidance) · 탐지(Detection) · 회복(Recovery)
그 밖의 동시성 제어 기법
| 기법 | 방식 |
|---|---|
| 타임스탬프 순서 | 트랜잭션에 시간 도장을 찍어 순서를 정한다 — 교착 상태가 없다 |
| 낙관적 검증(Validation) | 일단 진행하고 커밋 직전에 검증, 충돌 시 철회 |
| 다중 버전(MVCC) | 버전을 여러 개 유지해 읽기와 쓰기가 서로를 막지 않게 |
함정 — 타임스탬프 기법의 장점은 교착 상태가 발생하지 않는다는 점이다(3회 출제).
병행 제어를 하지 않으면 생기는 문제
| 문제 | 내용 |
|---|---|
| 갱신 분실(Lost Update) | 한 트랜잭션의 갱신이 다른 갱신에 덮여 사라진다 |
| 모순성(Inconsistency) | 일부만 반영된 값을 읽어 결과가 어긋난다 |
| 연쇄 복귀(Cascading Rollback) | 철회한 트랜잭션의 값을 읽은 트랜잭션들이 줄줄이 철회 |
| 비완료 의존성 | 완료되지 않은 트랜잭션의 중간값을 읽는다 |
회복(Recovery)
| 기법 | 내용 |
|---|---|
| 즉시 갱신 | 변경을 즉시 DB에 반영하고 로그에 기록 → 회복 시 REDO + UNDO 모두 필요 |
| 지연 갱신 | 커밋 전까지 반영을 미룬다 → UNDO 불필요, REDO 만 |
| 검사점(Checkpoint) | 주기적으로 안전 지점을 남겨 회복 범위를 줄인다 |
| 그림자 페이징 | 페이지 사본을 유지해 원본으로 되돌린다 |
REDO 완료된 트랜잭션을 다시 반영 (로그의 새 값으로)
UNDO 미완료 트랜잭션을 취소 (로그의 이전 값으로)
8. 데이터 모델링과 ER 다이어그램
개념적 설계 ER 모델 · 개체·관계 도출 (DBMS 무관)
논리적 설계 릴레이션 스키마 · 정규화 (DBMS 종속 시작)
물리적 설계 인덱스·파티션·저장 구조 (성능 중심)
ER 다이어그램 표기(피터 첸)
사각형 = 개체(Entity) 타원 = 속성(Attribute) 다이아몬드 = 관계(Relationship)
밑줄 = 기본키 이중 타원 = 다중값 속성 선 위 숫자 = 관계 차수(1:1, 1:N, N:M)
식별자는 주 식별자 / 보조 식별자, 내부 식별자 / 외부 식별자, 단일 / 복합으로 나뉜다. 표기법으로 IE(까마귀발) 와 바커(Barker) 표기법이 있다.
9. 인덱스와 물리 설계
인덱스 종류
| 종류 | 특징 |
|---|---|
| 트리 기반(B-tree, B+tree) | 가장 일반적. 범위 검색에 강하다 |
| 해시(Hash) 인덱스 | 등호 검색만 O(1) 수준. 범위 검색 불가 |
| 비트맵(Bitmap) | 값의 종류가 적은 칼럼(성별 등)에 유리 |
| 함수 기반 | 칼럼에 함수를 적용한 결과로 인덱스 |
| 클러스터드(Clustered) | 데이터를 인덱스 순서대로 물리 정렬. 테이블당 1개만 |
| 넌클러스터드 | 별도 구조로 위치만 가리킨다. 여러 개 가능 |
| 밀집(Dense) / 희소(Sparse) | 모든 키에 항목 / 일부 키에만 항목 |
함정 — 클러스터드 인덱스는 테이블당 하나만 만들 수 있다(물리 정렬 순서가 하나이므로). 그리고 인덱스가 많으면 조회는 빨라지지만 삽입·수정·삭제는 느려진다.
파티셔닝
레인지(Range) 값의 범위로 분할 (날짜별)
해시(Hash) 해시 함수로 균등 분산
리스트(List) 특정 값 목록으로 분할 (지역별)
컴포지트(Composite) 위 방식을 조합
라운드로빈 순서대로 균등 분배
10. 분산 데이터베이스 (투명성 15회 · 분산)
목표 — 투명성 4가지가 그대로 문제다
| 투명성 | 뜻 |
|---|---|
| 위치 투명성(Location) | 데이터가 어디에 있는지 몰라도 접근 가능 |
| 분할 투명성(Fragmentation) | 하나의 릴레이션이 여러 조각으로 나뉘어 있음을 몰라도 된다 |
| 중복(복제) 투명성(Replication) | 사본이 여러 개 있어도 하나처럼 다룬다 |
| 병행 투명성(Concurrency) | 여러 트랜잭션이 동시에 수행돼도 결과가 일관 |
| 장애 투명성(Failure) | 일부 장애에도 트랜잭션이 정확히 수행 |
기출은 지역 사상 투명성을 함께 넣기도 한다(지역 DBMS 와 물리적 데이터 사이의 사상).
| 장점 | 단점 |
|---|---|
| 지역 자치성·확장 용이·가용성·신뢰성 | 설계·관리 복잡, 통신 비용, 잠재적 오류 증가 |
2단계 커밋(2PC) — 분산 트랜잭션의 원자성을 위해 준비(prepare) → 커밋(commit) 두 단계로 합의한다.
11. 데이터 활용
데이터 웨어하우스 주제 지향 · 통합 · 시계열 · 비휘발성. 의사결정 지원
데이터 마트 특정 부서·주제로 좁힌 소규모 웨어하우스
ETL 추출(Extract) · 변환(Transform) · 적재(Load)
데이터 마이닝 대용량 데이터에서 규칙·패턴을 찾아낸다
OLAP 연산
Roll-up 상위 수준으로 요약 Drill-down 하위 수준으로 상세화
Slicing 한 차원을 잘라 본다 Dicing 여러 차원으로 조각
Pivoting 행과 열을 회전
NoSQL 과 CAP
유형 키-값 · 문서 · 컬럼 패밀리 · 그래프
CAP 일관성(Consistency) · 가용성(Availability) · 분할 내성(Partition tolerance) 중 둘
12. 함정 정리
차수 = 속성 수, 카디널리티 = 튜플 수.
관계대수 SELECT(σ) 는 행, PROJECT(π) 는 열. SQL 의
SELECT절과 반대로 헷갈린다.
슈퍼키는 최소성 불만족, 외래키는 NULL 가능, 기본키는 NULL 불가.
WHERE 는 그룹 전, HAVING 은 그룹 후. 집계 함수 조건은
HAVING.
NULL 은
IS NULL로만 비교한다.COUNT(*)와COUNT(칼럼)은 결과가 다르다.
DROP CASCADE 는 참조까지 삭제 / RESTRICT 는 참조 있으면 취소.
뷰는 ALTER 로 변경할 수 없다. 독립 인덱스도 못 가진다.
로킹 단위가 크면 병행성은 낮아진다.
지연 갱신은 UNDO 가 필요 없다. 즉시 갱신은 REDO·UNDO 둘 다.
타임스탬프 기법은 교착 상태가 없다.
2NF = 부분 종속 제거, 3NF = 이행 종속 제거, BCNF = 모든 결정자가 후보키.
클러스터드 인덱스는 테이블당 1개.
카티션 프로덕트는 차수는 합, 카디널리티는 곱.
한눈에 정리
- 이 과목은 문법을 직접 읽는 문항이 많다. SQL 은 외우는 게 아니라 눈으로 여러 번 읽어야 한다
SELECT실행 순서 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 를 알면 오답 절반이 걸러진다- 무결성은 개체(기본키) / 참조(외래키) / 도메인(값 범위) 세 칸으로 나눠 기억
- 정규화는
도부이결다조— 무엇을 제거하는가로 외운다 - 관계대수는 σ 행 · π 열 · ⋈ 결합 · ÷ 모두 포함
- 로킹은 단위 크기 트레이드오프 표 하나가 최다 출제 지점
- 회복은 즉시 갱신(REDO+UNDO) / 지연 갱신(REDO만) 대비
- 분산 DB 는 투명성 이름 4~5개를 그대로 묻는다
- 계산 문항 셋 — 차수·카디널리티, 카티션 프로덕트, 집계 함수의 NULL 처리