개념설계 -> 스키마 정제 (Normal Form(NF) : 정규형) - Normalization이라고 함
정규화 - 함수 종속을 기반으로 생성(Functional Dependency)
1정규형 - 중복된 튜플 제거
2정규형 - 완전 함수 종속, 키에 대해 모든 컬럼이 종속성을 지님
3정규형 - 부분 함수 종속, 기본키를 제외한 컬럼에 대해 또 다른 컬럼이 종속성을 지님
- 이행적 함수 종속 이라고 함
- 삭제이상, 중복이상
- ER 모델에서 찾기 힘들다
BCNF 정규형
-----
다치종속 (Multi Dependency)
4정규형
조인종속 (Join Dependency)
5정규형
대부분 3정규형까지 가고, BCNF도 대부분 안간다
비 정규화(Denormalization) - 필요에 따라 읽는 시간을 최적화 하기 위해 중복을 사용
중복 이상 - 어떤 데이터는 반복적으로 저장됨
갱신 이상 - 반복 저장된 데이터 중 한 투플을 갱신할 때 다른 모든 사본을 갱신하지 않으면 불일치 발생
삽입 이상 - 한 정보를 저장하려면 다른 정보도 같이 저장하여야 함
삭제 이상 - 어떤 정보를 지우면 다른 정보도 같이 삭제됨
속성을 부자연스럽게 묶어서 한 릴레이션 스키마로 만들면 중복성이 발생
함수 종속을 이용하여 상황 식별
릴레이션을 더 작은 릴레이션의 모임으로 대치
작은 일레이션은 본래 릴레이션 속성의 부분집합으로 이루어 짐
분해의 문제
제안된 정규형으로 분해
무손실 조인 성질에 따라 릴레이션 인스턴스 복구
종속성 유지 조건에 따라 계약 조건 유지
3 정규화 기준으로 기본키 종속을 제외한 다른 함수적 종속이 발생하면 이를 이행적 함수적 종속 이라 한다
함수 종속은 일종의 제약 조건이다
어떤 릴레이션 스키마를 R이라고 하고 X와 Y를 R에 속한 속성 집합이라고 하고, R의 인스턴스 r에 속한 투플 t1과 t2가 다음의 조건을 만족하면 FD X → Y가 존재한다고 한다
한 릴레이션에 대해 적법한 인스턴스가 되려면 명세된 모든 FD를 만족해야 함
기본 키는 FD의 특수한 경우
개체 집합 스키마 정제
{EmpID} → {EmpID, Name, Parkingslot, Grade, WagePerHr, Workingtime}
E E N P G W T
등급에 따라 시간당 임금이 결정될 경우 두 FD가 존재
부분적 함수 종속
이행적 함수 종속
완전 함수 종속
암스트롱의 공리
이외의 규칙
데이터의 중복 방지, 무결성을 충족하기 위한 데이터의 설계 방법
릴레이션 스키마가 어떤 정규형을 만족하는지 확인하는 테스트
정규화 원칙
장점
1 정규형 (1NF)
2 정규형 (2NF)
3 정규형 (3NF)
이행적 종속성 개념에 기반
- 릴레이션 스키마 R에서, 후보 키가 아니고 어떤 키의 부분집합도 아닌 속성 집합 Z가 있을 때, X → Z와 Z → Y가 만족될 때, 함수 종속 X → Y를 이행적 함수 종속이라고 부름
구분
R: 릴레이션 스키마, X: R에 속하는 릴레이션 인스턴스의 부분집합, A: R의 속성일 때
다음 중 하나에 속하면 제 3 정규형에 속함
A ∈ X, 즉 평범한 함수 종속
X가 슈퍼키
A가 R의 어떤 키의 일부
4 Boyce-Code 정규형 (BCNF)
R: 릴레이션 스키마, X: R에 속하는 릴레이션 인스턴스의 부분집합, A: R의 속성일 때
R이 만족하는 모든 함수 종속 X → A가 다음 중 하나에 속하면 BCNF에 속함
A ∈ X, 즉 평범한 함수 종속
X가 슈퍼키
tmi)
지금까지 배운 SQL - DML, DDL, DCL중 DCL이 보안에 관련된 내용을 담고 있다
재량 접근 제어(Discretionary Access Control)
필수 접근 제어(Mandatory Access Control)
Grant - 사용자에게 기반 테이블이나 뷰에 대한 특권을 부여
GRANT <특권> ON <개체> TO <사용자> [WITH GRANT OPTIONS]
Revoke - 사용자에게 부여된 특원 허가를 취소
GRANT <특권> ON <개체> FROM <사용자> [CASCADE]
재량 접근 제어는 몇가지 약점이 있음
보안 때문에 생성된게 아니라 외부 스키마에 대한 접근을 위해 만들어짐
하지만? 보안을 위해 써도 좋다
접근 제어 향상, 논리적 데이터 독립성 제공
테이블과 비슷하게 동작하지만... 해당(소속) 튜플이 실제 DB에 저장된 것이 아님
필요할 때 마다 View 정의에 따라 계산됨
질의를 수행하거나 다른 View를 생성할 때 기존 View 는 Table과 같은 형태로 사용 가능
create view A as B
select foo
from boo
where woo
뷰는 insert가 될 수 있게/안되게 설정 가능. 형태에 따라 다르다
사용자는 뷰와 기반 테이블을 갱신할 필요가 없어야한다(하지만 가능할 수도 있다)