← 목록

데이터베이스 구축 · 오답노트

2025년 2회

Q1

트랜잭션의 특성 중 다음 설명에 해당하는 것은? 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니 면 전혀 반영되지 않아야 한다.

1Durability
2Share
3Consistency
4Atomicity
정답 4번 · Atomicity

핵심 해설

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 작업 단위이며, 반드시 ACID 네 가지 특성을 만족해야 한다. 그중 원자성(Atomicity)은 트랜잭션에 포함된 연산이 전부 데이터베이스에 반영되거나 하나도 반영되지 않아야 한다는 All or Nothing 원칙이다. 중간까지만 수행된 상태가 남으면 데이터가 깨지므로, DBMS는 COMMIT으로 전부 반영하거나 ROLLBACK으로 전부 취소해 이 특성을 보장한다. 문제 지문의 '모두 반영되든지 아니면 전혀 반영되지 않아야 한다'는 표현이 곧 원자성의 정의 문장이다.

보기별 해설

1. Durability(영속성/지속성)는 성공적으로 완료(COMMIT)된 트랜잭션의 결과는 시스템에 장애가 발생하더라도 영구적으로 데이터베이스에 남아 있어야 한다는 특성이다. 완료 이후의 보존을 다루므로 '전부 반영 또는 전혀 반영 안 됨'이라는 수행 단위 조건과는 다르다.
2. Share(공유)는 여러 사용자가 데이터를 함께 사용한다는 데이터베이스 자체의 일반적 성질을 가리키는 말이며, 트랜잭션의 ACID 특성 목록에 들어가지 않는 용어이다. 보기로 끼워 넣은 함정 단어이다.
3. Consistency(일관성)는 트랜잭션 수행 전에 데이터베이스가 일관된 상태였다면 수행이 끝난 뒤에도 일관된 상태를 유지해야 한다는 특성이다. 무결성 제약조건 위반 여부에 초점이 있으므로, 연산의 전부/전무 반영을 규정하는 조건은 아니다.
4. Atomicity(원자성)는 트랜잭션의 연산이 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야 한다는 특성으로, 문제 지문과 정확히 일치한다. 더 이상 쪼갤 수 없는 원자처럼 트랜잭션을 하나의 단위로 취급하며 COMMIT/ROLLBACK이 이를 구현한다.

정리

트랜잭션 ACID — 원자성(All or Nothing), 일관성(수행 전후 일관 상태 유지), 격리성(수행 중 다른 트랜잭션이 끼어들지 못함), 영속성(완료 결과 영구 보존).
#데이터베이스#트랜잭션
Q2

애트리뷰트가 가질 수 있는 원자값들의 집합을 의미하는 것은?

1도메인
2튜플
3엔티티
4다형성
정답 1번 · 도메인

핵심 해설

관계형 데이터 모델의 기본 용어에서 도메인(Domain)은 하나의 애트리뷰트(속성)가 취할 수 있는 원자값들의 집합이다. 예를 들어 '성별' 속성의 도메인은 {남, 여}이고 '학년' 속성의 도메인은 {1, 2, 3, 4}이다. 도메인은 값의 범위와 타입을 제한해 릴레이션에 잘못된 값이 들어가는 것을 막는 역할을 하며, 이것이 도메인 무결성의 근거가 된다. 따라서 '애트리뷰트가 가질 수 있는 원자값들의 집합'은 도메인의 정의 그 자체이다.

보기별 해설

1. 도메인(Domain)은 하나의 애트리뷰트가 가질 수 있는 원자값들의 집합이다. 속성값의 허용 범위와 데이터 타입을 규정하며, 이 범위를 벗어난 값이 입력되지 않도록 하는 것이 도메인 무결성이다.
2. 튜플(Tuple)은 릴레이션을 구성하는 각각의 행(row)으로, 하나의 개체 인스턴스에 해당하는 속성값들의 모임이다. 값의 집합이 아니라 레코드 한 줄을 가리키며, 튜플의 개수는 카디널리티(Cardinality)이다.
3. 엔티티(Entity, 개체)는 현실 세계에서 독립적으로 존재하며 서로 구별되는 대상으로, E-R 모델에서 사각형으로 표현된다. 학생·과목처럼 정보를 저장할 대상 자체를 뜻하므로 값의 집합과는 층위가 다르다.
4. 다형성(Polymorphism)은 객체지향 개념으로, 같은 메시지에 대해 객체마다 서로 다른 방식으로 응답하는 성질이다. 데이터베이스 릴레이션의 구성 요소를 가리키는 용어가 아니다.

정리

릴레이션 용어 — 릴레이션(테이블), 튜플(행, 개수=카디널리티), 애트리뷰트(열, 개수=차수), 도메인(한 속성이 가질 수 있는 원자값들의 집합).
#데이터베이스
Q3

데이터베이스 시스템에서 삽입갱신삭제, , 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL은?

1트리거(Trigger)
2무결성(Integrity)
3잠금(Lock)
4복귀(Rollback)
정답 1번 · 트리거(Trigger)

핵심 해설

지문이 깨져 있지만 본래는 '삽입·갱신·삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL'을 묻는 문제이다. 트리거(Trigger)는 특정 테이블에 INSERT·UPDATE·DELETE가 일어나는 시점에 DBMS가 자동으로 실행하는 절차형 SQL 객체로, CREATE TRIGGER로 정의하고 BEFORE/AFTER 시점과 이벤트를 지정한다. 사용자가 직접 호출하지 않아도 이벤트에 반응해 실행된다는 점이 프로시저와의 결정적 차이이며, 주로 무결성 유지나 로그 기록 자동화에 쓰인다. 따라서 정답은 트리거이다.

보기별 해설

