<관계 대수>
관계 대수 (Relational Algebra) -> 절차적 (Selection, Projection, Union, Intersection 등)
기본 연산
Selection : row들을 골라냄
Projection : column들을 골라냄
Cartesian product : 두 집합 곱셈 (ex - SQL에서 -> FROM S1, S2 )
Rename : relation 이름이나 속성 이름을 변경 ( SQL에서는 빈칸이나 as)
복합 연산
Join : Cartesian product 한 후 Selection 한 결과
Division : A/B -> B를 모두 만족하는 A의 값 (ex - a에서 b튜플을 모두 가지고 있는 튜플들)
부가 연산
Assignment
Aggregate Functions -> avg , min , max, sum ,count
변경 연산
Insertion
Deletion
Updating
시스템 카탈로그 : DDL로 구성되는 기본 테이블 , 뷰, 인덱스, 제약조건 등의 데이터베이스 구조 및 통계 정보를 저장함
(메타 데이타 ->데이터에 관련된 데이터)
(시스템 데이터베이스)
<권한>
-사용자에게 read, insert ,update, delete 권한 부여
- 스키마 권한 : index, resources, alteration , drop 권한 부여
(권한 부여는 처음에 DBA가 부여, 권한을 부여할 수 있는 권한을 받은 사람도 부여 가능)
(권한 회수하면 cascade방식으로 다 회수됨)
(SQL -> grant.. on .. to)
Embedded SQL(내장 SQL) : 응용 프로그램에 SQL을 삽입하여 DB이용
-프로시저 : 절차형 SQL을 활용하여 특정 기능을 수행할 수 있는 트랜잭션 언어
-사용자 정의 함수 : 프로시저와 마찬가지지만 return 이나 명령문 등에서 차이를 보임
-Triggers : 특정 이벤트가 발생하면 조건을 확인하고 action을 취함.
<Query processing>
1. Query 를 parsing 하고 translation 해서 관계 대수로 변경
2. Optimizer 가 Optimization 진행해서 제일 빠른 길 찾아서 실행
속성 종류 : 단순 속성, 복합 속성, 유도(파생) 속성, 널 속성
데이터 베이스 생명 주기 : 요구조건 - 설계 - 구현 - 운영 - 감시 및 개선
데이터베이스 설계 : 1. 요구사항 분석
2. 개념적 설계 (E-R 다이어그램) -> 개념적 스키마 생성
3. 논리적 설계 (Table) -> 논리적 스키마 생성
4. 물리적 설계 -> 물리적 스키마 생성
DB설계의 기본은 중복의 최소화 (물론 특정한 상황에 따라 반정규화 -> 너무 쪼개면 join 손해)
<개념적 설계 -> E-R 다이어그램>
카디날리티 비율 : 두 개의 엔티티타입 간 관계에서 참여자의 수를 의미
( 1:1 , 1:m , m:n )
weak entity -> 종속되어 있는 entity , 부분키 사용
Specialization : top-down 설계 과정 (세분화)
Generalization : Botton-up 설계 과정 (일반화)
<논리적 설계>
<1:1> ->카디널리티 비율
<1:n>
n쪽 relation에 외래키를 만듬
<n:m>
새로운 R테이블을 만듬
<정규화>
정규화 -> 분해하여 중복, 이상(anomaly)의 해결 (이상 -> 삽입이상, 삭제이상, 갱신이상 등)
일반적으로 3NF 또는 BCNF까지 사용하는 경우가 많음. (상황에 따라서 역정규화)
<함수 종속>
x -> y : x는 y를 결정함 , x 는 y의 결정자, y는 x의 종속자
ex) x가 후보 키이면 해당 릴레이션의 모든 애트리뷰트 y 에 대해 x->y 성립
< 제1 정규형 (1NF) >
- 모든 도메인이 원자 값만으로 된 릴레이션
< 제2 정규형 (2NF) >
- 1NF이고
- 키에 속하지 않는 모든 애트리뷰트들이 기본 키에 완전 함수 종속 (기본키에 대해 부분 함수 종속된 애트리뷰트 분해)
완전 함수 종속 ex ) y는 x에 완전 함수 종속임 -> y가 X전체에 대해서만 함수적으로 종속된 경우
< 제3 정규형 (3NF) >
- 2NF이고
- 후보 키에 속하지 않는 모든 애트리뷰트들이 후보 키에 이행적 함수 종속되지 않음
(이행적 함수 종속 : x->y, y->z 일 때 x->z가 되는 경우),,
( 해결 -> x->y , y->z 로 테이블 분리)
< 보이스/코드 정규형 (BCNF) >
- 모든 결정자가 후보 키이면 릴레이션 R은 BCNF에 속함
(강한 3정규형)
< 제4 정규형(4NF) >
- BCNF이고
- 릴레이션에서 다치 종속 되지 않음
<제5 정규형 (5NF) >
- 4NF이고
- 릴레이션에 존재하는 조인 종속이 후보 키를 통해서만 성립되도록 만듬.
<트랜잭션>
트랜잭션 : 데이터 처리 단위 (ex - 계좌 이체 -> 출금하고 다른 계좌에 입금하는게 세트)
-동시성 제어
- 회복
트랜잭션의 특성(ACID)
- 원자성 (Atomically) : 한 트랜잭션 내의 모든 연산들이 완전히 수행되거나 전혀 수행되지 않음
- 일관성 (Consistency)
- 고립성 (Isolation) : 한 트랜잭션이 데이터 갱신 동안은 다른 트랜잭션 접근 금지
- 지속성 (Durability) : 완료된 트랜잭션 효과는 시스템 고장나도 유지
트랜잭션의 완료(commit) : DB에 완전하게 반영 (SQL ->COMMIT WORK) (메모리 버퍼에 있는 것을 디스크에 반영)
트랜잭션의 철회(rollback) : 일부만 반영된 경우 수행되기 전으로 되돌림 (SQL -> ROLLBACK WORK)
locking
2단계 로킹 프로토콜 : lock 확장 단계에서는 요청만 , 수축 단계에서는 해제만
다중 로크 단위 : 데이터베이스, 릴레이션, 디스크 블록, 투플 등
Recovery
Redo : 가장 최근 복제본 + 로그 -> DB복원 (ex - commit 했는데 반영이 안된 거 재수행)
Undo : 로그 + 모든 변경들을 취소 -> 원래의 DB 상태로 복원
(Undo는 단일 연산에 대해, Rollback은 한 트랜잭션에 대해 적용)
즉시 갱신 : 갱신한 사항이 트랜잭션 완료전이라도 디스크에 반영될 수 있음.
복구 과정 -> 로그 파일이 기록된 마지막부터 반대방향으로 순차적으로 검색
commit안된 트랜잭션들은 undo , 다시 처음부터 내려오면서 commit된 것들은 redo
지연 갱신 : commit되어야 반영
- 그래서 undo가 필요 없음
- 그냥 순차적으로 내려오면서 commit 된 트랜잭션들만 redo 수행
체크포인트 -> - redo 할 양이 너무 많을 걸 대비해서 체크포인트 설정,
- 오래전 commit된 것들은 이미 반영되었을 확률 높아서 redo필요 없음.
- 디스크에 전부 출력
< Data Mining >
- 고객관련 정보를 토대로 미래의 구매형태를 예측하거나 변수 간 인과관계를 분석하는 마케팅 기법 (패턴 파악)
지지도 : 전체 거래 중 X와 Y를 동시에 포함하는 거래가 어느 정도인지.
신뢰도 : X를 포함하는 거래 중에서 Y가 포함된 거래는 어느 정도인지.
<부가 자료>
Constraints 는 생성 이후에 나중에 추가할 수 있음.
로그 -> old value, new value로 표현
인덱스 -> DB가 data를 찾을 때 목차처럼 index를 지정해서 더욱 빠르게 찾을 수 있음 (ex - 특정 데이터는 250부터 )
'CS(Computer Science) > 데이터 베이스' 카테고리의 다른 글
프로그래머스 SQL 문제 (MySQL) - 2 (0) | 2020.11.08 |
---|---|
프로그래머스 SQL 문제 (MySQL) - 1 (0) | 2020.11.07 |
데이터 베이스 1(Database) (0) | 2020.09.24 |