본문 바로가기

Coursera 강의 정리/Modern Big Data Analysis with SQL

Foundations for Big Data Analysis with SQL - 05 관계형 데이터베이스 설계 (Relational Databases Design)

Primary Key는 테이블의 데이터를 유일하게 식별하며, 다른 테이블의 Foreign Key와 연결되어서 테이블의 논리적인 관계를 나타낸다.


데이터베이스 설계 전략으로
NormalizationDenormalization이 있다.


Normalization
Anomaly를 없애고 Business Rule를 강제하기 위해 사용하는 전략으로 3NF가 대표적이다.


Denormalization
Normalization의 장점을 일부 포기하는 대신 복잡한 연산을 빠르게 수행한다.

Primary Key Foreign Key

Primary Key는 테이블의 각 레코드를 유일하게 식별하는 열(column)이다. 따라서 Primary Key를 속성으로 가진다면 NOT NULL과 NO DUPLICATES 속성이 보장된다. 일반적으로 Primary Key는 테이블에서 하나의 열로 구성하지만, 복수의 열을 Compound Primary Key로 사용하는 것도 가능하다. 이러한 경우 열들은 합쳐서는 Primary Key이지만 개별적으로는 Foreign Key일 가능성이 높다.

 

Foreign Key는 다른 테이블의 Primary Key 값을 가지며, 테이블 간의 논리적인 관계를 나타낸다. Foreign Key에 연결된 Primary Key는 항상 존재하며, NULL 값을 허용하지 않는다.

데이터베이스 설계 전략: NormalizationDenormalization

데이터베이스를 설계하는 방법으로는 Normalization과 Denormalization이 있다. Normalization은 데이터베이스를 설계할 때 최소한의 단위로 나누는 반면 Denormalization은 나누어진 테이블을 합친다.

 

\Normalization과 Denormalization의 목적은 다르다. Normalization은 Anomaly를 없애고, Business Rule을 강제하기 위한 전략이다. 반면 Denormalization은 Normalization의 장점을 일부 포기하는 대신에 빠른 연산을 추구한다. 따라서 Operational DB와 Analytic DB는 목적에 따라 다른 전략을 취한다. Operational DB는 Business Rule에 근거하여서 데이터를 검증하는 CRUD가 빈번하므로 Normalization 전략을 사용한다. 반면, 복잡한 질의(query)를 처리하는 Analytic DB는 Denormalization을 선택한다.

Normalization – 3NF

Normalization은 Anomaly를 방지하기 위해서 테이블을 작은 단위로 쪼개는 전략이다. 정규화 정도에 따라서 1NF, 2NF, 3NF, 4NF, 5NF, 6NF로 나누며, 숫자가 커질수록 정규화 규칙을 엄격하게 적용한다. 일반적으로 3NF를 사용하며 다음과 같은 정규화 규칙을 만족한다.

 

(1)    테이블에 Primary Key가 반드시 존재한다.

 

(2)   Column의 각 값은 원자적(atomic)하게 구성한다. 원자적 단위는 데이터 처리의 최소 단위를 의미한다. 만약 사람의 성과 이름을 하나의 열(column)로 저장한다면, 성에 따른 분석 질의(query)를 수행하지 못한다. 이러한 경우 원자적으로 구성한 열은 성과 이름을 다른 열로 구별하여서 성에 따른 분석과 이름에 따른 분석이 가능하게 만든다.

 

(3)   Repeating Group이 없다. Repeating Group은 Multi-Valued Attribute을 의미한다. Repeating Group을 제거하기 위해서는 하나의 행(row)에 열거된 아이템을 여러 행들로 나눈다.

 

(4)   Partial Functional Dependency가 없다. Primary Key가 아닌 행들이 온전한 Primary Key(whole primary key)에 의해서만 유일하게 식별된다. 특히 두 개의 이상의 열이 Primary Key를 이루는 경우, Primary Key 열 모두에 의해서 다른 열들이 유일하게 식별되어야 한다. 일부에 의해서만 유일하게 식별되지 않는다.

 

(5)    Transitive Functional Dependency가 없다. Primary Key가 아닌 행들 사이의 Functional Dependency가 발생하지 않는다. Derived Column이라고도 하며 특정 열(column)에 의해서 결정되거나 계산된 열을 의미한다.

Denormalization의 종류

Denormalization은 연산의 이점을 위해서 Normalization을 포기한다. 다음과 같은 경우가 있다.

 

(1)    Primary Key가 없는 경우이다. 예를 들어 아이템과 수량에 대한 정보만 기록하는 테이블은 PK는 없지만 아이템과 수량에 대한 분석이 가능하다.

 

(2)   JOIN 연산을 미리 수행한 테이블이다. Normalization으로 인해 나누어진 테이블은 JOIN 연산을 통해 복잡한 질의를 처리한다. 하지만, JOIN 연산은 많은 시간과 자원이 소모되므로 이를 미리 테이블로 만들어서 질의 처리의 속도를 빠르게 한다.

 

(3)   Derived Column을 저장한다. Derived Column은 Normalization 된 경우라면 연산을 수행해야 한다. 하지만 빈번하게 연산되는 열(column)이라면 이를 Derived Column으로 만들어서 연산을 줄일 수 있다.

 

(4)   Summary Table을 저장한다. Derived Column과 마찬가지로 테이블에 대한 Summary 연산이 빈번한 경우 테이블로 미리 만들어 연산을 줄인다.