1. 트리거(Trigger)는 테이블에 삽입·갱신·삭제 이벤트가 발생할 때 DBMS가 자동으로 수행하는 절차형 SQL이다. 프로시저·사용자 정의 함수와 함께 절차형 SQL로 분류되지만, 명시적 호출 없이 이벤트에 의해 기동된다는 점이 다르다.
2. 무결성(Integrity)은 데이터가 정확하고 일관되게 유지되는 상태 또는 그 제약조건을 가리키는 개념이며, 개체·참조·도메인 무결성 등으로 나뉜다. 상태나 규칙일 뿐 실행되는 절차형 SQL이 아니다.
3. 잠금(Lock)은 병행 제어 기법에서 트랜잭션이 접근 중인 데이터에 다른 트랜잭션이 손대지 못하도록 거는 통제 수단이다. 공유 락과 배타 락으로 나뉘며, 이벤트에 반응해 작업을 수행하는 프로그램 단위와는 무관하다.
4. 복귀(Rollback)는 트랜잭션 수행 중 오류가 발생했을 때 변경 내용을 모두 취소하고 트랜잭션 시작 이전 상태로 되돌리는 DCL 명령이다. 회복을 위한 단일 명령이지 자동 수행되는 절차형 SQL 객체가 아니다.

정리

절차형 SQL 3종 — 프로시저(명시적 호출), 사용자 정의 함수(값을 반환), 트리거(INSERT/UPDATE/DELETE 이벤트 발생 시 자동 실행).
#데이터베이스#SQL
Q4

STUDENT 테이블에 독일어과 학생 50명중국어과, 학생 30명, 영어영문학과 학생 50명의 정보가 저장되어 있을 때다음, 두 SQL문 의 실행 결과 튜플 수는? (단, DEPT 컬럼은 학과명) ⓐ SELECT DEPT FROM STUDENT; ⓑ SELECT DISTINCT DEPT FROM STUDENT;

1ⓐ 3, ⓑ 3
2ⓐ 50, ⓑ 3
3ⓐ 130, ⓑ 3
4ⓐ 130, ⓑ 130
정답 3번 · ⓐ 130, ⓑ 3

핵심 해설

STUDENT 테이블에는 독일어과 50명, 중국어과 30명, 영어영문학과 50명으로 총 130개의 튜플이 저장되어 있다. ⓐ SELECT DEPT FROM STUDENT는 FROM STUDENT로 130개 행을 모두 읽고, WHERE 절이 없어 걸러지는 행이 없으며, SELECT DEPT로 DEPT 열만 남기는 프로젝션만 수행한다. SQL의 SELECT는 중복을 자동으로 제거하지 않으므로 결과는 학과명이 중복된 채 130개 튜플이 된다. ⓑ SELECT DISTINCT DEPT FROM STUDENT는 같은 130개 값에 DISTINCT를 적용해 중복을 없애므로 서로 다른 학과명 독일어과·중국어과·영어영문학과 3개만 남는다. 따라서 ⓐ 130, ⓑ 3이다.

보기별 해설

1. ⓐ 3, ⓑ 3은 ⓐ에도 중복 제거가 일어난다고 본 결과이다. DISTINCT가 없는 SELECT는 중복 튜플을 그대로 출력하므로 ⓐ가 3이 될 수 없다.
2. ⓐ 50, ⓑ 3은 학과 하나의 인원수인 50을 전체 튜플 수로 착각한 값이다. FROM 절 대상은 STUDENT 테이블 전체이므로 세 학과 인원을 모두 합한 130이 되어야 한다.
3. ⓐ 130, ⓑ 3이 두 SQL의 실행 결과이다. ⓐ는 DISTINCT가 없어 50+30+50=130개 튜플이 그대로 나오고, ⓑ는 DISTINCT가 중복 학과명을 제거해 서로 다른 학과 3개만 남는다.
4. ⓐ 130, ⓑ 130은 ⓑ의 DISTINCT가 아무 역할도 하지 않는다고 본 값이다. DISTINCT는 SELECT 목록 조합이 같은 행을 하나로 합치므로, 학과명 하나만 조회한 ⓑ의 결과는 3개로 줄어든다.

정리

SQL 처리 순서 FROM(대상 행 확보) → WHERE(행 선택) → SELECT(열 선택) → DISTINCT(중복 행 제거). SELECT 단독은 중복 허용, DISTINCT를 붙여야 서로 다른 값만 남는다.
#데이터베이스#SQL
Q5

관계대수의 순수 관계 연산자가 아닌 것은?

1Select
2Cartesian Product
3Division
4Project
정답 2번 · Cartesian Product

핵심 해설

관계대수 연산자는 순수 관계 연산자와 일반 집합 연산자로 나뉜다. 순수 관계 연산자는 릴레이션 구조에 맞게 새로 정의한 것으로 Select(σ), Project(π), Join(⋈), Division(÷) 네 가지이다. 일반 집합 연산자는 수학의 집합 이론에서 그대로 가져온 것으로 합집합(∪), 교집합(∩), 차집합(−), 카티션 프로덕트(×) 네 가지이다. Cartesian Product는 두 릴레이션의 모든 튜플 쌍을 만드는 곱집합 연산으로 집합 연산자 쪽에 속하므로, 순수 관계 연산자가 아닌 것은 Cartesian Product이다.

보기별 해설

1. Select는 순수 관계 연산자로 기호는 σ(시그마)이다. σ조건(R) 형태로 릴레이션에서 조건을 만족하는 튜플, 즉 행을 수평적으로 골라내는 연산이다.
2. Cartesian Product는 일반 집합 연산자로 기호는 ×이다. 두 릴레이션의 모든 튜플을 짝지어 결합해 차수는 두 릴레이션 차수의 합, 카디널리티는 두 카디널리티의 곱이 되며, 순수 관계 연산자가 아니다.
3. Division은 순수 관계 연산자로 기호는 ÷이다. R÷S는 S의 모든 튜플과 대응되는 R의 튜플만 골라내는 연산으로, '모든 ~에 대하여' 조건을 표현할 때 쓰인다.
4. Project는 순수 관계 연산자로 기호는 π(파이)이다. π속성리스트(R) 형태로 지정한 애트리뷰트, 즉 열만 수직적으로 추출하며 결과에서 중복 튜플은 제거된다.

정리

관계대수 — 순수 관계 연산자: Select(σ), Project(π), Join(⋈), Division(÷) / 일반 집합 연산자: 합집합(∪), 교집합(∩), 차집합(−), 카티션 프로덕트(×).
#데이터베이스
Q6

