Cute Poka Dotted Sky Blue Bow Tie Ribbon
2025-11-28 15:02:49

6. Relational Database Design

 

E-R 다이어그램을 좋은 relational design 만드는법

-data redundancy(데이터 중복성) 제거

-모호함 없이 쉽게 retrieval(검색)할수 있게 정보 제공

-schema를 일반적인 form으로 design하기

 

정보 repetition 방지: 두개의 relation을 하나의 relation으로 나타내는거 고려해보기 혹은 Decomposition하기

ㄴ Lossy Decomposition: 테이블 분해 후 다시 결합했을때 원래 없던 정보가 만들어지거나 왜곡되는 분해문제

 

Lossless Decompostion:R을 R1 R2로 분해해도 정보손실x → 분해된 relation 써야함!

r(R): schema R을 가진 r의 instance

ㄴ r을 R1과 R2로 project하고 natural join 하면 r 나옴

ㄴㄴ 만약에 loss가 있다면 r보다 더 많은 정보가 나옴 (만약 두명 이상 같은 이름가지면 더 많아지고 같은이름 없으면 더 적어짐)

R을 R1, R2로 분해할때 R1∩R2→R2를 만족하면 무손실 분해. * R1R2가 R1또는 R2의 super key면됨!

이때,

 

Normalization Theory: R이 good form(반복정보 x)가 아니면 relation들로 분해하기(무손실 분해!)

legal instance: 현실 데이터의 모든 제약조건을 만족하는 relation

Functional dependency(a→b): relational schema R안에 속성 a,b가 있을때 legal 관계 r(R)에 대해 어떤 튜플 t1과 t2가 a를 만족하면 b도 만족한다. * 속성 a값을 알면 b값을 반드시 알 수 있다

 

Closure: A B이고 B C이면 자동으로 A C인것처럼 암시적으로 있는 functional dependency. F의 closure은 F+로 나타냄

Super key: K →R이고 K가 R의 super key라면 K의 값만으로 해당 행을 구분가능 ex) ID

Candidate key: 최소 Super key ex) {name, ID}는 더 줄일수있지만 {name}은 더 못줄이는 candidate key임

Trivial Functional Dependencies: a안에 b가 속하면 a →b는 자명하다(trivial).

 

Armstrong’s Axioms

1. Reflexive rule: 이면 X→Y

2. Augmentation rule: 이면 XZ→YZ

3. Transitivity rule: X→Z

ㄴ Sound: 실제로 참인 FD만 생성, Complete: 참인 FD 모두 생성 가능

ㄴㄴ 단점: n개의 속성에 대해 2^n의 가능한 조합이 있고 왼쪽이랑 오른쪽에 2^n씩 있다고 하면 최악의 경우 2^n*2^n의 조합을 봐야함

 

Rules inferred from Armstrong’s Axioms

1. Union rule: AB and AC이면 ABC

2. Decomposition rule: ABC이면 AB, AC

3. Pseudotransitivity rule: AB, CBD이면  ACD

 

a⁺ 계산 알고리즘

result := a        // 처음 시작한 속성 집합
while (result가 더 이상 변하지 않을 때까지)
   F의 각 FD b → g에 대해
       if b ⊆ result then
           result := result ∪ g

 

Attribute Closure활용

- Testing for superkey: a+가 R의 모든 속성을 포함하면 a는 super key

- Testing functional dependencies: ab가 성립하는지 확인하려면 ba+ 인지 확인하면됨

- Computing closure of F: 모든 속성 집합의 a⁺ 계산

 

Canonical Cover: functional dependencies F에서 관계 업데이트 할때마다 dependency 위반 안하게 해야하는데, 모두 확인하면 비용이 드니까 동일한 범위의 단순한 버전으로 파악함. F+=Fc+ 둘은 같은 closure을 갖지만 Fc+는 중복을 제외한 최소한의 형태. left가 중복된FD없음 있으면 합침!! (a →b, a →c 이면 a →b, c로) 

 

Extraneous(불필요) Attributes: Canonical Cover를 만들 때 불필요 속성 제거 필수!

left: ab에서 a의 속성 하나(A)를 없애도 여전히 ab가 F+에서 추론가능하면 A는 왼쪽에서 불필요(extraneous), FD 강화

right: ab에서 b의 속성 하나(A)를 없애도 여전히 F+로 A가 추론가능하면 A는 오른쪽에서 불필요, FD 약화

ㄴF’ = (F - {a→b}) ∪ {a→(b-A)}, a⁺ 계산 후 A 포함 여부 확인

ㄴㄴright 예시: F={AB →CD, A →E, E →C}라고 할때, AB →CD에서 C를지우고 (AB)+구하면 {A,B,C,D,E}나옴 따라서 C는 AB →CD에서 extraneous함!

 

Dependency Preservation: R의 분해 Ri의 속성만 가진 Fi가 F+의 dependency라고 할때, (F1 ∪ F2 ∪ ... ∪ Fn)+ = F+을 만족하면 dependency 보존이 성립한다. -> 원래 존재하던 FD가 분해 후에도 유지되어야함 (join없이 검사가능!) 

 

