💡 정보처리기사 필기 기출(2020-2022) 3과목 총정리!
관계형 데이터베이스
- 릴레이션(Relation)
-
릴레이션 스키마 : 구조를 나타냄
-
릴레이션 인스턴스 : 실제 값
릴레이션 특징
-
한 릴레이션에는 똑같은 튜플이 포함될 수 없음
-
한 릴레이션에 포함된 튜플 사이에는 순서가 없음
-
튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변함
-
릴레이션 스키마를 구성하는 속성들 간의 순서는 중요하지 않음
-
속성의 유일한 식별을 위해 속성의 명칭은 유일해야 함
-
하지만, 속성을 구성하는 값은 동일한 값이 있을 수 있음
-
릴레이션을 구성하는 튜플을 유일하게 식별하기 위해 속성들의 부분집합을 키로 설정
-
속성의 값은 논리적으로 더 이상 쪼갤 수 없는 원자값만을 저장
- 튜플(Tuple) 릴레이션을 구성하는 각각의 행을 말하며 속성의 모임으로 구성 파일 구조에서 레코드와 같은 의미
- 속성(Attribute)
-
디그리(Degree) 또는 차수 : 속성의 수
속성 특징
-
모든 속성 값은 원자 값을 갖는다. (원자 값 = 더 이상 쪼갤 수 없는 값)
-
속성의 이름은 유일해야 하지만, 값은 동일할 수 있다.
- 도메인(Domain) 도메인은 하나의 속성(attribute)이 취할 수 있는 같은 타입의 원자값들의 집합
DB 파티셔닝(Partitioning, 분할)
- 수평(horizontal) 분할 스키마(schema)가 같은 데이터를 두 개 이상의 테이블에 나누어 저장하는 것 분할 기법 범위(Range), 목록(List), 해시(Hash), 합성(Composite), 라운드 로빈 (Round Robin)
- 수직(vertical) 분할
- 로우 체이닝(Row Chaining) 길이가 너무 커서 하나의 블록에 저장되지 못하고 다수의 블록에 나누어져 저장
- 로우 마이그레이션(Row Migration) 수정된 데이터를 해당 데이터 블록에 저장하지 못하고 다른 블록의 빈 공간에 저장
시스템 카탈로그
- DBMS가 스스로 생성하고 유지하는 시스템 데이터베이스
- 메타 데이터 : 시스템 카탈로그에 저장되는 내용
- 갱신 허용 X
스키마 (Schema)
- 외부 스키마 (External Schema) 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 DB의 논리적 구조를 정의
- 내부 스키마 (Internal Schema) 실제 DB에 저장될 레코드의 물리적인 구조를 정의하고 저장 데이터 항목의 표현 방법을 나타냄
- 개념 스키마 (Conceptual Schema) DB의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의
무결성(Integrity)
무결성 종류
- 개체 무결성(Entity Integrity, 실체 무결성) 기본 테이블의 기본키는 Null 값이나 중복값을 가질 수 없고, 오직 하나의 값만 존재해야 한다는 조건
- 도메인 무결성(Domain Integrity, 영역 무결성) 주어진 속성 값이 정의된 도메인에 속한 값이어야 한다는 규정이다.
- 필드의 타입, NULL값의 허용 등에 대한 사항을 정의하고, 올바른 데이터의 입력 되었는지를 확인한다.
- DBMS의 기본값 설정, NOT NULL 옵션 등의 제약 사항으로 도메인 무결성을 보장할 수 있다.
- 참조 무결성(Referential Integrity) 참조 관계에 있는 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지되는 것
- 외래키 값은 Null이거나 참조 릴레이션의 기본키 값과 동일해야 한다.
- 즉, 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다는 규정이다.
- 외래키가 참조하려는 테이블의 기본키는 도메인과 속성 개수가 같아야 한다.
무결성 규칙 (Integrity rule)
데이터의 무결성을 지키기 위한 모든 제약 사항
- 무결성 규칙 : 데이터베이스 전체에 공통적으로 적용되는 규칙
- 비즈니스 규칙 (business rule) : 데이터베이스를 이용하는 각각의 유저에 따라 서로 다르게 적용
무결성 규정 대상
관계해석 (Relation Calculus)
원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성
연산자
- OR 연산 - V
원자식 간 “또는”이라는 관계로 연결
- AND 연산 - ∧
원자식 간 “그리고”라는 관계로 연결
- NOT 연산 - ㄱ
원자식에 대해 부정
정량자
- 전칭 정량자(Universal Quantifier) - ∀ 모든 가능한 튜플 “For All” All의 ‘A’를 뒤집은 형
- 존재 정량자(Existential Quantifier) - ∃ 어떤 튜플 하나라도 존재 “There Exists” Exists의 ‘E’를 뒤집은 형
관계 대수
관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어
- 릴레이션을 처리하기 위해 연산자와 연산규칙을 제공하는 언어로 피연산자가 릴레이션이고 결과도 릴레이션이다.
관계 대수 종류
- 순수 관계 연산자 데이터베이스에 적용할 수 있도록 특별히 개발한 관계 연산자
- Select - σ (sigma) 선택 조건을 만족하는 튜플의 부분 집합을 구하여 새로운 릴레이션을 만든다. (행-수평 연산)
- Project - π (pi) 속성 List에 제시된 Attribute만을 추출하는 연산 (열-수직 연산)
- Join - ⋈ 공통 속성을 중심으로 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산
- Division - ÷ 두개의 릴레이션이 있을때 하나의 속성(A)이 다른 하나의 속성(B)값을 모두 가진 튜플에서 B가 가진 속성을 제외한 속성만을 구하는 연산
- 일반 집합 연산자
- 합집합 (union) - ∪ 합집합의 카디널리티는 두 릴레이션 카디널리티의 합보다 크지 않음
- 교집합 (intersection) - ∩ 교집합의 카디널리티는 두 릴레이션 중 카디널리티가 적은 릴레이션의 카디널리티보다 크지 않음
- 차집합 (difference) - - 차집합의 카디널리티는 릴레이션 R의 카디널리티 보다 크지 않음
- 카티션 프로덕트 (cartesian product), 교차곱 - × 두 테이블의 교차곱 (곱집합) |R x S| = |R| x |S| 두 릴레이션의 카디널리티를 곱하고 디그리(차수)는 더한다.
데이터베이스 설계 순서
데이터베이스 계획 → 요구사항 분석 → 개념 데이터 설계 → 논리 데이터 설계 → 물리 데이터 설계 → 구현
- 개념적 설계 엔터티(Entities)와 엔터티 간의 관계(Relationship)를 표현하며, 업무 프로세스와 데이터 요소 간의 추상적인 관계를 보여준다
- ERD로 엔티티와 속성을 식별하고, 관계를 설정
- 데이터 무결성을 검사
- 논리적 설계
- 테이블 구조(스키마), 인덱스 설정과 트랜잭션, 제약 조건 등을 정의
- ERD 에서 테이블로의 매핑 작업
- 정규화를 통해 중복 및 이상 현상을 제거
- 물리적 설계 논리적 구조로 표현된 DB를 물리적 저장장치에 저장할 수 있는 물리 구조의 데이터로 변환하는 과정
- 실제 데이터베이스 시스템에 구축하는 과정
- 고려 사항 : 응답 시간, 저장 공간 효율, 트랜잭션 처리량
- 데이터 형식(크기), 인덱스 생성할지 말지, 레코드 양식, 접근 경로 설계
분산 데이터베이스 설계
논리적으로는 하나의 시스템, 물리적으로는 여러 개의 컴퓨터 사이트에 분산되어 있다.
- 목표 : 위치 투명성, 중복 투명성, 병행 투명성, 장애 투명성
- 구성 요소 : 분산 처리기, 분산 데이터베이스, 분산 네트워크, 분산 트랜잭션
- 구조 : 전역, 분할, 할당, 지역 스키마
- 단점 : 설계가 어렵고 개발, 처리 비용이 증가한다.
ERD (E-R Diagram)
- 그래픽 표현
| 그래픽 표현 | 의미 |
|---|
| 사각형 | 개체(Entitiy) 타입 |
| 마름모 | 관계(Relationship) 타입 |
| 타원 (원형) | 속성(Attribute) 타입 |
| 이중 타원 Ⓞ | 다중값 속성(복합 속성) |
| 밑줄 타원 | 기본키 속성 |
| 복수 타원 | 복합 속성 |
| 관계 | 1:1, 1:N, N:M 등의 개체 간 관계에 대한 대응수를 선위에 표시 |
| 선, 링크 | 개체 타입과 속성을 연결 |
키 (key)
-
기본 키(Primary key): 후보키에서 선택된 키
- 중복, NULL 값이 들어갈 수 없으며
- 기본키로 선택된 속성에는 동일한 값이 들어갈 수가 없다.
-
외래 키(Foreign Key): 다른 Relation의 기본 키를 참조하는 속성
- 테이블(Relation)들 간의 관계를 나타내기 위함
-
슈퍼 키(Super Key): 유일성을 만족하는 키.
({학번 + 이름}, {주민등록번호 + 학번} 등)
-
후보 키(Candidate key): 유일성과 최소성을 만족하는 키
- 기본키가 될 수 있는 후보이기 때문에 후보키라고 불린다. (주민등록번호, 학번 등)
-
대체 키(Surrogate key): 기본키로 선택되지 못한 후보키 (보조키)
-
복합 키(Composite Key): 2개 이상의 속성(attribute)를 사용한 키
인덱스 (index)
- 기본키로 지정한 컬럼에는 자동으로 인덱스가 생성된다. (그 외 컬럼에는 생성 안됨)
- 검색 성능 최적화 목적 (range scan)
트랜잭션 (Transaction)
데이터베이스에서 일어나는 일련의 연산들의 집합으로서, 하나의 논리적 기능을 수행하기 위한 작업의 단위이다.
트랜잭션 특성 (ACID)
- 원자성(Atomicity) : 한 트랜잭션의 모든 연산이 데이터베이스에 완전히 반영되거나, 전혀 반영되지 않아야 한다.
- Commit(완료), Rollback(복귀) 연산을 사용하여 원자성을 보장
- 일관성(Consistency) : 시스템이 가진 고정 요소는 트랜잭션 수행 전과 후에도 일관성있게 같은 상태여야 한다.
- 격리성(Isolation) : 다수의 트랜잭션이 병행 실행 중인 경우, 하나가 완전히 완료될 때까지 다른 트랜잭션의 연산이 끼어들면 안된다.
- 영속성(Durability) : 성공적으로 완료된 트랜잭션 결과는 시스템이 고장 난 경우에도 영구적으로 반영되어야 한다.
트랜잭션 상태
- 활성화(Active) : 트랜잭션이 작업을 시작하여 실행 중인 상태
- 실패(Failed) : 트랜잭션에 오류가 발생하여 실행이 중단된 상태
- 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
- 부분 완료(Partially commited) : 트랜잭션의 마지막 연산까지 실행하고 commit 요청이 들어온 직후의 상태. 최종 결과를 데이터베이스에 아직 반영하지 않은 상태.
- 완료(Commited) : 트랜잭션이 성공적으로 종료되어 commit 연산을 실행한 후의 상태
병행 제어 기법(Concurrency Control, 동시성 제어)
다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스의 일관성 유지를 위해 상호작용을 제어하는 기법
여러 동작이 병행적으로 일어날 때 문제 생기지 않게 제어하는 것
병행 제어 기법 목적
- 데이터베이스의 공유를 최대화
- 시스템 활용도를 최대화
- 데이터베이스의 일관성을 유지
- 사용자에 대한 응답시간을 최소화
병행 제어 기법 종류
- 로킹(Locking) 일관성과 무결성을 유지하기 위한 트랜잭션의 순차적 진행을 보장하는 직렬화 기법 트랜잭션이 데이터에 접근시 로킹 수행 → 로킹되어 있는 데이터에는 다른 트랜잭션이 접근할 수 없고, 트랜잭션은 로킹이 된 데이터에 대해서만 연산을 수행할 수 있다.
- 로킹 단위(Locking Granularity) 병행 제어에서 한꺼번에 로킹할 수 잇는 데이터 단위 (데이터베이스, 파일, 레코드, 필드 등) 로킹 단위 큼 → 로크 수 감소 → 병행성, 공유도 감소 → 기법 간단 로킹 단위 작음 → 로크 수 증가 → 병행성, 공유도 증가 → 기법 복잡
- 교착상태 가능성 O
- 타임 스탬프 (Time Stamp) 데이터에 접근하는 시간을 미리 정하여 정해진 시간의 순서대로 데이터에 접근하며 수행
- 다중 버전 병행 제어 (Multi-version Concurrency Control) 타임스탬프를 비교해 직렬 가능성이 보장되는 적절한 버전을 선택해 접근하도록 함 하나의 데이터 아이템에 대해 여러 버전의 값을 유지하며 조회 성능을 최대한 유지하기 위한 기법
- 낙관적 병행 제어 (Optimistic Concurrency Control) == 검증, 확인 기법 트랜잭션 수행 중에는 검사를 하지 않고, 트랜잭션 종료 시에 일괄적으로 검사
SQL
- DDL : create, drop, alter, rename
- DCL : role, grant, revoke 데이터 보안, 무결성 유지, 병행 제어 수행
- DML : insert, update, delete, select
- TCL : commit, rollback, savepoint
응용
- cascade : 참조 테이블 모두 삭제
- restricted : 다른 개체가 제거할 요소를 참조중이면 삭제 취소
- trigger : 데이터의 이벤트(입력, 갱신, 삭제 등)가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL
정규화
도부이결다조
- 제 1 정규형 → 도메인 분해 각 컬럼이 하나의 속성만 가져야 한다.
- 제 2 정규형 → 부분 함수 종속 제거
- 제 3 정규형 → 이행 함수 종속 제거 이행 함수 : A->B, B->C가 성립할 때 A->C가 성립
- BCNF(Boyce-Codd Normal Form) → 결정자가 후보키가 아닌 함수 종속 제거
- 제 4 정규형 → 다중치 종속 제거
- 제 5 정규형 → 조인 종속 제거
함수적 종속 (Functional Dependency)
- X → Y
Y는 X에 함수 종속이다.
X = 결정자, Y = 종속자
X의 값 각각에 대해 시간에 관계없이 항상 Y의 값이 오직 하나만 연관되어 있을 때
ex) X = 학번, Y = 이름, 학년, 학과
뷰 (view)
- 독립적인(독자적인) 인덱스를 가질 수 없음
- 뷰의 정의를 변경할 수 없음
- 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 있음
- 정의할때는 CREATE, 제거할 때는 DROP 문 사용 (*ALTER 사용 불가)
이상(Anomaly)
- 삽입 이상(Insertion Anomaly): 릴레이션에 데이터를 삽입할 때 의도와는 상관없는 값들도 함께 삽입되는 현상이다.
- 삭제 이상(Deletion Anomaly): 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들이 삭제되는 연쇄가 일어나는 현상이다.
- 갱신 이상(Update Anomaly): 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되며 정보에 모순이 생기는 현상이다.