다음에 해당하는 함수 종속의 추론 규칙은? X → Y이고 Y → Z이면 X → Z이다.

1분해 규칙
2이행 규칙
3반사 규칙
4결합 규칙
정답 2번 · 이행 규칙

핵심 해설

함수 종속성의 추론 규칙(암스트롱의 공리)은 이미 알려진 함수 종속으로부터 새로운 함수 종속을 유도하는 규칙들이다. 기본 공리는 반사(Y⊆X이면 X→Y), 증가(X→Y이면 XZ→YZ), 이행(X→Y이고 Y→Z이면 X→Z) 세 가지이고, 여기서 유도되는 부가 규칙으로 합집합(결합), 분해, 의사 이행 규칙이 있다. 문제에 제시된 'X→Y이고 Y→Z이면 X→Z'는 중간 속성 Y를 징검다리로 삼아 종속이 전달되는 형태이므로 이행 규칙(Transitivity)이다. 이 이행적 함수 종속이 릴레이션에 남아 있으면 제3정규형 위반이 되어 제거 대상이 된다.

보기별 해설

1. 분해 규칙(Decomposition)은 X→YZ이면 X→Y이고 X→Z라는 규칙으로, 오른쪽에 묶여 있던 속성 집합을 쪼개는 방향이다. 두 종속을 이어 붙이는 문제의 형태와는 반대이다.
2. 이행 규칙(Transitivity)은 X→Y이고 Y→Z이면 X→Z가 성립한다는 규칙으로 문제 지문과 일치한다. 이런 이행적 함수 종속이 존재하면 제3정규형을 위반하므로 정규화 과정에서 분해해 제거한다.
3. 반사 규칙(Reflexivity)은 Y가 X의 부분집합이면 X→Y가 항상 성립한다는 규칙이다. 자기 자신이 포함하는 속성을 결정한다는 자명한 종속을 말하며 두 종속의 연결과는 무관하다.
4. 결합 규칙(Union, 합집합 규칙)은 X→Y이고 X→Z이면 X→YZ가 성립한다는 규칙이다. 결정자가 같은 두 종속의 오른쪽을 합치는 것이므로, 결정자가 서로 다른 X→Y와 Y→Z를 연결하는 이행 규칙과 구분된다.

정리

암스트롱 공리 — 기본: 반사(Y⊆X ⇒ X→Y), 증가(X→Y ⇒ XZ→YZ), 이행(X→Y, Y→Z ⇒ X→Z) / 부가: 결합(X→Y, X→Z ⇒ X→YZ), 분해(X→YZ ⇒ X→Y), 의사 이행.
#데이터베이스
Q7

뷰(View)의 장점이 아닌 것은?

1뷰 자체로 인덱스를 가짐
2데이터 보안 용이
3논리적 독립성 제공
4사용자 데이터 관리 용이
정답 1번 · 뷰 자체로 인덱스를 가짐

핵심 해설

뷰(View)는 하나 이상의 기본 테이블로부터 유도된 이름을 갖는 가상 테이블로, 실제 데이터를 저장하지 않고 정의(SELECT문)만 데이터 사전에 보관한다. 물리적으로 저장된 실체가 없기 때문에 뷰 자체에 인덱스를 생성할 수 없다는 것이 뷰의 대표적인 단점이다. 반면 필요한 열만 노출해 보안을 강화하고, 기본 테이블 구조가 바뀌어도 뷰 정의로 사용자 질의를 보호해 논리적 독립성을 제공하며, 복잡한 질의를 단순한 이름으로 감춰 사용자 관리를 쉽게 하는 것은 뷰의 장점이다. 따라서 장점이 아닌 것은 '뷰 자체로 인덱스를 가짐'이다.

보기별 해설

1. 뷰 자체로 인덱스를 가짐은 뷰의 장점이 아니라 오히려 불가능한 사항이다. 뷰는 물리적으로 데이터를 저장하지 않는 가상 테이블이어서 독립적인 인덱스를 만들 수 없고, 정의를 변경하려면 삭제 후 재생성해야 한다는 제약도 있다.
2. 데이터 보안 용이는 뷰의 대표적 장점이다. 급여처럼 민감한 열을 제외하고 필요한 열과 행만 담은 뷰를 만들어 권한을 부여하면, 사용자는 기본 테이블 전체에 접근하지 못한 채 허용된 부분만 볼 수 있다.
3. 논리적 독립성 제공은 뷰의 장점이다. 기본 테이블의 구조가 변경되어도 뷰 정의만 조정하면 뷰를 사용하는 응용 프로그램의 질의는 그대로 유지할 수 있다.
4. 사용자 데이터 관리 용이도 뷰의 장점이다. 여러 테이블을 조인하는 복잡한 질의를 뷰 하나로 정의해 두면 사용자는 단순한 SELECT만으로 원하는 데이터를 얻을 수 있다.

정리

뷰 — 장점: 보안 강화, 논리적 독립성, 질의 단순화 / 단점: 독립적 인덱스 생성 불가, 뷰 정의 변경 불가(DROP 후 재생성), 삽입·갱신·삭제 연산에 제약.
#데이터베이스#보안
Q8

데이터베이스 설계 시 물리적 설계 단계에서 수행하는 사항이 아닌 것은?

1저장 레코드 양식 설계
2레코드 집중의 분석 및 설계
3접근 경로 설계
4목표 DBMS에 맞는 스키마 설계
정답 4번 · 목표 DBMS에 맞는 스키마 설계

핵심 해설

데이터베이스 설계는 요구조건 분석 → 개념적 설계 → 논리적 설계 → 물리적 설계 → 구현 순으로 진행된다. 논리적 설계 단계에서 개념 스키마를 목표 DBMS가 지원하는 데이터 모델(관계 모델 등)에 맞는 논리 스키마로 변환하고 트랜잭션 인터페이스를 설계한다. 물리적 설계 단계는 논리 스키마를 실제 저장장치에 어떻게 배치할지를 정하는 단계로, 저장 레코드의 양식 설계, 레코드 집중(clustering)의 분석과 설계, 접근 경로 설계, 인덱스 설계, 반응 시간·공간 활용도·트랜잭션 처리량 같은 성능 기준 고려가 여기에 해당한다. 따라서 '목표 DBMS에 맞는 스키마 설계'는 논리적 설계의 작업이므로 물리적 설계 단계의 사항이 아니다.

