Database Design Process
Conceptual database design -> Logical database design -> Physical database design
사진 출처
Physical Design Purpose, Goal
- Purpose: logical schema를 데이터를 저장하고 꺼내기 위한 technical spec으로 바꾸는 것
- Goal: 충분한 성능과 확실한 데이터 무결성, 보안성, 문제가 생겼을 때의 복구력을 제공하는 데이터 저장공간을 디자인
- 구현은 physical database design에 포함되지 않음(아직까지 디자인)
- DBA, 프로그래머 등 만드는데 관계있는 사람들이 들어가도 구현할 때 사용되어질 technical spec을 만듦
Physical Design Process
- Input
- normalization을 거친 relation
- 예측된 크기
- 각각의 attribute column의 정의
- 쿼리가 실행되는데 얼마나 오래 delay 되느냐
- 얼마나 보안이 필요한 데이터인가
- 유실, 문제가 생겼을 때의 백업/회복력에 대한 니즈
- 무결성
- 사용되어질 DBMS 기술
- Decisions
- Attribute의 데이터 타입
- 물리적인 record에 대한 설명
- 언제나 logical design과 일치하지 않음
- file organization
- index 및 데이터베이스 구조
- 효율적인 쿼리
Volume/Access Frequency Estimation
- 각각의 테이블에 얼마나 많은 데이터가 들어가느냐
- 현재 비즈니스 사이즈가 얼마인가를 고려
- 향후 몇년간에 비즈니스가 얼마나 성장하느냐를 고려
- 얼마나 자주 해당 테이블이 검색 되느냐
- insert, delete, update, query
- 데이터베이스에 수정이 일어나거나, 리포트를 만드는가, 쿼리를 얼마나 실행할 것인가를 고려(동시 접속자수, 고객이 물건을 사는 이벤트, 물건을 만드는 이벤트,,,)
- 데이터 크기와 사용빈도는 매우 중요한 input이 됨
- 특히 엄청 큰 스케일의 데이터베이스 시스템을 구현할 때 중요한 input이 됨(facebook, amazon, coupang,,,)
- 시스템 개발 과정의 분석 과정에서 생성
- AS-IS: 현재 사용하고 있는 시스템을 분석
- To-BE: 앞으로 만들 것에 대해 분석
- 정확한 숫자는 필수적이지 않음
- 대략적인 예측치는 필요
- 어디에 집중하는지 알기 위한 숫자들의 상대적인 크기
- Volume estimation은 박스안에 숫자로, access frequency estimation은 점선과 숫자로 표시
- 가령, attribute가 엄청 많거나, 엄청 길면 그것을 index를 활용하거나 적정하게 바꾸는 과정이 physical design에서 실행
- 한 개를 부를 때 항상 다른 하나가 불러진다면 두 개를 합치는 denormalization도 physical design에서 실행
Designing Fields
- Field: 프로그래밍 언어와 DBMS에 의해 인식되어지는 최소 단위의 데이터
- composite attribute는 attribute 하나하나가 component
- Field Design
- Choosing data type
- 모든 가능한 값들을 나타낼 수 있는지
- 데이터 무결성 향상시키는 방법으로
- 모든 데이터 조작을 도와주는 방법으로
- 공간 낭비를 최소화
- Coding, compression, encryption
- Controlling data integrity
- Default value: 정확한 값이 없다면 추정한 값
- Range control: 허용가능한 값의 제한을 둠(constraints 또는 validation rule)
- Null value control: 비어있는 필드를 허용하거나 금지
- Referential integrity: foreign key와 primary key를 대응
- Hanling the missing data
- missing value의 추정한 값을 대신 채워넣음
- missing value에 대한 report list를 만듦
- 프로그램에서 missing value가 중요하지 않다면 무시