BCNF(Boyce–Codd Normal Form): 모든 함수적 종속성 α → β 에 대해 α → βtrivial dependency (β ⊆ α) 이거나 α가 R의 superkey (왼쪽거가 superkey가 아니면 위반) → relation 분해해서 만족하게 만들기.

ㄴ relation R이 있고 F가 있을때, F내부 모든 fd가 superkey인지만 확인하면 됨

ㄴㄴ 분해된 테이블에선 F+까지 봐야함 

result = {R}
while (R 안에 BCNF 위반 FD가 존재) :
    a → b 선택 (a는 슈퍼키 아님, a ∩ b = ∅)
    R을 (R - b) 와 (a, b)로 분해

b를 삭제하여 superkey를 만들고 (a,b)테이블로 분해 ( R → (R − b) + (a, b))

 

3NF(Third Normal Form): 모든 FD a →b 에 대해 아래 조건 중 1개 이상 만족하면 됨

 

  • α→β 가 trivial dependency (즉 β⊆α)
  • α 가 superkey
  • β−α 의 각 attribute가 R의 candidate key에 포함

ㄴ좌변이 superkey가 아녀도 우변이 candidate key의 일부면 ㅇㅋ해줌!!

bcnf는 redundancy 제거에 강하지만 모든 dependency를 보존할수없어 join이 필요해짐, 3nf는 더 널널해서 실용적임

 

1NF(Atomicity): 더이상 못쪼갬

2NF: 1NF 만족하고 모든 non-key attribute는 primary key에 완전 함수 종속해야 함 ex)

2nf 예시

Denormalization: 성능을 위해 normalization을 깨고 중복허용, 조회속도 빠르지만 데이터 중복과 갱신 불일치 위험有

ㄴ 대안: 비정규화 테이블 생성/Materialized view 사용

 

7. Physical Storage Systems

volatile storage(휘발성): RAM

non-volatile storage: HDD, SSD

캐시위에는 cpu, cpu로 갈수록 속도 빠르고 휘발됨

primary(cache, main memory): 휘발성

secondary(flash memory, magnetic disk):비휘발성, on-line storage로도 불림

tertiary(optical disk, magnetic tapes):비휘발성, 속도 느림, off-line storage로도 불림, 아카이브용으로 쓰임

 

Storage Interface

- Disk interface 표준: SATA, SAS, NVMe(셋 중 가장 빠름, PCle 커넥터랑 함께 이용해 지연을 낮추고 전송속도 높임)

- SAN: 많은 양의 디스크가 다수의 서버에 고속의 네트워크로 연결되어있음

- NAS: disk system interface 대신 networked file system protocol로 연결함

Disk 성능 측정 기준

1. Access time: 읽기/쓰기 요청 발생시점부터 데이터 전송이 시작될때까지 걸리는 시간

ㄴ Seek time: arm을 올바른 track(줄)으로 재위치 시키는 시간

ㄴ Rotational latency: sector(줄안에서 칸)가 head 아래에 올때까지 걸리는 시간

2. Data-transfer rate: Disk에서 데이터 검색할 수 있는 속도

 

Disk block: 공간 할당/검색하는 logical unit, 작은블록은 더 transfer하고 큰건 더 많은 공간 낭비됨

Sequential access pattern: 첫번째 블록에서만 disk seek 요구됨

Random access pattern: 어떤 위치에서든 disk seek 요구됨, 찾는데 많은 시간 걸려서 전송률 낮음

IOPS: 디스크가 초당 지원할 수 있는 무작위 블록 읽기 횟수

MTTF: 디스크가 failure없이 계속 run할 것으로 기대되는 평균 시간

 

Flash Storage

NAND flash: NOR보다 저렴, page단위로 읽어야함, 덮어쓰기 하려면 페이지를 지워야함

논리 페이지주소를 물리페이지 주소로 remapping해서 erase 기다리지 않아도됨, 새 물리공간에 즉시 write하고 나중에 remove함

 

SSDs: parallel read 지원

RAID: 여러개의 디스크를 병렬로 사용하여 고용량과 고속 보장, 데이터 중복 저장해서 하나 고장나도 복원가능

ㄴ Redundancy: 디스크 고장났을때 재구축에 사용할 수 있는 추가 정보 저장

Mirroring: 모든 디스크 복제, write할때 두 디스크 둘다 함, 읽기는 어디든지 ok

 

Disk 접근 최적화 방법

1. Buffering: 메모리 버퍼에 disk block 저장

2. Read-ahead: 곧 요구될 것으로 기대 될 트랙에서 추가 블록 읽기

3. Disk-arm-scheduling: disk-arm 움직임 최소화 되게 알고리즘 설정

4. File organization: 파일을 가능한 연속된 곳에 할당, 파일이 조각나있는 경우 조각난거에 순차적으로 접근

5. Non-volatile write buffers

 

8. Data Storage Structures

 

'공부 > 학교' 카테고리의 다른 글

데사 중간 정리  (0) 2026.04.16
창소프 기말 정리  (0) 2025.12.15
창소프 중간 정리  (2) 2025.10.27
지금까지 한거 정리  (0) 2025.10.19
자료구조 중간고사 함수 정리  (0) 2025.04.22