보기별 해설

1. 저장 레코드 양식 설계는 물리적 설계 단계의 작업이다. 데이터 타입, 데이터값의 분포, 접근 빈도를 분석해 레코드를 저장장치에 어떤 형식으로 배치할지 결정한다.
2. 레코드 집중의 분석 및 설계는 물리적 설계 단계의 작업이다. 함께 자주 조회되는 레코드들을 물리적으로 인접한 위치에 모아 두어 디스크 접근 횟수를 줄이는 클러스터링 설계를 뜻한다.
3. 접근 경로 설계는 물리적 설계 단계의 작업이다. 인덱스 구조, 해싱 방식 등 데이터에 도달하는 경로를 정해 검색 성능을 확보한다.
4. 목표 DBMS에 맞는 스키마 설계는 논리적 설계 단계의 작업이다. 개념적 설계에서 만든 E-R 다이어그램을 사용할 DBMS의 데이터 모델에 맞는 논리 스키마(테이블 구조)로 변환하는 과정이므로 물리적 설계에 속하지 않는다.

정리

DB 설계 5단계 — 요구조건 분석 → 개념적 설계(E-R, 개념 스키마) → 논리적 설계(목표 DBMS용 논리 스키마, 정규화) → 물리적 설계(저장 레코드 양식·레코드 집중·접근 경로·인덱스) → 구현.
#데이터베이스
Q9

릴레이션에 있는 모든 튜플에 대해 유일성은 만족시키지만 최소성은 만족시키지 못하는 키는?

1후보키
2기본키
3슈퍼키
4외래키
정답 3번 · 슈퍼키

핵심 해설

관계형 데이터베이스의 키는 유일성(각 튜플을 유일하게 식별)과 최소성(식별에 꼭 필요한 속성만으로 구성)이라는 두 조건으로 구분된다. 슈퍼키(Super Key)는 유일성은 만족하지만 최소성은 만족하지 못하는 속성 또는 속성들의 집합이다. 예를 들어 학번만으로도 학생을 식별할 수 있는데 (학번, 이름)처럼 불필요한 속성을 덧붙인 조합은 여전히 유일하지만 최소성이 깨지므로 슈퍼키이다. 여기서 최소성까지 갖춘 것이 후보키이고, 후보키 중 선택된 하나가 기본키이다.

보기별 해설

1. 후보키(Candidate Key)는 유일성과 최소성을 모두 만족하는 속성 집합이다. 릴레이션의 모든 튜플을 식별하면서 어느 한 속성을 빼면 식별이 불가능해지는 최소 조합이므로 최소성을 만족하지 못한다는 조건에 어긋난다.
2. 기본키(Primary Key)는 여러 후보키 중에서 대표로 선정한 키로, 유일성과 최소성을 모두 만족하며 NULL 값을 가질 수 없다(개체 무결성). 최소성을 갖추므로 문제의 조건과 맞지 않는다.
3. 슈퍼키(Super Key)는 유일성은 만족하지만 최소성은 만족하지 못하는 키이다. 후보키에 아무 속성이나 더 붙여도 여전히 튜플을 유일하게 식별하므로 슈퍼키가 되며, 후보키는 슈퍼키의 부분집합이다.
4. 외래키(Foreign Key)는 다른 릴레이션의 기본키를 참조하는 속성으로, 릴레이션 간의 관계를 연결하고 참조 무결성을 보장한다. 자기 릴레이션의 튜플을 식별하는 키가 아니므로 중복 값이나 NULL도 가질 수 있다.

정리

키 조건 — 슈퍼키: 유일성 O, 최소성 X / 후보키: 유일성 O, 최소성 O / 기본키: 후보키 중 선정, NULL 불가 / 대체키: 선정되지 않은 후보키 / 외래키: 다른 릴레이션의 기본키 참조.
#데이터베이스
Q10

정규화의 필요성으로 거리가 먼 것은?

1데이터 구조의 안정성 최대화
2중복 데이터의 활성화
3수정삭제, 시 이상 현상의 최소화
4테이블 불일치 위험의 최소화 3
정답 2번 · 중복 데이터의 활성화

핵심 해설

정규화(Normalization)는 릴레이션에 존재하는 함수 종속을 분석해 이상(anomaly) 현상을 일으키는 속성 간 종속 관계를 분해하는 과정이다. 목적은 데이터 중복을 최소화해 삽입·삭제·갱신 이상을 없애고, 데이터 구조의 안정성과 무결성을 확보하며, 구조 변경이 필요할 때 그 영향을 줄이는 데 있다. 즉 정규화는 중복을 없애는 방향이지 중복을 늘리는 작업이 아니다. 따라서 '중복 데이터의 활성화'는 정규화의 필요성과 정반대이며, 성능을 위해 의도적으로 중복을 허용하는 것은 반정규화(De-normalization)이다.

보기별 해설

1. 데이터 구조의 안정성 최대화는 정규화의 목적에 해당한다. 종속 관계에 따라 릴레이션을 분해해 두면 요구사항 변화로 구조를 수정할 때 영향 범위가 작아져 안정성이 높아진다.
2. 중복 데이터의 활성화는 정규화의 목적과 정반대이다. 정규화는 중복을 제거·최소화하는 과정이며, 조회 성능을 위해 일부러 중복을 허용하는 것은 정규화가 아니라 반정규화(De-normalization)이다.
3. 수정삭제 시 이상 현상의 최소화(수정·삭제 시 이상 현상 최소화)는 정규화의 대표적 목적이다. 중복 저장된 값 일부만 고쳐져 모순이 생기는 갱신 이상, 삭제하면 안 될 정보까지 사라지는 삭제 이상이 정규화로 제거된다.
4. 테이블 불일치 위험의 최소화도 정규화의 목적이다. 같은 사실이 여러 곳에 중복 저장되지 않으므로 한 곳만 갱신되어 테이블 간 값이 어긋나는 상황을 막을 수 있다.

