# 가장 쉬운 데이터베이스 설계
# INTRO
관계형 데이터베이스
는 테이블로 구현된 관계에 데이터를 저장한다. 특징은 다음과 같다.
사용자는 데이터의 물리적인 위치를 알 필요가 없다. 이 점이 기존 계층형, 네트워크형 DB들과 차이점을 보인다.
내장된 다중 무결성
응용프로그램으로부터 논리적 물리적 데이터 독립성
- 데이터의 일관성과 정확성을 보장
- 쉬운 데이터 검색
# DB 설계
데이터베이스의 설계가 중요한 이유는 데이터베이스 데이터의 일관성, 무결성, 정확성에 결정적으로 영향을 미치기 때문이다. 즉, 부정확한 정보를 제공해서는 안 된다.
# DB의 설계 목적⭐️
데이터베이스는 필수 및 임의적인 정보 검색을 모두 지원한다
👉 설계과정에서의 요구사항 뿐만 아니라 사용자에 의해 제기 될 수 있는 임의의 질의를 지원하기 위해 필요한 데이터를 저장해야 한다.
테이블은 적절하고 효율적으로 구성되어야 한다
👉 각 테이블은 하나의 제목을 나타내며 구별되는 필드로 구성되어 중복 데이터를 절대적으로 최소화하고 고유값을 가진 필드에 의해 식별되어야 한다.
필드, 테이블, 관계 수준에서 데이터의 무결성이 부증된다
👉 데이터의 값이 유효하고 항상 정확할것을 보장해야함.
데이터베이스는 조직과 관련된 업무 규칙을 지원한다.
👉 데이터는 항상 업무에 의미가 유효하고 정확한 정보를 제공해야 한다.
데이터베이스는 자체의 미래성장에 적합해야 한다.
# 전통적인 DB 설계 방법
전통적인 설계 방법은 다음 3단계로 구성된다:
요구사항 분석
모델이 되는 사업에 대한 조사 등.
데이터 모델링
엔티티-관계 다이어그램 Entity Relationship Diagram, 의미-개체 Semantic-object 모델링, 개체 관계 Object-role 모델링 또는 UML 모델링과 같은 데이터 모델링 방법을 사용하여 DB 구조를 설계한다.
즉 테이블, 테이블 관계, 관계 특성과 같은 데이터베이스 구조의 다양한 측면을 시각적으로 표현하는 수단을 제공한다.
필드들도 데이터 모델링 단계에서 정의되고 적절한 테이블에 포함된다. 각 테이블에 기본키를 할당하고 데이터 무결성의 다양한 수준이 식별 및 구현 되고 외래키를 통해 관계를 설정한다.
정규화
정규화는 불필요한 데이터와 중복 데이터를 제거하고 데이터 Insertion, Update, Deletion 과정에서 발생할 수 있는 anomaly 를 방지하기 위해 큰 테이블로 작은 테이블로 분해하는 과정이다.
정규형은 1NF, 2NF, 3NF, 4NF, BCNF, 도메인/키 정규형을 포함한다.
# DB 용어 정리
# Data vs Information
Data
는 데이터베이스에 저장된 값들을 의미한다. 데이터는 정적이다.
George Edleman 92883 05/16/96 95.0
위의 예제 데이터는 큰 의미를 갖지 않는다. "92883" 이 어떤 의미를 가지는지 알 수 없다.
Information
은 데이터를 의미 있고 실용적으로 재생성한 것들을 의미한다. 따라서 매우 동적인 의미를 가지는데 지속적으로 데이터베이스에 저장된 데이터 사이의 관계를 변경하고 수 많은 방법을 통해 데이터를 가공할 수 있기 때문이다.
즉, 데이터를 가공해서 의미 있는 결과를 바꾸면 정보가 된다. 따라서 누군가에게 의미 있는 정보를 제공하는 데이터베이스를 설계해야 한다.
데이터는 저장하는 것이고, 정보는 찾는 것이다.
# NULL과 이로 인한 문제
NULL
은 없거나 알려지지 않은 값을 나타낸다. 널이 나올 수 있는 상황은 다음과 같다.
누락 값 👉 일반적으로 사람의 실수로 인해 발생한다.
알려지지 않은 값 👉 필드에 필요한 특정 값이 정의되지 않은 경우
예를들어 Hair Color 필드를 포함하는 PATIENTS 테이블이 있다고 가정하자. 만일 환자가 최근에 대머리가 됬다고 가정한다면, 이 필드에는 널 값 대신 "N/A" 혹은 "Not Applicable" 과 같은 값을 사용하도록 한다.
널로 인한 문제
3 - 1. 연산 과정에서 널
Product ID | Product Description | Category | SRP | Qty On Hand | Total Value |
---|---|---|---|---|---|
700001 | Macbook Pro 2019 | Laptop | 1,900.00 | ||
700002 | iMac 2018 | Desktop | 1,200.00 | 16 | 19,200 |
700003 | iPhone 11 | Mobile Phone | 1,300.00 | 33 | 49,200 |
위의 경우 Total Value 는 SRP 와 Qty On Hand 필드의 곱 연산으로 계산 되는데 Qty On Hand 필드가 널 값이 되면 Total Value 또한 널 값을 가지게 된다.
3 - 2. 집계 함수에서 널
집계 함수에 NULL 값이 있는 필드가 포함될 때, 집계 함수의 결과는 NULL이 된다.
널로 인한 문제를 해결하는 유일한 방법은 해당 필드에 널이 오지 못하도록 하는 것 뿐이다. 따라서 설계 과정에서 고려되어야 한다.
# Table
특정 테이블에서 나타내고자 하는 주제는 객체가 될 수도, 이벤트가 될 수도 있다.
Data Table
정보를 만들때 사용하는 데이터를 저장하는 테이블로 관계형 DB에서 가장 일반적인 테이블. 끊임없는 가공이 이루어지기 때문에 동적인 의미를 가진다.
Validation Table
데이터의 무결성을 보장할때 사용하는 데이터를 저장하기 때문에 정적이다.
인덱스와 키의 차이점
인덱스는 RDBMS 의 데이터 처리 속도를 향상시키기 위한 구조이다. 하지만 인덱스가 논리적인 데이터베이스 구조상 절대적으로 필요한 것은 아니다.
테이블의 레코드를 식별할 때 사용하는 논리적인 구조가 키라면, 인덱스는 데이터 처리 속도를 최적화할때 사용하는 물리적 구조이다.
# 관계
두 테이블 사이의 관계의 유형을 파악하는것은 중요하다.
- 관계는 다중 테이블 뷰를 만들 수 있도록 한다.
- 관계는 불필요한 데이터를 줄이고, 증복 데이터를 제거함으로써 데이터 무결성을 보장한다.
모든 관계는 테이블 사이에 존재하는 관계 종류에 의해, 각 테이블이 참여 방법에 의해, 참여 정도에 의해 특성화 할 수 있다.
# 관계의 유형
테이블 사이 Cardinality 라 부르는 관계에는 1대 1, 1대 다, 다대 다의 세 가지 유형이 있다.
다대 다
관계