3과목 데이터베이스 구축
1 데이터베이스 설계 ★★
1) 데이터베이스 설계 시 고려사항
- 무결성, 일관성, 회복, 보안, 효율성, 데이터베이스 확장
2) 데이터베이스 설계 순서 ★★ #요개논물구
| 순서 | 설명 | | — | — | | 요구 조건 분석 | 요구 조건 명세서 작성 | | 개념적 설계 (정보 모델링, 개념화) | 독립적인 개념 스키마 모델링, 트랜잭션 모델링
E-R 다이어그램 모델 ★ |
| 논리적 설계 (데이터 모델링) | 목표 DBMS에 맞는(종속적인) 논리 스키마 설계
트랜잭션 인터페이스 설계, 테이블 설계(RDB),
논리적 데이터베이스 구조로 매핑(Mapping), 스키마의 평가 및 정제 ★ | | 물리적 설계 (데이터 구조화) | 목표 DBMS에 맞는(종속적인) 물리적 구조의 데이터로 변환
저장 레코드, 접근 경로 설계 ★ |
| 구현 | 목표 DBMS의 DDL(데이터 정의어)로 데이터베이스 생성, 트랜잭션 작성 |
2 데이터 모델 ★★
1) 데이터 모델의 구성 요소 #개속관
- 개체(Entity): 데이터베이스에 표현하려는 것으로 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체
- 속성(Attribute): 데이터의 가장 작은 논리적 단위로서 파일 구조상의 데이터 항목 또는 데이터 필드에 해당
- 관계(Relationship): 개체 간의 관계 또는 속성 간의 논리적인 연결을 의미
2) 개념적 데이터 모델
- 현실 세계에 대한 인간의 이해를 돕기 위해 현실 세계에 대한 인식을 추상적 개념으로 표현하는 과정
-
E-R(Entity-Relation) 모델
-
3) 논리적 데이터 모델
- 개념적 모델링 과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 컴퓨터 세계의 환경에 맞도록 변환하는 과정
- 단순히 데이터 모델이라고 하면 논리적 데이터 모델을 의미
-
관계 모델, 계층 모델, 네트워크 모델
-
4) 데이터 모델에 표시할 요소 ★ #구연제
- 구조(Structure): 논리적인 개체 타입들 간의 관계, 데이터 구조 및 정적 성질을 표현
- 연산(Operation): 실제 데이터를 처리하는 작업에 대한 명세로, 조작하는 기본 도구
- 제약 조건(Constraint): DB에 저장될 수 있는 실제 데이터의 논리적인 제약 조건
3 개체(Entity) ★
1) 개체의 정의 및 특징
- 실세계에 독립적으로 존재하는 유형, 무형의 정보로 서로 연관된 몇 개의 속성으로 구성됨
- 데이터베이스에 표현하려는 것으로 사람이 생각하는 개념이나 정보 단위같은 현실 세계의 대상체
- 독립적으로 존재하거나 그 자체로서도 구별 가능
- 유일한 식별자(Unique Identifier)에 의해 식별 가능
- 다른 개체와 하나 이상의 관계(Relationship)가 있음
2) 개체 선정 방법
- 실제 업무를 담당하고 있는 담당자와 인터뷰를 함
- 실제 업무에 사용되고 있는 장부와 전표를 이용
- 자료 흐름도(DFD; Data Flow Diagram)를 통해 업무 분석을 수행했을 경우 자료 흐름도의 자료 저장소(Data Store)를 이용함
- BPR(Business Process Reengineering, 업무 프로세스 재설계)에 의해 업무를 재정의한 경우 관련 개체를 찾음
3) 개체명 지정 방법
- 일반적으로 해당 업무에서 사용하는 용어로 지정
- 약어 사용은 되도록 제한
- 가능하면 단수 명사 사용
- 모든 개체명은 유일해야 함
- 가능하면 개체가 생성되는 의미에 따라 이름 부여 ex) 교수, 고객, 주문, 도시 등
4 속성(Attribute) ★
1) 속성의 정의 및 특징 카튜
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 파일 구조상의 데이터 항목 또는 데이터 필드
- 개체를 구성하는 항목 및 개체의 특성을 기술
- 속성의 수를 디그리(Degree) 또는 차수라고 함 ★
cf) 튜플(Tuple)의 수는 카디널리티(Cardinality) ★
2) 속성의 특성에 따른 분류
종류 | 설명 |
---|---|
기본 속성 | |
(Basic Attribute) | 업무 분석을 통해 정의한 속성 |
ex) 자동차명, 제조일, 연비 | |
설계 속성 | |
(Designed Attribute) | 원래 업무상 존재하지 않고 설계 과정에서 도출해낸 속성 |
ex) 자동차 코드 | |
파생 속성 | |
(Derived Attribute) | 다른 속성으로부터 영향을 받아 발생하는 속성 |
ex) 계산 값 |
3) 개체 구성 방식에 따른 분류
종류 | 설명 |
---|---|
기본 키 속성 | |
(Primary Key Attribute) | 개체를 식별할 수 있는 속성 |
외래 키 속성 | |
(Foreign Key Attribute) | 다른 개체와의 관계에서 포함된 속성 |
일반 속성 | 개체에 포함되어 있고 기본 키, 외래 키에 포함되지 않은 속성 |
4) 속성명 지정 원칙
- 해당 업무에서 사용하는 용어 지정
- 서술형으로 지정하지 않음
- 가급적 약어의 사용은 제한
- 개체명은 속성명으로 사용할 수 없음
- 개체에서 유일하게 식별 가능하도록 지정
5 관계(Relationship) ★
1) 관계의 형태
- 일 대 일(1:1): 개체 집합 A의 각 원소가 개체 집합 B의 원소 한 개와 대응하는 관계
- 일 대 다(1:N): 개체 집합 A의 각 원소는 개체 집합 B의 원소 여러 개와 대응하고 있지만, 개체 집합 B의 각 원소는 개체 집합 A의 원소 한 개와 대응하는 관계
- 다 대 다(N:M): 개체 집합 A의 각 원소는 개체 집합 B의 원소 여러 개와 대응하고, 개체 집합 B의 각 원소도 개체 집합 A의 원소 여러 개와 대응하는 관계
2) 관계의 종류 #종중재배
- 종속(Dependant) 관계, 중복(Redundant) 관계, 재귀(Recursive) 관계, 배타(Exclusive) 관계
6 식별자(Identifier) ★
- 하나의 개체 내에서 각각의 인스턴스를 유일(Unique)하게 구분할 수 있는 구분자
- 모든 개체는 한 개 이상의 식별자를 반드시 가져야 함
| 분류 | 식별자 | 설명 | | — | — | — | | 대표성 여부 | 주 식별자 (Primary Identifier) | 개체를 대표하는 유일한 식별자, 하나의 개체에 한 개만 존재 ★ | | | 보조 식별자 (Alternate Identifier) | 주 식별자를 대신해 개체를 식별할 수 있는 속성, 하나의 개체에 한 개 이상이 존재 | | 스스로 생성 여부 | 내부 식별자 (Internal Identifier) | 개체 내에서 스스로 만들어지는 식별자 | | | 외부 식별자 (Foreign Identifier) | 다른 개체와의 관계(Relationship)에 의해 외부 개체의 식별자를 가져와 사용하는 식별자, 자신의 개체에서 다른 개체를 찾아가는 연결자 역할 | | 단일 속성 여부 | 단일 식별자 (Single Identifier) | 주 식별자가 한 가지 속성으로만 구성된 식별자 | | | 복합 식별자 (Composite Identifier) | 주 식별자가 두 개 이상의 속성으로 구성된 식별자 | | 대체 여부 | 원조 식별자 (Original Identifier) | 업무에 의해 만들어지는 가공되지 않은 원래의 식별자 (본질 식별자) | | | 대리 식별자 (Surrogate Identifier) | 주 식별자의 속성이 두 개 이상인 경우 속성들을 하나의 속성으로 묶어 사용하는 식별자 (인조 식별자) ★ |
7 E-R(개체-관계) 모델 ★★
1) 개요
- 개념적 데이터 모델의 가장 대표적인 것
- 1976년 피터 첸(Peter Chen)에 의해 제안되고 기본적인 구성 요소가 정립됨
- 데이터를 개체(Entity), 속성(AttributE), 관계(Relationship)으로 묘사
- 특정 DBMS를 고려한 것은 아님
- E-R 다이어그램으로 1:1, 1:N, N:M 등의 관계 유형을 제한 없이 나타냄
2) 피터 첸 표기법 ★ _
속성에 밑줄있으면 기본 속성임
3) 정보 공학 표기법(Information Engineering Notation, 크로우즈 핏)
- 1981년 클리프 핀켈쉬타인(Clive Finkelstein)과 제임스 마틴(James Maritn)이 공동 개발
기호 | 의미 |
---|---|
I | 필수(Mandatory) |
O | 선택적(Optional) |
< | 다중(Multiple) |
- 실선은 1개를 의미, 까마귀 발은 N개를 의미함
- 원형 표시는 선택적 의미를 지니는데 관계가 있을 수도, 없을 수도 있다는 것
4) 바커 표기법(Barker Notation)
- 영국 컨설팅 회사 CACI에서 개발, 리차드 바커(Richard Barker)에 의해 정립
기호 | 의미 |
---|---|
필수(Mandatory) | |
———– | 선택적(Optional) |
< | 다중(Multiple) |
8 관계형 데이터 모델 ★★
1) 개요 ★
- 2차원적인 표(Table)를 이용해 데이터 상호 관계를 정의하는 DB 구조
- 기본 키(Primary Key)와 이를 참조하는 외래 키(Foreign Key)로 데이터 간의 관계를 표현
- 계층 모델과 망 모델의 복잡한 구조를 단순화시킨 모델
- 관계형 모델의 대표적인 언어는 SQL이고 1:1, 1:N, N:M 관계를 자유롭게 표현
2) 관계형 데이터 모델(Relational Data Model)의 구성
9 관계형 데이터베이스의 구조 ★★
1) 관계형 데이터베이스의 Relation 구조 ★★
- 1970년 IBM에 근무하던 코드(E. F. Codd)에 의해 처음 제안됨
▶ 튜플(Tuple), 행(Row), 레코드(Record)
-속성의 모임으로 구성됨
-파일 구조상 레코드(실제 데이터)와 같은 의미
-튜플의 수 = 카디널리티(Cardinality) 또는 기수, 대응수 ★
▶ 속성(Attribute), 열(Column), 필드(Field)
-데이터베이스를 구성하는 가장 작은 논리적 단위
-파일 구조상의 데이터 항목 또는 데이터 필드에 해당
-개체의 특성을 기술
-속성의 수 = 디그리(Degree) 또는 차수 ★
▶ 도메인(Domain) ★
- 하나의 속성(Attribute, 애트리뷰트)이 가질 수 있는 같은 타입 원자(Atomic)값들의 집합 ex) 성별 속성(Attribute)의 도메인은 ‘남’, ‘여’로 그 외의 값은 입력될 수 없음(일반적)
2) 릴레이션의 특징 ★
- 한 릴레이션(테이블)에 포함된 튜플(행)들은 모두 상이함, 즉 서로 다른 값을 갖음
- 한 릴레이션(테이블)에 포함된 튜플(행) 사이에는 순서가 없음
- 릴레이션 스키마를 구성하는 애트리뷰트(열) 간의 순서는 중요하지 않음
- 각 애트리뷰트는 식별을 위해 릴레이션 내에서 유일한 이름을 가짐, 그러나 그에 해당하는 도메인(애트리뷰트를 구성하는 값)에는 동일한 값이 있을 수 있음 ex) ‘학년’ 속성에는 1, 2, 3, 4 값이 중복될 수 있음
- 애트리뷰트는 논리적으로 더 이상 쪼갤 수 없는 원자 값으로 저장함
▶ 정리
- 튜플은 서로 상이한 값을 갖고, 순서가 없음
- 애트리뷰트는 원자 값을 가지고, 순서가 중요하지 않으며, 유일한 이름을 가짐
10 키(Key) ★★
- 데이터베이스에서 튜플들을 서로 구분할 수 있는기준이 되는 속성(Attribute)
1) 후보키(Candidate Key) ★
튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들, 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재
- 릴레이션에 있는 모든 튜플에 대해 유일성과 최소성을 만족시켜야 함 ★
▶ 유일성(Unique): 하나의 키 값으로 하나의 튜플만을 유일하게 식별할 수 있어야 함
▶ 최소성(Minimality): 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성으로만 구성되어야 함
2) 기본키(Primary Key)
- 후보키 중에서 특별히 선정된 주키(Main Key)로, 중복된 값과 NULL값을 가질 수 없음
- 후보키의 성질인 유일성과 최소성을 가지며 튜플을 식별하기 위해 반드시 필요한 키
3) 대체키(Alternate Key)
- 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키
4) 슈퍼키(Super Key) ★
- 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키
- 모든 튜플에 대해 유일성은 만족시키지만, 최소성은 만족시키지 못함
5) 외래키(Foreign Key) ★
- 다른 릴레이션의 기본키를 참조하는 속성 또는 속성들의 집합
- 참조되는 릴레이션의 기본키와 대응돼 릴레이션 간의 참조 관계를 표현
11 무결성(Integrity) ★★
- 데이터베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제 값이 일치하는 정확성을 의미
1) 개체 무결성(Entity Integrity, 실체 무결성) ★
- 테이블의 기본키를 구성하는 어떤 속성(Attribute)도 널(NULL)값이나 중복 값을 가질 수 없음
- 기본키의 속성 값이 널(NULL)값이 아닌 원자 값을 갖는 성질
2) 도메인 무결성(Domain Integrity, 영역 무결성)
- 릴레이션 내의 튜플들이 각 속성(Attribute)의 도메인에 지정된 값 만을 가져야 함
3) 참조 무결성(Referential Integrity) ★
- 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 함
- 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다는 규정
4) 사용자 정의 무결성(User-Defined Integrity)
- 속성 값들이 사용자가 정의한 제약 조건에 만족해야 함
5) 데이터 무결성 강화
- 애플리케이션: 데이터 생성, 수정, 삭제 시 무결성 조건을 검증하는 코드를 데이터를 조작하는 프로그램 내에 추가
- 데이터베이스 트리거: 트리거 이벤트에 무결성 조건을 실행하는 절차형 SQL을 추가
- 제약 조건: 데이터베이스에 제약 조건을 설정해 무결성을 유지
12 관계대수 및 관계해석 ★★★
1) 관계대수 ★★
- 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게(How) 유도하는가를 기술하는 절차적인 언어
▶ 순수관계 연산자 #셀프조디
연산자 | 기호 | 의미 |
---|---|---|
Select | ||
(선택) | σ | 조건(Predicate)을 만족하는 튜플들의 부분 집합 |
(수평 연산) ★ | ||
Project | ||
(추출) | π | 속성들의 부분 집합, 중복은 제거됨 |
(수직 연산) ★ | ||
Join | ||
(조인) | ▷◁ | 두 개의 릴레이션이 공통으로 가지고 있는 속성을 이용하여 두 개의 릴레이션을 하나로 합쳐서 새로운 릴레이션을 만드는 연산 ★ |
두 개의 릴레이션의 연관된 튜플들을 결합 | ||
Division | ||
(나누기) | ÷ | R릴레이션에서 S릴레이션의 속성 도메인 값과 일치하는 R릴레이션의 튜플들을 찾아내는 연산 ★ |
▶ 일반집합 연산자 #합교차카
연산자 | 기호 | 의미 |
---|---|---|
Union | ||
(합집합) | ∪ | |
ex) R∪S | 두 개의 릴레이션의 합이 추출되고, 중복은 제거됨 | |
Intersection | ||
(교집합) | ∩ | |
ex) R∩S | R릴레이션과 S릴레이션의 중복되는 값들만 추출 | |
Difference | ||
(차집합) | — | |
ex) R - S | R릴레이션에서 S릴레이션에 중복되지 않는 값들만 추출 | |
Cartesian Product | ||
(교차곱) | Х | |
ex) R x S | 두 릴레이션의 가능한 모든 튜플들의 집합, | |
차수(Degree)는 더하고, 카디널리티(Cardinality)는 곱해서 값을 구함 ★ |
2) 관계해석(Relational Calculus)
- 관계 데이터 모델의 제안자인 코드(E. F. Codd)가 수학의 Predicate Calculus(술어 해석)에 기반을 두고 관계 데이터베이스를 위해 제안
- 원하는 정보가 무엇(What)이라는 것만 정의하는 비절차적 특성
- 튜플 관계해석, 도메인 관계해석
- 기본적으로 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력면에서 동등
- 관계대수로 표현한 식은 관계해석으로 표현할 수 있음
구분 | 구성요소 | 기호 | 설명 |
---|---|---|---|
연산자 | OR 연산 | V | 원자식 간 “또는”이라는 관계로 연결 |
AND 연산 | ∧ | 원자식 간 “그리고”라는 관계로 연결 | |
NOT 연산 | ㄱ | 원자식에 대해 부정 | |
정량자 | 전칭 정량자 | ||
(Universal Quantifier | ∀ | 모든 가능한 튜플 “For All” | |
# All의 ‘A’를 뒤집은 형태 ★ | |||
존재 정량자 | |||
(Existential Quantifier) | ∃ | 어떤 튜플 하나라도 존재 “There Exists” | |
# Exists의 ‘E’를 뒤집은 형태 ★ |
3) 관계대수와 관계해석 비교 ★
구분 | 관계대수 | 관계해석 |
---|---|---|
특징 | 절차적 언어(순서 명시) | 비절차적 언어(계산 수식의 유연적 사용), |
프레디킷 해석(Predicate Calculus) 기반 | ||
목적 | 어떻게 유도하는가?(How) | 무엇을 얻을 것인가?(What) |
종류 | 순수관계 연산자, 일반집합 연산자 | 튜플 관계 해석, 도메인 관계 해석 |
13 정규화(Normalization), 반정규화(Denormalization) ★★
- 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정
- 데이터베이스의 논리적 설계 단계에서 수행
1) 정규화의 목적 ★
- 데이터 구조의 안정성 및 무결성을 유지
- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만듦
- 효과적인 검색 알고리즘 생성 가능
- 데이터 중복을 배제해 이상(Anomaly)의 발생 방지 및 자료 저장 공간의 최소화
- 개체와 속성의 누락 여부 확인 가능
- 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄임
2) 이상(Anomaly)의 개념 및 종류 ★ #삽삭갱
- 정규화를 거치지 않아 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 예기치 못하게 발생하는 곤란한 현상
▶ 삽입 이상(Insertion Anomaly): 릴레이션에 데이터를 삽입할 때 의도와 상관없이 원하지 않은 값들도 함께 삽입되는 현상
▶ 삭제 이상(Deletion Anomaly): 릴레이션에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 현상
▶ 갱신 이상(Update Anomaly): 릴레이션에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상
3) 정규화의 원칙
- 정보의 무손실, 분리의 원칙, 데이터의 중복성 감소
4) 정규화 과정 ★★ #원부이결다조
- | 정규형 | 설명 |
- | — | — |
- | 1NF
- (제1정규형) | 릴레이션에 속한 모든 도메인(Domain)이 원자 값(Atomic Value)만으로 되어 있는 정규형 |
- | 2NF
- (제2정규형) | 릴레이션 R이 1NF고, 기본키가 아닌 모든 속성이 기본키(PK)에 대해
- 완전 함수적 종속을 만족하는, 부분적 함수 종속을 제거한 정규형 ★ |
- | 3NF
- (제3정규형) | 릴레이션 R이 2NF고, 기본키가 아닌 모든 속성이 기본키에 대해 *이행적 함수 종속 관계를 만족하지 않는 정규형
- A → B이고 B → C일 때 A → C를 만족하는 관계(이행 규칙) ★ | | BCNF (Boyce-Codd 정규형) | 릴레이션 R에서 모든 결정자가 후보키인 정규형, 모든 BCNF가 종속성을 보존하는 것은 아님 (강한 제3정규형, 보이스/코드 정규형) | | 4NF (제4정규형) | 릴레이션 R에 다치 종속이 성립하는 경우 R의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형 | | 5NF (제5정규형) | 릴레이션 R의 모든 조인 종속이 R의 후보키를 통해서만 성립되는 정규형 |
5) 반정규화 개념 ★
- 시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위 ★★
- 그러나 데이터의 일관성 및 정합성이 저하될 수 있음
6) 반정규화 방법
-
테이블 통합: 1:1 관계 1:N 관계 슈퍼타입/서브타입 {테이블 통합} - 테이블 분할: 수평 분할, 수직 분할 → 기본키의 유일성 관리가 어려워짐
- 중복 테이블 추가: 집계 테이블 | 진행 테이블 | 특정 부분만을 포함하는 테이블 {추가} #집진특 ★
- 중복 속성 추가: 자주 사용하는 속성을 하나 더 추가하는 것
14 시스템 카탈로그(System Catalog) ★★
1) 시스템 카탈로그의 의미 ★
- 사용자를 포함해 DBMS에서 지원하는 모든 데이터 객체에 대한 정의나 명세에 관한 정보를 유지 관리하는 시스템 테이블
- 좁은 의미로는 카탈로그를 데이터 사전(Data Dictionary)이라고도 함
- 시스템 카탈로그에 저장된 정보를 메타 데이터(Meta-Data)라고 함
2) 카탈로그의 특징
- 일반 이용자도 SQL을 이용해 내용을 검색할 수 있음
- INSERT, DELETE, UPDATE문으로 카탈로그를 갱신할 수 없음 ★ 단순 조회만 가능
- DBMS에 따라 상이한 구조를 갖음
- 카탈로그는 DBMS가 스스로 생성하고 유지함
- 사용자가 SQL문을 실행시켜 변화를 주면 시스템이 자동으로 갱신함
3) 데이터 디렉터리(Data Directory, 사전 관리기)
- 데이터 사전(Data Dictionary)에 수록된 데이터를 실제로 접근하는 데 필요한 정보를 관리 유지하는 시스템
- 시스템만 접근할 수 있음
cf) 시스템 카탈로그(데이터 사전): 사용자와 시스템 모두 접근할 수 있음
15 데이터베이스 저장 공간 설계 ★
1) 테이블(Table)
- 데이터베이스의 가장 기본적인 객체로 행(Row, 튜플), 열(Column, 컬럼)로 구성
- 논리 설계 단계의 개체(Entity)에 대응하는 객체
2) 클러스터드 인덱스 테이블(Clustered Index Table)
- 기본키나 인덱스키의 순서에 따라 데이터가 저장되는 테이블
- 일반적인 인덱스를 사용하는 테이블에 비해 접근 경로가 단축됨
3) 파티셔닝 테이블(Partitioning Table) #레해리컴
- 대용량의 테이블을 작은 논리적 단위인 파티션으로 나는 테이블
- 파티션 키를 잘못 구성하면 성능 저하 등의 역효과 초래
종류 | 설명 |
---|---|
레인지 파티셔닝 | |
(Range Partitioning) | 지정한 열의 값을 기준으로 분할 (범위분할) |
ex) 일별, 월별, 분기별 등 | |
해시 파티셔닝 | |
(Hash Partitioning) | 해시 함수에 따라 데이터 분할 (해시분할) |
리스트 파티셔닝 | |
(List Partitioning) | 미리 정해진 그룹핑 기준에 따라 분할 |
컴포지트 파티셔닝 | |
(Composite Partitioning) | 레인지 파티셔닝 이후 해시 함수를 적용 (조합분할) |
ex) 범위분할 + 해시분할 |
▶ 파티션의 장점
-성능 향상, 가용성 향상, 백업 가능, 경합 감소 #성가백합
4) 외부 테이블(External Table)
- 데이터베이스에서 일반 테이블처럼 이용할 수 있는 외부 파일
-
데이터 웨어하우스(Data Warehouse), ETL(Extraction, Transformation, Loading)
5) 임시 테이블(Temporary Table)
- 트랜잭션이나 세션별로 데이터를 저장하고 처리할 수 있는 테이블
- 임시테이블에 저장된 데이터는 트랜잭션이 종료되면 삭제됨
- 절차적인 처리를 위해 임시로 사용하는 테이블
6) 컬럼(Column, 열)
- 가변 길이 데이터 타입: 예상되는 최대 길이로 정의
- 고정 길이 데이터 타입: 최소 길이로 지정
- 소수점 이하 자릿수: 소수점 이하 자릿수는 반올림되어 저장
- 고정 길이 컬럼이고 NOT NULL인 컬럼: 앞 쪽
- 가변 길이 컬럼, NULL값이 많을 것으로 예상되는 컬럼: 뒤 쪽
7) 테이블스페이스(Tablespace)
- 테이블이 저장되는 논리적인 영역
- 테이블을 저장하면 논리적으로는 테이블스페이스에 저장되고, 물리적으로는 해당 테이블스페이스와 연관된 데이터 파일(Data File)에 저장됨
▶ 테이블스페이스 설계 시 고려사항
-업무별로 구분해 지정하고, 테이블과 인덱스는 분리해 저장함
-대용량 테이블은 하나의 테이블스페이스에 독립적으로 저장함
-LOB(Large Object) 타입의 데이터는 독립적인 공간으로 지정함
16 트랜잭션(Transaction) ★★★
1) 트랜잭션의 정의 ★
- 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
- 한꺼번에 모두 수행되어야 할 일련의 연산들
▶ COMMIT: 트랜잭션 처리가 정상적으로 종료되어 수행한 변경 내용을 DB에 반영하는 명령어
▶ ROLLBACK: 트랜잭션 처리가 비정상으로 종료되어 DB의 일관성이 깨졌을 때 트랜잭션이 행한 모든 변경 작업을 취소하고 이전 상태로 되돌리는 연산
▶ SAVEPOINT(=CHECKPOINT): 트랜잭션 내에서 ROLLBACK할 위치인 저장점을 지정하는 명령어, 여러 개의 SAVEPOINT 지정 가능
- COMMIT과 ROLLBACK 명령어에 의해 보장 받는 트랜잭션 특징 = 원자성 ★
2) 트랜잭션의 특성 ★★
원리 | 특징 |
---|---|
원자성 | |
(Atomicity) | 트랜잭션 연산을 데이터베이스 모두에 반영되든지 아니면 전혀 반영되지 않아야 함(All or Nothing) ★ |
일관성 | |
(Consistency) | 트랜잭션이 실행을 성공적으로 완료할 시 일관성 있는 데이터베이스 상태를 유지 |
독립성 | |
(Isolation, 격리성) | 둘 이상 트랜잭션 동시 실행 시 한 개의 트랜잭션만 접근이 가능하여 간섭 불가 |
영속성 | |
(Durability) | 성공적으로 완료된 트랜잭션 결과는 영구적으로 반영됨 |
3) CRUD 매트릭스
- ‘C > D > U > R’의 우선순위
- 테이블, 프로세스에 C, R, U, D가 모두 없는 경우
- 테이블에 C 또는 R이 없는 경우 (프로세스는 하나만 있어도 돌아감)
17 인덱스(Index) ★
1) 인덱스의 개념 및 선정기준, 고려사항
- 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터>쌍으로 구성된 데이터 구조
▶ 인덱스 컬럼 선정 ★
- 인덱스 컬럼의 분포도(Selectivity)가 10~15% 이내인 “컬럼” -가능한 한 수정이 빈번하지 않는 “컬럼” -ORDER BY, GROUP BY, UNION이 빈번한 “컬럼” -분포도가 좋은 컬럼은 단독 인덱스로 생성 -인덱스들이 자주 조합되어 사용되는 컬럼은 결합 인덱스로 생성
▶ 설계 시 고려사항 ★
- 새로 추가되는 인덱스는 기존 엑세스 경로에 영향을 미칠 수 있음 -지나치게 많은 인덱스는 오버헤드(Overhead) 발생 -넓은 범위 인덱스 처리 시 오히려 전체 처리보다 많은 오버헤드를 발생시킴 -인덱스만의 추가적인 저장 공간이 필요 -인덱스와 테이블 데이터의 저장 공간이 분리되도록 설계
2) 인덱스 종류
- 클러스터드 인덱스(Clustered Index) / 넌클러스터드 인덱스(Non-Clustered Index)
- 트리 기반 인덱스: 인덱스를 저장하는 블록들이 트리 구조를 이루고 있는 것
- 비트맵 인덱스: 인덱스 컬럼의 데이터를 Bit 값인 0, 1로 변환해 인덱스 키 사용
- 함수 기반 인덱스: 컬럼에 특정 함수나 수식을 적용해 산출된 값을 사용하는 것
- 비트맵 조인 인덱스: 다수의 조인된 객체로 구성된 인덱스
- 도메인 인덱스: 개발자가 필요한 인덱스를 직접 만들어 사용하는 것 (확장형 인덱스)
18 뷰(View) ★★
1) 뷰의 개요 및 특징
- 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블로 기본 테이블과 같은 형태의 구조를 사용하며, 조작도 기본 테이블과 거의 같음
- 가상 테이블이기 때문에 물리적으로 구현되어 있지 않지만 사용자에게 있는 것처럼 간주됨 → 저장장치 내에 논리적으로 존재
- 정의된 뷰로 다른 뷰를 정의할 수 있음
- 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제됨
속성 | 설명 |
---|---|
REPLACE | 뷰가 이미 존재하는 경우 재생성 |
FORCE | 본 테이블의 존재 여부에 관계 없이 뷰 생성 |
NOFORCE | 기본 테이블이 존재할 때만 뷰 생성 |
WITH CHECK OPTION | 서브 쿼리 내의 조건을 만족하는 행만 변경 |
WITH READ ONLY | 데이터 조작어(DML) 작업 불가 |
2) 뷰의 장, 단점 ★
▶ 장점
- 논리적 데이터 독립성 제공
- 접근 제어를 통한 자동 보안 제공
- 사용자 데이터 관리 용이
▶ 단점
- 독립적인 인덱스를 가질 수 없음
- 뷰의 정의를 ALTER로 변경할 수 없음 → DROP하고 새로 CREATE해야 함
- 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약이 따름
19 클러스터(Cluster) ★
1) 클러스터의 개요 및 특징 ★
- 데이터 저장 시 데이터 액세스 효율을 향상시키기 위해 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 물리적 저장 방법
- 인덱스의 단점을 해결한 기법 → 분포도(Selectivity)가 넓을수록 오히려 유리함
- 분포도가 넓은 “테이블”의 클러스터링은 저장 공간의 절약이 가능
- 대량의 범위를 자주 액세스(조회)하는 경우 적용
- 인덱스를 사용한 처리 부담이 되는 넓은 분포도에 활용
2) 클러스터의 선정기준 및 고려사항
▶ 클러스터 테이블 선정
- 수정이 빈번하지 않는 “테이블” -ORDER BY, GROUP BY, UNION이 빈번한 “테이블” -처리 범위가 넓어 문제가 발생하는 경우 단일 테이블 클러스터링 사용 -조인이 많아 문제가 발생되는 경우는 다중 테이블 클러스터링 사용
▶ 설계 시 고려사항
- 클러스터링 된 테이블은 조회 속도를 향상시켜주지만 입력, 수정, 삭제 시 성능이 저하됨(부하가 증가) -대용량을 처리하는 트랜잭션은 전체 테이블을 스캔하는 일이 자주 발생하므로 클러스터링을 하지 않는 것이 좋음 -클러스터링 된 테이블에 클러스터드 인덱스를 생성하면 접근 성능이 향상됨
20 분산 데이터베이스 설계 ★★
1) 분산 데이터베이스 정의
- 논리적으로는 하나의 시스템에 속하지만 물리적으로는 네트워크를 통해 연결된 여러 개의 컴퓨터 사이트(Site)에 분산돼 있는 데이터베이스
2) 분산 데이터베이스의 구성 요소
구성 요소 | 설명 |
---|---|
분산 처리기 | 자체적으로 처리 능력을 가지며, |
지리적으로 분산되어 있는 컴퓨터 시스템 | |
분산 데이터베이스 | 지리적으로 분산되어 있는 데이터 베이스, |
해당 지역의 특성에 맞게 구성된 데이터 베이스 | |
통신 네트워크 | 분산 처리기들을 통신망으로 연결해 논리적으로 하나의 시스템처럼 작동할 수 있도록 하는 통신 네트워크 |
3) 분산 데이터베이스의 목표 ★★ #위복병분장
목표 | 설명 |
---|---|
위치 투명성 | |
(Location Transparency) | 데이터베이스의 실제 위치를 알 필요 없이 단지 데이터베이스의 논리적인 명칭만으로 액세스할 수 있음 |
중복 투명성 | |
(Replication Transparency, 복제 투명성) | 동일 데이터가 여러 곳에 중복되어 있더라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용하고, 시스템은 자동으로 여러 자료에 대한 작업을 수행 |
병행 투명성 | |
(Concurrency Transparency) | 다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션의 결과는 영향을 받지 않음 |
분할 투명성 | |
(Division Transparency) | 하나의 논리적 릴레이션이 여러 단편으로 분할되어 각 단편의 사본이 여려 시스템에 저장되어 있음을 인식할 필요가 없음 |
장애 투명성 | |
(Failure Transparency) | 트랜잭션, DBMS, 네트워크, 컴퓨터 장애가 발생해도 트랜잭션을 정확하게 처리하고 데이터 무결성을 보장함 |
4) 분산 데이터베이스의 장, 단점
| 장점 | 단점 | | — | — | | - 지역 자치성이 높음
- 자료의 공유성 향상
- 분산 제어 가능
- 시스템 성능 향상
- 중앙 컴퓨터의 장애가 전체 시스템에 영향을 끼치지 않음
- 효용성과 융통성이 높음
- 신뢰성 및 가용성이 높음
-
점진적 시스템 용량 확장이 용이 - DBMS가 수행할 기능이 복잡 - 데이터베이스 설계가 어려움
- 소프트웨어 개발 비용 증가
- 처리 비용 증가
-
잠재적 오류 증가 (사이트 간의 오류 발생률 높음) → 보안의 어려움 ★
5) 분산 데이터베이스 설계
- 애플리케이션이나 사용자가 분산되어 저장된 데이터에 접근하게 하는 것을 목적
▶ 분산 설계 방법
-테이블 위치 분산: 테이블을 각기 다른 서버에 분산시켜 배치하는 방법
-분할(Fragmentation): 테이블의 데이터를 분할하여 분산시키는 것
-할당(Allocation): 동일한 분할을 여러 개의 서버에 생성하는 방법
중복이 없는 할당, 중복이 있는 할당
21 데이터베이스 이중화 / 서버 클러스터링 ★
1) 데이터베이스 이중화(Database Replication)
- 시스템 오류로 인한 데이터베이스 서비스 중단이나 물리적 손상 발생 시 이를 복구하기 위해 동일한 데이터베이스를 복제해 관리하는 것
2) 데이터베이스 이중화의 분류
기법 | 설명 |
---|---|
Eager 기법 | 트랜잭션 수행 중 데이터 변경이 발생하면 이중화 된 모든 데이터베이스에 즉신 전달해 변경 내용이 즉시 적용되도록 하는 기법 |
Lazy 기법 | 트랜잭션의 수행이 종료되면 변경 사실을 새로운 트랜잭션에 작성해 각 데이터베이스에 전달되는 기법 |
→ 데이터베이스마다 새로운 트랜잭션이 수행되는 것으로 간주됨 |
3) 데이터베이스 이중화 구성 방법
방법 | 설명 |
---|---|
활동-대기 | |
(Active-Standby) | 한 DB가 활동 상태로 서비스하고 있으면 다른 DB는 대기하고 있다가 활동 DB에 장애가 발생하면 대기 상태에 있던 DB가 자동으로 모든 서비스를 대신 수행 |
→ 구성 방법 및 관리가 쉬워 많은 기업에서 이용함 | |
활동-활동 | |
(Active-Active) | 두 개의 DB가 서로 다른 서비스를 제공하다가 둘 중 한쪽 DB에 문제가 발생하면 나머지 다른 DB가 서비스를 제공 |
→ 두 DB 모두 처리를 하기 때문에 처리율이 높지만 구성 방법 및 설정이 복잡함 |
4) 서버 클러스터링(Server Clustering)
- 두 대 이상의 서버를 하나의 서버처럼 운영하는 기술
▶ 고가용성 클러스터링: 하나의 서버에 장애 발생 → 다른 서버가 대신 처리
▶ 병렬 처리 클러스터링: 하나의 작업을 여러 개의 서버에 분산해 처리
22 데이터베이스 보안 / 스토리지 ★★
1) 데이터베이스 보안의 개요
- 데이터베이스 일부분 또는 전체에 대해서 권한이 없는 사용자가 액세스하는 것을 금지하기 위해 사용되는 기술
- 데이터베이스 사용자들은 일반적으로 서로 다른 객체에 대해 다른 접근 권리 또는 권한을 가짐
2) 암호화(Encryption)
▶ 암호화(Encryption) 과정
-암호화되지 않은 평문을 정보 보호를 위해 암호문으로 바꾸는 과정
개인키 암호 방식(대칭키), 공개키 암호 방식(비대칭키)
▶ 복호화(Decryption) 과정
-암호문을 원래의 평문으로 바꾸는 과정
3) 암호화 방식
방식 | 특징 | 종류 |
---|---|---|
개인키 암호 방식 | ||
(Private Key Encryption, 비밀키 암호 방식, 대칭키) | 동일한 키로 데이터를 암호화하고 복호화 함, | |
비밀키는 DB 사용 권한이 있는 사용자만 나눠 가짐 | DES, AES, SEED, ARIA | |
공개키 암호방식 | ||
(Public Key Encryption, 비대칭키) | 데이터를 암호화할 때 사용하는 키(공개키)는 DB 사용자에게 공개하고, 복호화할 때의 키(비밀키)는 관리자가 관리하는 방법 | RSA (Rivest Shamir Adleman) |
Diffie Hellman Algorithm |
4) 접근통제
- 데이터가 저장된 객체와 이를 사용하려는 주체 사이의 정보 흐름을 제한하는 것
- 접근통제 3요소: 접근통제 정책, 접근통제 보안모델, 접근통제 메커니즘 #정보커
▶ 임의 접근통제(DAC; Discretionary Access Control)
-데이터에 접근하는 사용자의 신원에 따라 접근 권한 부여
접근통제 권한=주체
▶ 강제 접근통제(MAC; Mandatory Access Control)
-주체와 객체의 등급을 비교해 접근 권한 부여
접근통제 권한=제3자
5) 접근통제 정책
정책 | 설명 |
---|---|
신분 기반 정책 | |
(DAC) | 주체나 그룹의 신분에 근거해 객체의 접근을 제한하는 방법 |
# IBP(Individual-Based Policy), GBP(Group-Based Policy) | |
규칙 기반 정책 | |
(MAC) | 주체가 갖는 권한에 근거해 객체의 접근을 제한하는 방법 |
# MLP(Multi-Level Policy), CBP(Compartment-Based Policy) | |
역할 기반 정책 | |
(RBAC) | 주체가 맡은 역할에 근거해 객체의 접근을 제한하는 방법 |
# 인사 담당자, DBA(Database Administration) |
6) 접근통제 메커니즘 ★
▶ 접근통제 목록(ACL; Access Control List): 객체를 기준으로 특정 객체에 대해 어떤 주체가 어떤 행위를 할 수 있는지를 기록한 목록
▶ 능력 리스트(CL; Capability List): 주체를 기준으로 주체에게 허가된 자원 및 권한을 기록한 목록
▶ 보안 등급(Security Label), 패스워드, 암호화
7) 접근통제 보안 모델
-
기밀성 모델: 군사적인 목적으로 개발된 최초의 수학적 모델, 기밀성 보장 최우선
벨라파듈라 모델: No Read UP(기밀성), No Write Down
-
무결성 모델: 불법적인 정보 변경을 방지하기 위해 무결성을 기반으로 개발된 모델
비바 모델: No Read Down, No Write Up(무결성)
-
접근통제 모델: 접근통제 메커니즘을 보안 모델로 발전시킨 것
접근통제 행렬(Access Control Matrix): 행=주체, 열=객체
8) 데이터베이스 백업 종류
- 전체 백업, 차등백업, 증분 백업, 트랜잭션 로그 백업
- 로그 파일: 데이터베이스의 상태 변화를 시간의 흐름에 따라 모두 기록한 파일
9) 스토리지(Storage) #다나쓰
종류 | 설명 | 장점 | 단점 |
---|---|---|---|
DAS | |||
(Direct Attached Storage) | 서버와 저장장치를 전용 케이블로 직접 연결하는 방식 | 속도가 빠르고 설치 및 운영이 쉬움, 초기 구축 및 유지보수 비용 저렴 | 파일 공유 불가, 확장성 및 유연성이 떨어짐 |
NAS | |||
(Network Attached Storage) | 서버와 저장장치를 네트워크를 통해 연결하는 방식 | 장소에 구애받지 않고 저장장치에 쉽게 접근, 확장성 및 유연성 우수 | 접속 증가 시 성능 저하 |
SAN | |||
(Storage Area Network) | 서버와 저장장치를 연결하는 전용 네트워크를 별도로 구성한 방식 | 파이버 채널 스위치로 네트워크 구성, 광케이블로 처리속도 빠름, 확장성, 유연성, 가용성 뛰어남 | 설치 비용이 많이 듦 |
23 논리 데이터 모델의 물리 데이터 모델 변환 및 품질 검토 ★
1) 일반적인 변환 절차
▶ 단위 개체를 테이블로 변환 → 속성을 컬럼으로 변환 → UID(Unique Identifier)를 기본 키(Primary Key)로 변환 → 관계를 외래 키(Foreign Key)로 변환 → 컬럼 유형(Type)과 길이(Length) 정의 → 반정규화(De-normalization) 수행
2) 슈퍼타입/서브타입을 테이블로 변환
- 슈퍼타입 기준 테이블 변환: 서브타입을 슈퍼타입에 통합해 하나의 테이블로 만드는 것
- 서브타입 기준 테이블 변환: 슈퍼타입 속성들을 각각의 서브타입에 추가해 서브타입들을 개별적인 테이블로 만드는 것
- 개별타입 기준 테이블 변환: 슈퍼타입과 서브타입들을 각각의 개별적인 테이블로 변환하는 것
3) 물리 데이터 모델 품질 기준 (=논리 데이터 모델 품질 기준) #정완준 최일활
기준 | 설명 |
---|---|
정확성 | 요구사항이나 업무 규칙, 표기법에 따라 정확하게 표현됨 |
완전성 | 데이터 모델의 구성 요소를 누락 없이 정의하고 |
요구사항이나 업무 영역을 누락 없이 반영함 | |
준거성 | 데이터 표준, 표준화 규칙, 법적 요건 등을 정확하게 준수함 |
최신성 | 최근의 이슈나 현행 시스템을 반영함 |
일관성 | 표현상의 일관성을 유지함 |
활용성 | 업무 변화에 따른 데이터 구조의 변경이 최소화될 수 있도록 설계됨 |
24 SQL 응용 ★★★
- 1974년 IBM 연구소에서 개발한 SEQUEL에서 유래함
- 관계대수와 관계해석을 기초로 한 혼합 데이터 언어
1) SQL(Structured Query Language)의 분류 ★★ __ 20년 1, 2회 기출문제
▶ DDL(Data Define Language, 데이터 정의어) #도스테뷰인
- DOMAIN(도메인), SCHEMA(스키마), TABLE(테이블), VIEW(뷰), INDEX(인덱스)를 정의하거나 변경 또는 삭제할 때 사용하는 언어
| 명령어 | 기능 | | — | — | | CREATE | DOMAIN, SCHEMA, TABLE, VIEW, INDEX 정의 → CREATE DOMAIN, SCHEMA, TABLE, VIEW, INDEX 도스테뷰인명; | | ALTER | TABLE에 대한 정의 변경 → ALTER TABLE 테이블명; | | DROP | DOMAIN, SCHEMA, TABLE, VIEW, INDEX 삭제 → DROP DOMAIN, SCHEMA, TABLE, VIEW, INDEX 도스테뷰인명;
- CASCADE: 참조하는 모든 개체 함께 제거 ★ *RESTRICTED: 다른 개체가 제거할 요소를 참조 중이면 제거 취소 |
▶ DML(Data Manipulation Language, 데이터 조작어) ★
- 데이터베이스 사용자가 응용 프로그램이나 질의어를 통해 저장된 데이터를 실질적으로 처리하는 데 사용하는 언어
명령어 | 기능 |
---|---|
SELECT | 테이블에서 조건에 맞는 튜플 검색 |
→ SELECT FROM 테이블명 [WHERE 조건]; | |
INSERT | 테이블에 새로운 튜플 삽입 |
→ INSERT INTO 테이블명 VALUES 데이터; | |
DELETE | 테이블에서 조건에 맞는 튜플 삭제 |
→ DELETE FROM 테이블명 [WHERE 조건]; | |
UPDATE | 테이블에서 조건에 맞는 튜플의 내용 갱신(변경) |
→ UPDATE 테이블명 SET 속성명=데이터 [WHERE 조건]; |
▶ DCL(Data Control Language, 데이터 제어어)
- 데이터의 무결성, 보안, 회복, 병행수행 제어★ 등을 정의하는 데 사용되는 언어
- 데이터베이스 관리자(DBA)가 데이터 관리를 목적으로 사용
| 명령어 | 기능 | | — | — | | COMMIT | 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장하고, 데이터베이스 조작 작업이 정상적으로 완료됐음을 알려주는 명령어 | | ROLLBACK | 아직 COMMIT되지 않은 변경된 모든 내용들을 취소하고, 데이터베이스를 이전 상태로 되돌리는 명령어 *SAVEPOINT: 트랜잭션 내에 ROLLBACK 할 위치인 저장점을 지정하는 명령어 | | GRANT | 데이터베이스 사용자에게 사용 권한 부여 → GRANT 권한 리스트 ON 개체 TO 사용자 [WITH GRANT OPTION]; *WITH GRANT OPTION: 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한 | | REVOKE | 데이터베이스 사용자의 사용 권한 취소 → REVOKE [GRANT OPTION FOR] 권한 리스트 ON 개체 FROM 사용자 [CASCADE]; *GRANT OPTION FOR: 다른 사용자에게 권한을 부여할 수 있는 권한을 취소 |
2) SELECT __ p.444~453 ★
▶ WHERE절: 검색할 조건을 기술
▶ ORDER BY절: 특정 속성을 기준으로 정렬해 검색할 때 사용
# ASC(오름차순), DESC(내림차순) – 따로 설정이 없을 때는 기본적으로 ASC 사용
▶ GROUP BY절: 특정 속성을 기준으로 그룹화해 검색할 때 사용, 일반적으로 그룹 함수와 함께 사용
▶ HAVING절: GROUP BY와 함께 사용되며, 그룹에 대한 조건 지정
- DISTINCT: 중복 튜플 제거 ★
▶ 집계/그룹함수: GROUP BY절에 지정된 그룹별로 속성의 값을 집계할 함수를 기술함
| 종류 | 설명 | | — | — | | COUNT(속성명) | 그룹별 튜플 수를 구하는 함수 | | SUM(속성명) | 그룹별 합계를 구하는 함수 | | AVG(속성명) | 그룹별 평균을 구하는 함수 | | MAX(속성명) | 그룹별 최대값을 구하는 함수 | | MIN(속성명) | 그룹별 최소값을 구하는 함수 | | STDDEV(속성명) | 그룹별 표준편차를 구하는 함수 | | VARIANCE(속성명) | 그룹별 분산을 구하는 함수 | | ROLLUP(속성명, 속성명, …) | 인수로 주어진 속성을 대상으로 그룹별 소계를 구하는 함수, 속성의 개수가 n개면, n+1레벨까지, 하위 레벨에서 상위 레벨 순으로 데이터 집계 | | CUBE(속성명, 속성명, …) | 인수로 주어진 속성을 대상으로 모든 조합의 그룹별 소계를 구하는 함수, 속성의 개수가 n개면, n2 레벨까지, 상위 레벨에서 하위 레벨 순으로 데이터 집계 |
▶ 윈도우 함수: GROUP BY절을 이용하지 않고 속성의 값을 집계할 함수를 기술함
-함수의 인수로 지정한 속성이 대상 레코드의 범위가 되는데, 이를 WINDOW라 함
PARTITION BY: 윈도우 함수가 적용될 범위로 사용할 속성 지정 → WINDOW 함수 OVER (PARTITION BY 속성 ORDER BY 속성) [AS 바꾸고 싶은 이름]
| 종류 | 설명 | | — | — | | ROW NUMBER( ) | WINDOW별로 각 레코드에 대한 일련 번호를 반환함 ex) 1, 2, 3, 4, 5 | | RANK( ) | WINDOW 별로 순위를 반환하며, 공동 순위를 반영함 ex) 1, 1, 1, 4, 5 | | DENSE_RANK( ) | WINDOW 별로 순위를 반환하며, 공동 순위를 무시하고 순위를 부여함 ex) 1, 1, 1, 2, 3 |
3) 조인(JOIN)
- 결합을 의미하며, 관계형 데이터베이스에서의 조인은 교집합 결과를 가지는 결합 방법을 의미
- 두 릴레이션으로부터 연관된 튜플들을 결합해, 하나의 새로운 릴레이션을 반환
▶ 논리적 조인 #동자교
구분 | 조인 유형 | 설명 |
---|---|---|
INNER JOIN | ||
(내부 조인) | EQUI JOIN | |
(동등 조인) | 공통 존재 컬럼의 값이 같은 경우를 추출 | |
NATURAL JOIN | ||
(자연 조인) | 두 테이블의 모든 컬럼을 비교해, | |
같은 컬럼 명을 가진 값이 같은 경우를 추출 | ||
CROSS JOIN | ||
(교차 조인) | 조인 조건이 없는 모든 데이터 조합을 추출 ★ | |
OUTER JOIN | ||
(외부 조인) | LEFT OUTER JOIN | |
(왼쪽 외부 조인) | 왼쪽 테이블의 모든 데이터와 | |
오른쪽 테이블의 동일 데이터를 추출 | ||
RIGHT OUTER JOIN | ||
(오른쪽 외부 조인) | 오른쪽 테이블의 모든 데이터와 | |
왼쪽 테이블의 동일 데이터를 추출 | ||
FULL OUTER JOIN | ||
(완전 외부 조인) | 양쪽의 모든 데이터를 추출 |
▶ 물리적 조인 #네소해
종류 | 설명 |
---|---|
NESTED-LOOP JOIN | |
(중첩 반복 조인) | 2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 Row를 결합해 원하는 결과를 조합하는 방식 |
SORT-MERGE JOIN | |
(정렬 합병 조인) | 양쪽 테이블의 정렬한 결과를 차례로 검색하면서 |
연결고리 형태로 합병하는 방식 | |
HASH JOIN | |
(해시 조인) | 해싱 함수 기법을 활용하여 조인을 수행하는 방식 |
25 SQL 활용 ★★
1) 절차형 SQL
C, JAVA 등의 프로그래밍 언어와 같이 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL
- 일반적인 프로그래밍 언어에 비해 효율이 떨어지지만, 연속적인 작업 처리 적합
- BEGIN ~ END 형식으로 작성되는 블록(Block) 구조로 기능별 모듈화 가능
2) 프로시저(Procedure) #디비컨SET
- 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업 수행, 처리 결과는 한 개 이상의 값 혹은 반환을 아예 하지 않음
- 시스템의 일일 마감 작업, 일괄(Batch) 작업 등에 주로 사용됨
DECLARE(필수): 프로시저의 명칭, 변수, 인수, 데이터 타입을 정의하는 선언부
BEGIN(필수): 프로시저의 시작을 의미, 실행부
CONTROL: 조건문 또는 반복문이 삽입되어 순차적으로 처리됨
SQL: DML, DCL이 삽입되어 데이터 관리를 위한 작업 수행 ★
EXCEPTION: BEGIN ~ END 안의 구문 실행 시 예외가 발생하면 이를 처리
TRANSACTION: 수행된 데이터 작업들을 DB에 적용할지 말지 결정하는 처리부
END(필수): 프로시저의 종료를 의미, BEGIN/END는 함께 다님
ex) CREATE [OR REPLACE] PROCEDURE 프로시저명(파라미터) [지역변수 선언]
BEGIN
프로시저 BODY;
END;
- OR REPLACE: 선택적인 예약어, 동일한 프로시저 이름이 이미 존재하는 경우 기존의 프로시저를 대체할 수 있음
▶ EXECUTE, EXEC, CALL 프로시저명; / DROP PROCEDURE 프로시저명;
3) 트리거(Trigger) __ #디이비컨SE
- 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관력 작업을 자동 수행 ★
- 데이터베이스에 저장되며, 데이터 변경 및 무결성 유지, 로그 메시지 출력 등의 목적으로 사용됨
- DCL(데이터 제어어)을 사용할 수 없으며, DCL이 포함된 프로시저나 함수를 호출하는 경우에도 오류 발생
- 트리거에 오류가 있는 경우 트리거가 처리하는 데이터에도 영향을 미치므로 트리거를 생성할 때 세심한 주의가 필요
DECLARE(필수): 트리거의 명칭, 변수 및 상수, 데이터 타입을 정의하는 선언부
EVENT(필수): 트리거가 실행되는 조건을 명시
BEGIN(필수): 트리거의 시작을 의미, 실행부
CONTROL: 조건문 또는 반복문이 삽입되어 순차적으로 처리됨
SQL: DML문이 삽입되어 데이터 관리를 위한 작업 수행 ★
EXCEPTION: BEGIN ~ END 안의 구문 실행 시 예외가 발생하면 이를 처리
END(필수): 트리거의 종료를 의미, BEGIN/END는 함께 다님
→ CREATE [OR REPLACE] TRIGGER 트리거명 [동작시기 옵션][동작 옵션] ON 테이블명
REFERENCING[NEW | OLD] AS 테이블명
FOR EACH ROW [WHEN 조건식]
BEGIN
트리거 BODY;
END;
- 동작시기 옵션: AFTER(테이블이 변경된 후 트리거 실행), BEFORE(변경되기 전 실행)
-
NEW OLD: NEW(추가되거나 수정에 참여할 테이블), OLD(수정되거나 삭제 전 테이블) - FOR EACH ROW: 각 튜플마다 트리거 적용
▶ DROP TRIGGER 트리거명;
3) 사용자 정의 함수 __ #디비컨SER
- 프로시저와 유사하게 SQL을 사용해 일련의 작업을 연속적으로 처리
- 종료 시 예약어 RETURN을 사용해 처리 결과를 단일값으로 반환
- DML문(SELECT, INSERT, DELETE, UPDATE)의 호출에 의해 실행됨
- RETURN을 통해 값을 반환해, 출력(OUT) 파라미터가 없음
- INSERT, DELETE, UPDATE로 테이블 조작은 할 수 없고, SELECT로 조회만 할 수 있음
- 프로시저를 호출해 사용할 수 없음 ★
구분 | 프로시저 | 사용자 정의 함수 |
---|---|---|
반환값 | 없거나 1개 이상 가능 | 1개(단일값) |
파라미터 | 입, 출력 가능(IN, OUT) | 입력만 가능(IN) |
사용 가능 명령문 | DML, DCL | SELECT |
호출 | 프로시저, 사용자 정의 함수 | 사용자 정의 함수 |
사용 방법 | 실행문 | DML에 포함해서 사용 |
DECLARE(필수): 사용자 정의 함수의 명칭, 변수, 인수, 데이터 타입을 정의하는 선언부
BEGIN(필수): 사용자 정의 함수의 시작을 의미, 실행부
CONTROL: 조건문 또는 반복문이 삽입되어 순차적으로 처리됨
SQL: SELECT문이 삽입되어 데이터 관리를 위한 작업 수행 ★
EXCEPTION: BEGIN ~ END 안의 구문 실행 시 예외가 발생하면 이를 처리
RETURN(필수): 호출 프로그램에 반활할 값이나 변수를 정의 ★
END(필수): 사용자 정의 함수의 종료를 의미, BEGIN/END는 함께 다님
→ CREATE [OR REPLACE] FUNCTION 사용자 정의 함수명(파라미터) [지역변수 선언]
BEGIN
사용자 정의 함수 BODY;
RETURN 반환값;
END;
26 DMBS 접속 기술 ★
1) 웹 응용 시스템의 구조
- 사용자 ←→ 웹 서버 ←→ WAS ←→ DBMS
사용자는 웹 서버에 접속해 데이터를 주고 받고, 웹 서버는 WAS에게 해당 요청을 전달함, 그 다음 WAS는 수신한 요청을 트랜잭션 언어로 변환한 후 DBMS에 전달해 데이터를 받으면, 이 데이터를 다시 웹 서버로 전달해 사용자에게 도달하게 함
2) DBMS 접속 기술
▶ JDBC(Java Database Connectivity)
-1997년 썬 마이크로시스템에서 출시, JAVA 언어로 다양한 종류의 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 API
-접속하려는 DBMS에 대한 드라이버가 필요
▶ ODBC(Open Database Connectivity)
-1992년 마이크로소프트에서 출시, 데이터베이스에 접근하기 위한 표준 개방형 API로 개발 언어에 관계없이 사용 가능
-ODBC도 접속하려는 DMBS에 맞는 드라이버가 필요하지만, 접속하려는 DBMS의 인터페이스를 알지 못하더라도 ODBC 문장을 사용해 SQL을 작성하면 ODBC에 포함된 드라이버 관리자가 해당 DBMS의 인터페이스에 맞게 연결해줌
→ DBMS의 종류를 몰라도 됨
3) 정적 SQL vs 동적 SQL
정적 SQL(Static SQL) | 동적 SQL(Dynamic SQL) | |
---|---|---|
SQL 구성 | 커서(Cursor)를 통한 정적 처리 | 문자열(String) 변수에 담아 동적 처리 |
개발 패턴 | 커서의 범위 안에서 반복문을 활용해 SQL 작성 | NVL 함수를 사용할 필요없이 로직을 통해 SQL 작성 |
실행 속도 | 빠름 | 느림 |
사전 검사 | 가능 | 불가능 → SQL 변형 위험 |
27 ORM(Object-Relational Mapping) ★
1) ORM의 개요
- 객체(Object)와 관계형데이터베이스(RDB)의 데이터를 연결(Mapping)하는 기술 ★
- ORM으로 생성된 가상의 객체지향 데이터베이스는 프로그래밍 코드 또는 데이터베이스와 독립적이므로 재사용 및 유지보수 용이
- 직관적이고 간단하게 데이터 조작 가능
2) ORM 프레임워크
언어 | 프레임워크 |
---|---|
JAVA | JPA, Hibernate, Eclipse Link, Data Nucleus, Ebean 등 |
C++ | ODB, QxOrm 등 |
Python | Django, SQL Alchemy, Storm 등 |
iOS | Core Data, Database Objects 등 |
.NET | NHibernate, Database Objects, Dapper 등 |
PHP | Doctrine, Propel, RedBean 등 |
3) ORM의 한계
- 프레임워크가 자동으로 SQL을 작성하기 때문에 의도대로 작성되었는지 확인해야 함
- 객체지향적인 사용 고려와 프로젝트가 크고 복잡해질수록 적용하기 어려워짐
- 기존의 기업들은 ORM을 고려하지 않은 데이터베이스를 사용하고 있기 때문에, ORM에 적합하게 변환하려면 많은 시간과 노력 필요
28 쿼리 성능 최적화 ★
- 데이터 입, 출력 애플리케이션의 성능 향상을 위해 SQL 코드를 최적화하는 것
- 쿼리 성능 최적화하기 전, 성능 측정 도구인 APM(Application Performance Management)을 사용해 최적화 할 쿼리를 선정해야 함
- 최적화 할 쿼리에 대해 옵티마이저가 수립한 실행 계획(Execution Plan)을 EXPLAIN 명령어를 통해 검토하고, SQL 코드와 인덱스 재구성
- 옵티마이저(Optimizer): 작성된 SQL이 가장 효율적으로 수행되도록 최적의 경로를 찾아 주는 모듈
1) RBO(Rule Based Optimizer) vs CBO(Cost Based Optimizer)
RBO | CBO | |
---|---|---|
최적화 기준 | 규칙에 정의된 우선순위 | 액세스 비용 |
성능 기준 | 개발자의 SQL 숙련도 | 옵티마이저 알고리즘의 예측 성능 |
특징 | 실행 계획 예측이 쉬움 | 성능 통계치 정보 활용, 예측이 복잡함 |
고려사항 | 개발자의 규칙 이해도, 규칙의 효율성 | 비용 산출 공식의 정확성 |
2) SQL 코드 및 인덱스 재구성
▶ SQL 코드 재구성
-서브 쿼리에 특정 데이터가 존재하는지 확인 할 때는 IN보다 EXISTS 활용
-실행 계획이 잘못되었다고 판단되는 경우 힌트(Hint)를 활용해 변경
▶ 인덱스 재구성
-인덱스의 추가 및 변경은 해당 테이블을 참조하는 다른 SQL문에도 영향을 줄 수 있으므로 신중히 결정
-단일 인덱스로 쓰기나 수정 없이 일기로만 사용되는 테이블의 경우 IOT(Index-Organized Table) 구성 고려
29 데이터 전환 ★
1) 데이터 전환의 정의
운영 중인 기존 정보 시스템에 축적되어 있는 데이터를 추출(Extraction)하여 새로 개발할 정보 시스템에서 운영 가능하도록 변환(Transformation) 후, 적재(Loading)하는 일련의 과정
ETL(Extraction, Transformation, Loading): 추출, 변환, 적재 과정
데이터 이행(Data Migration), 데이터 이관이라고도 함
2) 데이터 전환 계획서
| 항목 | 세부 항목 | | — | — | | 데이터 전환 개요 | 데이터 전환 목표 주요 성공 요인 전제조건 및 제약 조건 | | 데이터 전환 대상 및 범위 | | | 데이터 전환 환경 구성 | 원천 시스템 구성도(As-Is 시스템) 목적 시스템 구성도(To-Be 시스템) 전환 단계별 DISK 사용량 | | 데이터 전환 조직 및 역할 | 데이터 전환 조직도 조직별 역할 | | 데이터 전환 일정 | | | 데이터 전환 방안 | 데이터 전환 규칙 데이터 전환 절차 데이터 전환 방법 데이터 전환 설계 전환 프로그램 개발 및 테스트 계획 데이터 전환 계획 데이터 검증 방안 | | 데이터 정비 방안 | 데이터 정비 대상 및 방법 데이터 정비 일정 및 조직 | | 비상 계획 | 종합상황실 및 의사소통 체계 | | 데이터 복구 대책 | |
30 추가 정리, 수제비 및 기출문제 ★★★
1) WHERE 조건 ★
| 구분 | 연산자 | 사례 | | — | — | — | | 비교 | =, <>, <, <=, >, >= *<>: 다름을 의미 | 가격(PRICE)이 50000 미만 → PRICE < 50000 | | 범위 | BETWEEN | 가격(PRICE)이 50000 보다 크거나 같고 80000 보다 작거나 같음 → PRICE BETWEEN 50000 AND 80000 ★ = PRICE >= 50000 AND PRICE <=80000 | | 집합 | IN, NOT IN | 가격(PRICE)이 40000 또는 50000 또는 60000 → PRICE IN (40000, 50000, 60000) ★ | | 패턴 | LIKE | 이름(NAME)이 ‘정보’로 시작되는 문자열 → NAME LIKE ‘정보%’ ★★ | | NULL | IS NULL, IS NOT NULL | 가격(PRICE)이 NULL 값인 경우 → PRICE IS NULL ★ | | 복합조건 | AND, OR, NOT | 가격(PRICE)이 50000 미만이고 이름(NAME)이 ‘정보’로 시작되는 문자열 → PRICE < 50000 AND NAME LIKE ‘정보%’ |
2) LIKE와 같이 사용하는 와일드 문자 ★
문자 | 설명 | 사례 |
---|---|---|
+ | 문자열을 연결 | → ‘축구’ + ‘감독’ = “축구 감독” |
% | 0개 이상의 문자열과 일치 | → LIKE ‘%구’ = 축’구’, 농’구’, 배’구’ ★ |
→ LIKE ‘%구%’ = 축’구’선수, 농’구’코트, ‘구’심력, 피’구’ | ||
[ ] | 1개의 문자와 일치 | → ‘[0-8]%’ = 0-8 사이 숫자로 시작하는 문자열 |
[ ^ ] | 1개의 문자와 불일치 | → ‘[^0-8]%’ = 0-8 사이 숫자로 시작하지 않는 문자열 |
_ | 특정 위치의 1개의 문자와 일치 | → ‘_구%’ = 축’구’, 축’구’선수 |
3) 주석 처리
주석 기호 | 설명 |
---|---|
– | ‘—‘이 시작하는 위치부터 해당 라인 끝까지 실행이 되지 않도록 함 |
/* 문장 */ | ‘/’이 시작되는 부분부터 ‘/’이 나타날 때까지의 여러 라인을 실행 되지 않도록 함 ★ |
4) 힌트의 사용
- SQL 문에 사전 정보를 줘서, SQL문 실행에 빠른 결과를 가져오는 효과를 만드는 문법
힌트 | 설명 |
---|---|
–+ 힌트명(파라미터) | ‘–+’이 시작되는 위치부터 힌트로 인식 |
/*+ 힌트명(파라미터) */ | ‘/+’이 시작되는 부분부터 ‘/’ 사이를 힌트로 인식 |
5) 집합 연산자
- 테이블을 집합 개념으로 보고, 두 테이블 연산에 집합 연산자를 사용하는 방식
- 여러 질의 결과를 연결해 하나로 결합하는 방식을 사용
집합 연산자 | 설명 |
---|---|
UNION | 중복 행이 제거된 쿼리 결과 집합(합집합) |
UNION ALL | 중복 행이 제거되지 않은 쿼리 결과 집합 |
INTERSECTION | 두 쿼리 결과에 공통적으로 존재하는 집합(교집합) |
MINUS | 첫 쿼리에 있고 두 번째 쿼리에는 없는 집합(차집합) |
6) 서브쿼리(Sub-Query)
- SQL문 안에 포함된 또 다른 SQL문
종류 | 설명 |
---|---|
단일 행(Single Row) 서브쿼리 | 결과가 항상 1건 이하인 서브쿼리 |
다중 행(Multiple Row) 서브쿼리 | 실행 결과가 여러 건인 서브쿼리 |
다중 컬럼(Multiple Column) 서브쿼리 | 결과가 여러 컬럼으로 반환되는 서브쿼리 |
7) 데이터 지역화(Data Locality) ★
- 데이터베이스의 저장 데이터를 효율적으로 이용할 수 있도록 저장하는 방법
- 구역성(Locality)라고도 함
▶ 데이터 지역화의 종류 #시공순
| 종류 | 설명 | 활용 | | — | — | — | | 시간적 구역성 | 최근에 참조된 기억장소가 가까운 장래에 계속 참조될 가능성이 높은 특성
Stack(스택), Subroutine(서브루틴), Loop(루프),
Counting(카운팅), Totaling(집계) ★ | for, while 같은 반복문에 사용하는 조건 변수 | | 공간적 구역성 | 최근에 참조된 기억장소와 가까운 기억정보가 가까운 장래에 계속 참조될 가능성이 높은 특성
Array(배열), Sequential Code(순차적 코드) ★ | A[0], A[1] 같은 배열에 연속 접근 |
| 순차적 구역성 | 별도의 분기가 없는 한, 데이터가 기억장치에 저장된 순서대로 순차적으로 인출되고 실행될 가능성이 높은 특성 | 1:1, 1:N, N:M 관계 존재 |
▶ 데이터 지역화를 활용한 관리 기법
종류 | 설명 |
---|---|
기억장치 계층구조(Hierarchy) | CPU → 캐시 메모리 → 메인 메모리 순서로 접근시간(Access Time)을 효과적으로 단축 |
캐시 접근시간 단축 | 캐시 적중률(Cache Hit Ratio)의 극대화 가능 |
워킹세트(Working Set) | 하나의 페이지(Page)가 자주 접근하는 페이지들의 집합, |
페이지 폴트(Page Fault)를 줄여 스레싱(Thrashing) 감소 ★ |
8) 병행제어의 로킹(Locking) 단위 ★★
**- 한번에 한 명만 사용할 수 있게 잠그는(Locking) 단위
- 로킹의 대상이 되는 객체의 크기를 로킹 단위라고 함
- 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있음
- 한꺼번에 로킹할 수 있는 객체의 크기를 로킹 단위라고 함
▶ 로킹 단위가 작으면 小
-
로킹 오버헤드가 증가함
-
데이터베이스 공유도가 증가함 (= 병행성 수준이 높아짐)
▶ 로킹 단위가 크면 大
-
로킹 오버헤드가 감소함
-
데이터베이스 공유도가 감소함 (= 병행성 수준이 낮아짐)
9) 데이터베이스 로그(log)를 필요로 하는 회복기법 #지RE 즉UN
▶ 지연 갱신 기법(Deferred Update)
-트랜잭션이 부분 완료 상태에 이르기까지 발생한 모든 변경 내용을 로그 파일에만 저장하고, 데이터베이스에는 COMMIT이 발생할 때까지 저장을 지연하는 기법
-트랜잭션이 실패할 경우 UNDO없이 로그 단순 폐기
# REDO
▶ 즉시 갱신 기법(Immediate Update)
-트랜잭션 수행 도중 데이터를 변경하면 변경 정보를 로그 파일에 저장하고, 부분 완료되기 전이라도 모든 변경 내용을 즉시 데이터베이스에 반영하는 기법
-로그 파일을 참조해 미완료된 변경에 대해 UNDO를 우선 실행한 후, 완료된 변경에 대해 REDO 실행 (UNDO는 COMMIT된 지점이 없음)
# UNDO
- 인덱스를 추가 삭제하는 명령어는 Create, Drop을 사용
c class는 192~223인 주소
- 데이베이스 무결성은 권한이 있는 사용자로부터 데이터베이스를 보호하는 것!
- 즉, 불법적인 사용자에 의한 데이터베이스를 보호하는 것이 아님
관계 대수 연산(절차적 언어)
주어진 릴레이션 조작을 위한 연산의 집합. 질의에 대한 해를 구하기 위해 수행해야하는 연산의 순서를 명시
- 일반 집합 연산자
- 합집합, 차집합(-), 교집합, 카티션 프로덕트(x)
- 순수 관계 연산자(싹다좋다)
-
selelct, project, join, division
-
cf. 관계 해석 논리기호
- 데이터베이스, 파일, 레코드는 로킹 단위가 될 수 있음
- 로킹 단위 ⬇️ : 공유도 ⬆️ 로킹 오버헤드 ⬆️ 로크의 수 ⬆️ 병행성 수준 ⬆️ 병행 제어 기법 복잡
병행 제어 기법의 종류(로 낙타다)
- 로킹
- 낙관적 검증: 일단 트랜잭션 수행 후 검증
- 타임스탬프 순서: 타임스탬프 시간에 따라 트랜잭션 작업을 수행하는 기법
- 동시성 제어를 위한 직렬화 기법으로 트랜잭션 간의 처리 순서를 미리 정하는 방법
- 다중 버전 동시성 제어: 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임 스탬프를 비교하여 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법
데이터 정규화 단계(원부이 결다조)
- 원자화 1
- 부분 함수 종속 제거 2
- 기본키의 부분집합이 결정자가 되어서는 안된다!
- 이행 함수 종속 제거 3
- 결정자 함수 종속 제거 BCNF
- 모든 결정자가 후보키가 되도록 분해
- 다치 종속성 제거 4
- 하나의 결정자가 다른 속성에서 여러 종속자를 결정
- A ↠ B 제거 A 한개로 B, B’가 결정되는 경우!
- 조인 종속성 제거 5
- 하나의 릴레이션을 분해한 후에 다시 조인했을 때 손실이나 필요없는 내용이 없어야 하는 것!
- 외부 스키마
- 데이터의 일부분만을 의미. 사용자나 개발자관점에서 필요로 하는 데이터베이스
- 개념 스키마
- 데이터베이스 전체의 논리적 구조를 정의
- 내부 스키마
- 데이터베이스의 물리적 구조를 정의
- 내용 스키마
- 데이터베이스에 저장된 실제 데이터를 의미
- 카디널리티: 튜플의 수
- 차수: 속성의 수
데이터 모델 절차(요개의 눈물)
- 물리적 설계: DBMS 특성 및 성능을 고려하여 물리적인 스키마를 생성
- 객체를 생성
- 응답시간, 저장공간의 효율화 트랜잭션 처리를 고려하여 설계
- 반정규화 수행, 접근경로/레코드 집중의 분석/ 저장 레코드 양식 설계
- 요구조건 분석
- 개념적 설계: 트랜잭션 모델링, DB종류와 관계 x, view 통합방법 및 attribute 합성 고려
- 논리적 설계: 트랜잭션 인터페이스 설계, DBMS와 맞는 논리적 스키마 설계, 정규화 수행
OLAP(on line analytical processing)
- 사용자가 동일한 데이터를 여러 기준으로 이용하는 다양한 방식으로 바라보면서 다차원 데이터 분석을 할 수 있도록 도와주는 의사결정 지원 시스템
- 연산: roll up, drill down, slicing, dicing, pivoting
분산 데이터베이스 투명성 종류(위복병분장)
- 위치 투명성: 물리적 위치 알 필요 x(Location)
- 복제 투명성: 데이터가 복제되어도 알 필요 x(Replication)
- 병행 투명성: 동시에 트랜잭션 수행되어도 상관 x(Concurrency)
- 분할 투명성: 하나의 릴레이션의 분할되어있어도 상관 x(Fragmentation)
- 장애 투명성: 통신망에 이상이 생겨도 데이터 무결성 보존(Failure)
회복 기법의 종류(회로체그)
- 로그기반 회복 기법(지연 갱신 회복 기법, 즉각 갱신 회복 기법)
- 체크 포인트 회복 기법
- 그림자 페이징 회복 기법