정리

정규화 목적 — 중복 최소화, 이상(삽입·삭제·갱신) 현상 제거, 데이터 구조 안정성·무결성 확보. 중복을 일부러 허용해 조회 성능을 높이는 것은 반정규화.
#데이터베이스#정규화
Q11

릴레이션 R1에 속한 애튜리뷰트의 조합인 외래키를 변경하려면 이를 참조하고 있는 릴레이션 R2의 기본키도 변경해야 하는데 이를 무엇이라 하는가?

1정보 무결성
2고유 무결성
3널 제약성
4참조 무결성
정답 4번 · 참조 무결성

핵심 해설

무결성 제약조건은 데이터베이스에 저장된 값이 정확하고 일관되도록 보장하는 규칙이다. 참조 무결성(Referential Integrity)은 외래키 값은 반드시 참조하는 릴레이션의 기본키 값과 일치하거나 NULL이어야 한다는 제약으로, 릴레이션 사이의 연결이 끊어진 값(고아 튜플)을 허용하지 않는다. 이 때문에 한쪽 릴레이션의 외래키나 참조되는 기본키를 변경하면 다른 쪽도 함께 맞춰 변경해야 하며, DBMS는 CASCADE·SET NULL·RESTRICT 같은 옵션으로 이를 처리한다. 문제가 설명하는 상황은 바로 이 참조 무결성이다.

보기별 해설

1. 정보 무결성은 표준 무결성 제약조건 분류(개체·참조·도메인·NULL·고유)에 들어 있지 않은 용어로, 참조 무결성과 혼동시키려고 만든 보기이다. 릴레이션 간 외래키-기본키 대응 규칙을 가리키는 명칭이 아니다.
2. 고유 무결성(Unique Integrity)은 특정 속성에 대해 릴레이션의 각 튜플이 서로 다른 값을 가져야 한다는 제약이다. 한 릴레이션 내부의 값 중복을 막는 규칙이므로 두 릴레이션 사이의 참조 관계와는 다르다.
3. 널 제약성(NULL Integrity)은 특정 속성에 NULL 값이 올 수 없다는 제약으로 NOT NULL로 지정한다. 값의 존재 여부만 통제할 뿐 다른 릴레이션의 키와 맞추는 규칙이 아니다.
4. 참조 무결성(Referential Integrity)은 외래키 값이 참조 릴레이션의 기본키 값 중 하나이거나 NULL이어야 한다는 제약이다. 따라서 외래키를 변경하면 참조되는 기본키 쪽도 함께 맞춰야 하며, 문제가 설명하는 상황이 이에 해당한다.

정리

무결성 제약 — 개체 무결성(기본키는 NULL·중복 불가), 참조 무결성(외래키는 참조 릴레이션의 기본키 값 또는 NULL), 도메인 무결성(속성값은 정의된 도메인 범위 내).
#데이터베이스
Q12

정규화를 거치지 않아 발생하게 되는 이상(anomaly) 현상의 종류에 대한 설명으로 옳지 않은 것은?

1삭제 이상이란 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들로 함께 삭제되는 연쇄 삭제 현상이다.
2삽입 이상이란 릴레이션에서 데이터를 삽입할 때 의도와는 상 관없이 원하지 않는 값들로 함께 삽입되는 현상이다.
3갱신 이상이란 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상이다.
4종속 이상이란 하나의 릴레이션에 하나 이상의 함수적 종속성 이 존재하는 현상이다.
정답 4번 · 종속 이상이란 하나의 릴레이션에 하나 이상의 함수적 종속성 이 존재하는 현상이다.

핵심 해설

이상(Anomaly)이란 릴레이션에 데이터 중복과 부적절한 함수 종속이 남아 있을 때 삽입·삭제·갱신 연산에서 발생하는 예기치 못한 부작용을 말한다. 이상 현상의 종류는 삽입 이상, 삭제 이상, 갱신 이상 세 가지뿐이며 '종속 이상'이라는 이상 현상은 존재하지 않는다. 또한 하나의 릴레이션에 함수적 종속성이 여러 개 존재하는 것 자체는 정상적인 상태이지, 그 자체로 이상 현상이라 부르지 않는다. 따라서 옳지 않은 설명은 4번이다.

보기별 해설

1. 삭제 이상(Deletion Anomaly)에 대한 옳은 설명이다. 한 튜플을 지울 때 그 튜플에 함께 들어 있던 다른 정보까지 의도치 않게 사라지는 연쇄 삭제 현상을 가리킨다.
2. 삽입 이상(Insertion Anomaly)에 대한 옳은 설명이다. 특정 데이터를 저장하려는데 아직 정해지지 않은 다른 속성값(예: 기본키 일부)까지 억지로 넣어야 하는 상황을 말한다.
3. 갱신 이상(Update Anomaly)에 대한 옳은 설명이다. 중복 저장된 같은 값 중 일부 튜플만 수정되어 릴레이션 안의 정보가 서로 모순되는 불일치가 생기는 현상이다.
4. 종속 이상이라는 이상 현상은 존재하지 않으므로 이 설명이 틀렸다. 이상 현상은 삽입·삭제·갱신 세 가지뿐이며, 하나의 릴레이션에 함수적 종속성이 여럿 있는 것은 정상적인 상황이지 이상 현상이 아니다.

정리

이상 현상은 삽입 이상·삭제 이상·갱신 이상 3종뿐이다. 원인은 부적절한 함수 종속과 데이터 중복이며, 해결책은 정규화를 통한 릴레이션 분해이다.
#데이터베이스#정규화
Q13

개체관계- 모델(E-R)의 그래픽 표현으로 옳지 않은 것은?

1개체 타입 - 사각형
2속성 - 원형
3관계 타입 – 마름모
4연결 - 삼각형
정답 4번 · 연결 - 삼각형

핵심 해설

E-R(개체-관계) 모델은 현실 세계의 데이터를 개체, 속성, 관계로 표현하는 개념적 데이터 모델이며 피터 첸(Peter Chen)이 제안한 표기법을 사용한다. 기호는 개체 타입 = 사각형, 속성 = 타원(원형), 관계 타입 = 마름모, 다중값 속성 = 이중 타원, 개체 타입과 속성을 이어 주는 연결 = 선(직선)으로 정해져 있다. 관계에 참여하는 개체의 대응 수(1:1, 1:N, N:M)는 연결선 위에 숫자로 표기한다. 따라서 '연결 - 삼각형'은 잘못된 대응이며, 연결은 선으로 표현한다.

보기별 해설

1. 개체 타입 - 사각형은 옳은 대응이다. 학생, 과목처럼 독립적으로 존재하며 서로 구별되는 대상을 사각형으로 표현하고, 약한 개체 타입은 이중 사각형으로 나타낸다.
2. 속성 - 원형은 옳은 대응이다. 개체의 성질을 나타내는 속성은 타원(원형)으로 그리며, 기본키 속성은 밑줄을 긋고 다중값 속성은 이중 타원으로 구분한다.
3. 관계 타입 - 마름모는 옳은 대응이다. '수강'처럼 개체 사이의 연관성을 마름모로 표현하고, 마름모와 개체를 잇는 선 위에 1:1, 1:N, N:M 같은 대응 수를 적는다.
4. 연결 - 삼각형이 틀린 대응이다. 개체·속성·관계를 이어 주는 연결은 삼각형이 아니라 선(직선)으로 표현하며, E-R 다이어그램에는 삼각형 기호가 쓰이지 않는다.

정리

E-R 다이어그램 기호 — 사각형(개체 타입), 타원(속성), 마름모(관계 타입), 선(연결), 이중 사각형(약한 개체), 이중 타원(다중값 속성), 밑줄(기본키).
#데이터베이스
Q14

DDL(Data Define Language)의 명령어 중 스키마도메인인덱스, , 등을 정의할 때 사용하는 SQL문은?

1ALTER
2SELECT
3CREATE
4INSERT
정답 3번 · CREATE

핵심 해설

DDL(Data Definition Language, 데이터 정의어)은 데이터베이스의 구조와 객체를 정의·변경·삭제하는 언어로 CREATE, ALTER, DROP 세 명령으로 구성된다. 그중 CREATE는 스키마(SCHEMA), 도메인(DOMAIN), 테이블(TABLE), 뷰(VIEW), 인덱스(INDEX) 등을 새로 생성할 때 사용한다. ALTER는 이미 만들어진 테이블의 구조를 수정할 때, DROP은 정의된 객체를 삭제할 때 쓴다. 따라서 스키마·도메인·인덱스 등을 정의하는 명령은 CREATE이다.

보기별 해설

1. ALTER는 DDL 명령이지만 새로 정의하는 것이 아니라 이미 존재하는 테이블의 구조를 변경할 때 사용한다. ADD로 속성 추가, MODIFY로 속성 타입·기본값 변경, DROP으로 속성 제거를 수행한다.
2. SELECT는 DML(데이터 조작어)에 속하는 검색 명령으로, 테이블에 저장된 튜플을 조건에 맞게 조회한다. 객체를 정의하는 기능이 없으므로 DDL이 아니다.
3. CREATE는 DDL 명령으로 스키마·도메인·테이블·뷰·인덱스 등을 새로 생성할 때 사용한다. CREATE TABLE, CREATE VIEW, CREATE INDEX처럼 대상 객체를 명시해 구조를 정의한다.
4. INSERT는 DML에 속하는 삽입 명령으로, 이미 만들어진 테이블에 새로운 튜플(행)을 추가한다. 데이터를 넣는 조작어일 뿐 객체 구조를 정의하지 않는다.

정리

DDL 3종 — CREATE(스키마·도메인·테이블·뷰·인덱스 생성), ALTER(테이블 구조 변경), DROP(정의 삭제). SELECT·INSERT·UPDATE·DELETE는 DML.
#데이터베이스#SQL
Q15

로킹 단위(Locking Granularity)에 대한 설명으로 옳은 것은?

1로킹 단위가 크면 병행성 수준이 낮아진다.
2로킹 단위가 크면 병행 제어 기법이 복잡해진다.
3로킹 단위가 작으면 로크(lock)의 수가 적어진다.
4로킹은 파일 단위로 이루어지며레코드와, 필드는 로킹 단위가 될 수 없다.
정답 1번 · 로킹 단위가 크면 병행성 수준이 낮아진다.

핵심 해설

로킹 단위(Locking Granularity)는 병행 제어에서 한 번에 잠금을 거는 데이터 객체의 크기를 말하며, 데이터베이스 전체·파일·테이블·레코드·필드 등 여러 수준이 될 수 있다. 로킹 단위가 크면 한 번의 락으로 넓은 범위를 묶어 버리므로 관리해야 할 락의 수가 적어져 제어 기법은 단순해지지만, 다른 트랜잭션이 접근할 수 없는 영역이 넓어져 병행성(공유도) 수준은 낮아진다. 반대로 로킹 단위가 작으면 락의 개수가 많아져 오버헤드와 기법의 복잡도가 커지지만 병행성은 높아진다. 따라서 옳은 설명은 '로킹 단위가 크면 병행성 수준이 낮아진다'이다.

보기별 해설

1. 로킹 단위가 크면 병행성 수준이 낮아진다는 설명이 옳다. 한 트랜잭션이 넓은 범위를 통째로 잠그므로 다른 트랜잭션이 대기해야 하는 경우가 늘어 동시에 처리되는 정도가 떨어진다.
2. 로킹 단위가 크면 병행 제어 기법이 복잡해진다는 설명은 반대이다. 단위가 클수록 관리할 락의 수가 줄어 제어가 단순해지고, 단위가 작을수록 기법이 복잡해진다.
3. 로킹 단위가 작으면 로크의 수가 적어진다는 설명도 반대이다. 잠금 대상을 잘게 쪼갤수록 필요한 락의 개수가 많아져 오버헤드가 커지는 대신 병행성은 높아진다.
4. 로킹은 파일 단위로만 이루어진다는 설명은 틀렸다. 로킹 단위는 데이터베이스 전체, 파일, 테이블뿐 아니라 레코드와 필드까지 다양한 수준에서 설정할 수 있다.

정리

로킹 단위 — 크면: 락 수 감소, 제어 단순, 병행성 낮음 / 작으면: 락 수 증가, 제어 복잡·오버헤드 증가, 병행성 높음.
#데이터베이스
Q16

테이블 R과 S에 대한 SQL문이 실행되었을 때실행, 결과로 옳은 것은? R S A B A B SELECT A FROM R 1 A 1 A UNION ALL 3 B 2 B SELECT A FROM S; 1 3 1 1 2 3 3 1

1A 1
2A 3 2
3A 1 3
4A 1 3 1 2
정답 4번 · A 1 3 1 2

핵심 해설

원본 시험지의 두 릴레이션은 R = {(A=1, B=A), (A=3, B=B)}, S = {(A=1, B=A), (A=2, B=B)}이다. UNION ALL은 두 SELECT 결과를 세로로 이어 붙이는 집합 연산으로, UNION과 달리 중복 튜플을 제거하지 않고 정렬도 하지 않는다. 위쪽 SELECT A FROM R이 R의 A열을 뽑아 1, 3을 만들고, 아래쪽 SELECT A FROM S가 S의 A열을 뽑아 1, 2를 만든 뒤, UNION ALL이 두 결과를 순서 그대로 연결한다. 따라서 결과는 A열 하나에 1, 3, 1, 2 네 행이 되며, 값 1이 두 번 나타나지만 중복 제거 없이 그대로 남는다. 결과 행 수는 R의 튜플 수(2)와 S의 튜플 수(2)의 합인 4이다. 이 형태의 결과 표는 4번 보기이므로 정답은 4번이다.

보기별 해설

1. 1번 보기는 값이 1 하나뿐인 한 행짜리 표이다. 이는 R과 S의 A열에서 중복을 모두 제거하고 공통값만 남긴 형태여서 UNION ALL은 물론 UNION의 결과와도 맞지 않는다. 두 릴레이션의 교집합(INTERSECT)에 가까운 출력이다.
2. 2번 보기는 3, 2 두 행으로 이루어진 표이다. R의 3과 S의 2만 남아 양쪽에 공통으로 존재하는 값 1이 빠져 있으므로, 두 결과를 모두 이어 붙이는 UNION ALL의 출력이 될 수 없다. 차집합(EXCEPT) 계열의 결과에 해당한다.
3. 3번 보기는 1, 3 두 행으로 이루어진 표로, R의 A열만 뽑은 결과와 같다. 아래쪽 SELECT A FROM S의 결과인 1, 2가 전혀 반영되지 않았으므로 UNION ALL의 출력이 아니다.
4. 4번 보기는 1, 3, 1, 2 네 행으로 이루어진 표이다. R의 A열(1, 3) 뒤에 S의 A열(1, 2)이 중복 제거 없이 원래 순서대로 이어 붙은 형태로, UNION ALL의 정의에 정확히 부합한다. 값 1이 두 번 등장하는 점이 UNION과 구별되는 결정적 단서이다.

정리

집합 연산 — UNION은 두 결과를 합치되 중복 튜플을 제거하고, UNION ALL은 중복을 남긴 채 그대로 연결한다(행 수 = 양쪽 행 수의 합). 두 SELECT의 열 개수와 타입은 일치해야 하며, ORDER BY가 없으면 정렬도 보장되지 않는다.
#데이터베이스#SQL
Q17

관계해석에서 ‘모든 것에 대하여의’ 의미를 나타내는 논리 기호는?

1
2
3
4
정답 3번 · ∀

핵심 해설

관계해석(Relational Calculus)은 원하는 결과가 무엇인지를 술어 논리로 기술하는 비절차적 언어로, 코드(E. F. Codd)가 제안했다. 사용하는 정량자(한정자)는 두 가지로, 전칭 정량자 ∀(for all)는 '모든 것에 대하여', 존재 정량자 ∃(there exists)는 '어떤 것이 존재한다'를 의미한다. 따라서 '모든 것에 대하여'를 나타내는 기호는 ∀이다. 참고로 관계대수에서 '모든 ~에 대하여' 조건을 표현하는 연산자는 디비전(÷)으로, ∀에 대응한다.

보기별 해설

1. ∃는 존재 정량자(Existential Quantifier)로 '어떤 것이 존재한다(there exists)'를 의미한다. 조건을 만족하는 튜플이 적어도 하나 있음을 나타내므로 '모든 것에 대하여'와는 반대 개념이다.
2. ∈는 원소 포함 기호로 'a ∈ A'처럼 어떤 원소가 집합에 속함을 나타낸다. 집합론 기호이지 관계해석의 정량자가 아니다.
3. ∀는 전칭 정량자(Universal Quantifier)로 '모든 것에 대하여(for all)'를 의미하며 문제 조건과 일치한다. 관계대수에서 이에 대응하는 연산자는 디비전(÷)이다.
4. ⊂는 부분집합 기호로 'A ⊂ B'처럼 한 집합이 다른 집합에 포함됨을 나타낸다. 집합 사이의 포함 관계를 표시할 뿐 정량자 역할을 하지 않는다.

정리

관계해석 정량자 — ∀(for all, 모든 것에 대하여, 관계대수의 디비전 ÷에 대응), ∃(there exists, 존재한다). 관계대수는 절차적, 관계해석은 비절차적 언어이다.
#데이터베이스
Q18

DELETE 명령에 대한 설명으로 틀린 것은?

1테이블의 행을 삭제할 때 사용한다.
2WHERE 조건절이 없는 DELETE 명령을 수행하면 DROP TABLE 명령을 수행했을 때와 동일한 효과를 얻을 수 있다.
3SQL을 사용 용도에 따라 분류할 경우 DML에 해당한다.
4기본 사용 형식은 “DELETE FROM 테이블 [WHERE 조건];” 이다. - 4
정답 2번 · WHERE 조건절이 없는 DELETE 명령을 수행하면 DROP TABLE 명령을 수행했을 때와 동일한 효과를 얻을 수 있다.

핵심 해설

DELETE는 테이블에 저장된 튜플(행)을 삭제하는 DML 명령으로, 기본 형식은 DELETE FROM 테이블명 [WHERE 조건]이다. WHERE 절을 생략하면 테이블의 모든 행이 지워지지만, 테이블 구조(스키마) 자체는 그대로 남아 빈 테이블로 존재한다. 반면 DROP TABLE은 DDL 명령으로 테이블의 데이터와 정의를 모두 제거해 테이블이 아예 사라진다. 따라서 WHERE 없는 DELETE와 DROP TABLE의 효과가 같다는 2번 설명이 틀렸다.

보기별 해설

1. 테이블의 행을 삭제할 때 사용한다는 설명은 옳다. DELETE는 열이나 테이블 구조가 아니라 튜플 단위로 데이터를 제거하는 명령이다.
2. WHERE 조건절이 없는 DELETE가 DROP TABLE과 동일한 효과라는 설명이 틀렸다. WHERE 없는 DELETE는 모든 행만 지우고 테이블 구조는 남기지만, DROP TABLE은 테이블 정의까지 삭제해 테이블 자체가 없어진다.
3. SQL을 용도에 따라 분류하면 DML에 해당한다는 설명은 옳다. DELETE는 SELECT·INSERT·UPDATE와 함께 저장된 데이터를 조작하는 데이터 조작어(DML)이다.
4. 기본 사용 형식이 DELETE FROM 테이블 [WHERE 조건];이라는 설명은 옳다. WHERE는 선택 사항이며, 지정하면 조건을 만족하는 행만 삭제된다.

정리

삭제 명령 비교 — DELETE(DML, 행 삭제, 구조 유지, 롤백 가능), TRUNCATE(DDL, 전체 행 삭제, 구조 유지), DROP(DDL, 데이터와 테이블 정의 모두 삭제).
#데이터베이스#SQL
Q19

관계 데이터 모델에서 릴레이션(Relation)에 포함되어 있는 튜플 (Tuple)의 수를 무엇이라고 하는가?

1Degree
2Cardinality
3Attribute
4Cartesian product
정답 2번 · Cardinality

핵심 해설

관계 데이터 모델에서 릴레이션은 행과 열로 구성된 표이며, 그 크기를 나타내는 두 용어가 차수와 카디널리티이다. 카디널리티(Cardinality)는 릴레이션에 포함된 튜플(행)의 수를 뜻하고, 차수(Degree)는 애트리뷰트(열)의 수를 뜻한다. 예를 들어 열이 3개이고 행이 5개인 테이블은 차수 3, 카디널리티 5이다. 문제는 튜플의 수를 물었으므로 답은 Cardinality이다.

보기별 해설

1. Degree(차수)는 릴레이션을 구성하는 애트리뷰트(열)의 개수이다. 세로 방향의 개수이므로 튜플 수를 가리키는 용어와 반대이며, 두 용어를 뒤바꿔 묻는 문제가 자주 출제된다.
2. Cardinality(카디널리티)는 릴레이션에 포함된 튜플(행)의 개수이다. 데이터가 추가·삭제될 때마다 값이 변하는 반면, 차수는 스키마가 바뀌지 않는 한 고정된다.
3. Attribute(애트리뷰트)는 릴레이션의 각 열 자체, 즉 개체의 성질을 나타내는 속성을 가리키는 이름이다. 열 하나를 부르는 용어일 뿐 개수를 나타내는 말이 아니다.
4. Cartesian product(카티션 프로덕트)는 두 릴레이션의 모든 튜플을 짝지어 결합하는 일반 집합 연산자(×)이다. 결과의 카디널리티가 두 릴레이션 카디널리티의 곱이 되는 연산일 뿐, 튜플 수를 뜻하는 용어는 아니다.

정리

릴레이션 크기 — Degree(차수) = 애트리뷰트(열)의 수, Cardinality(카디널리티) = 튜플(행)의 수. 세로가 차수, 가로가 카디널리티로 기억한다.
#데이터베이스
Q20

SQL의 명령을 사용 용도에 따라 DDL, DML, DCL로 구분할 경우, 그 성격이 나머지 셋과 다른 것은?

1SELECT
2UPDATE
3INSERT
4GRANT
정답 4번 · GRANT

핵심 해설

SQL은 사용 용도에 따라 DDL, DML, DCL로 분류된다. DDL(정의어)은 CREATE·ALTER·DROP으로 스키마와 객체 구조를 정의하고, DML(조작어)은 SELECT·INSERT·UPDATE·DELETE로 저장된 데이터를 조회하거나 변경하며, DCL(제어어)은 GRANT·REVOKE·COMMIT·ROLLBACK으로 권한과 트랜잭션을 제어한다. 보기 중 SELECT·UPDATE·INSERT는 모두 DML에 속하지만 GRANT는 사용자에게 객체 접근 권한을 부여하는 DCL이다. 따라서 성격이 나머지 셋과 다른 것은 GRANT이다.

보기별 해설

1. SELECT는 DML에 속하는 검색(질의) 명령으로, 테이블에 저장된 튜플을 조건에 맞게 조회한다. 데이터를 다루는 조작어이므로 나머지 두 조작어와 같은 부류이다.
2. UPDATE는 DML에 속하는 갱신 명령으로, UPDATE 테이블 SET 열=값 [WHERE 조건] 형식으로 기존 튜플의 속성값을 수정한다.
3. INSERT는 DML에 속하는 삽입 명령으로, INSERT INTO 테이블(열목록) VALUES(값목록) 형식으로 새로운 튜플을 추가한다.
4. GRANT는 DCL(데이터 제어어)에 속하는 권한 부여 명령이다. 특정 사용자에게 SELECT·INSERT 등 객체 사용 권한을 주며, 부여한 권한을 회수하는 명령은 REVOKE이므로 데이터를 조작하는 나머지 셋과 성격이 다르다.

정리

SQL 분류 — DDL: CREATE/ALTER/DROP, DML: SELECT/INSERT/UPDATE/DELETE, DCL: GRANT/REVOKE/COMMIT/ROLLBACK. 권한·트랜잭션 제어는 DCL.
#데이터베이스#SQL