GN⁺: 구글 캘린더를 위한 데이터베이스 설계 튜토리얼
(kb.databasedesignbook.com)소개
이 데이터베이스 설계 튜토리얼에서는 복잡한 실제 프로젝트의 데이터베이스 테이블을 설계하는 방법을 보여줌. Google Calendar의 클론을 설계할 것임. 이 시리즈는 "Database Design using Minimal Modeling" 책의 접근 방식을 설명함. 먼저 캘린더 데이터를 설명하는 완전한 논리 모델을 구축한 후, 논리 모델을 기반으로 테이블 설계를 진행할 것임.
대상 독자
이 책의 목표는 모호한 아이디어에서 데이터베이스 테이블의 완전한 정의로 이동하는 데 도움을 주는 것임. 텍스트의 첫 3/4은 데이터베이스에 대한 일반적인 이해만 필요하며, 논리 모델에 대해 설명함. 마지막 1/4은 논리 모델에서 물리적 테이블 구조로 이동하는 방법을 설명함.
목차
- 소개
- 이 책의 접근 방식
- 문제 설명
- Part 1: 기본 하루 종일 이벤트
- Part 2: 시간 기반 이벤트
- Part 3: 반복되는 하루 종일 이벤트
- Part 4: 캘린더 페이지 렌더링
- Part 5: 시간 기반 이벤트의 캘린더 페이지 렌더링
- Part 6: 지금까지의 완전한 논리 모델
- Part 7: SQL 테이블 생성
- 결론
- 다음 단계
이 책의 접근 방식
사람들은 종종 테이블 설계부터 시작하지만, 우리는 다른 접근 방식을 취함. 논리 모델을 먼저 작성하고, 데이터 속성과 엔터티 간의 관계를 정의함. 논리 모델이 결정되면 물리적 테이블을 설계함.
문제 설명
Google Calendar의 주요 기능을 구현할 것임. 사용자 관련 데이터는 최소한으로 구현할 것임. 이벤트는 제목, 설명, 위치 등의 속성을 가짐. 가장 복잡한 부분은 시간과 날짜임.
Part 1: 기본 하루 종일 이벤트
앵커
먼저 앵커를 찾아야 함. 앵커는 엔터티로, 예를 들어 사용자(User)와 이벤트(Event)가 있음. 앵커는 ID와 카운팅을 처리함.
사용자 속성
사용자에 대한 최소한의 데이터를 모델링할 것임. 예를 들어 이메일.
하루 종일 이벤트 속성
이벤트 이름, 시작 날짜, 종료 날짜를 저장해야 함.
링크
특정 사용자가 특정 이벤트를 생성한 정보를 저장할 위치를 결정해야 함. 이는 속성이 아닌 링크로 처리함.
Part 2: 시간 기반 이벤트
시간대
시간대는 여러 국가와 지역에서 사용됨. 시간대 정의는 가끔 변경됨. 시간대와 관련된 최소한의 모델을 구현할 것임.
시간대 속성
시간대의 인간이 읽을 수 있는 이름을 저장할 것임.
시간 기반 이벤트 속성
이벤트 이름, 시작 시간, 종료 시간을 저장할 것임. 로컬 시간을 사용함.
링크
시간대와 시간 기반 이벤트 간의 링크를 정의함.
날짜 이벤트와 시간 이벤트의 유사점
두 이벤트 유형 간의 유사점을 고려할 것임. 논리 모델링을 통해 결정을 미룰 수 있음.
Part 3: 반복되는 하루 종일 이벤트
속성 #1, 주기
이벤트가 얼마나 자주 반복되는지에 대한 속성을 정의함.
속성 #2, 얽힌 속성
반복되는 이벤트의 주기를 정의함.
속성 #3
월별 이벤트의 경우, 같은 날 또는 같은 요일에 반복되는지 정의함.
요일: 마이크로 앵커
요일을 저장할 위치를 결정함. 새로운 앵커를 도입함.
링크
요일과 이벤트 간의 링크를 정의함.
완료 여부 확인
모델링이 완료되었는지 확인하기 위해 원래 요구 사항을 다시 검토함.
반복 제한: 더 얽힌 속성
이벤트가 언제까지 반복되는지에 대한 속성을 정의함.
Part 4: 캘린더 페이지 렌더링
지금까지 캘린더의 기록 부분을 논의했음. 이제 사용자의 캘린더 주간 보기를 보여줄 필요가 있음.
GN⁺의 정리
이 튜토리얼은 복잡한 데이터베이스 설계를 단계별로 설명하여 초보자도 쉽게 이해할 수 있게 함. Google Calendar의 주요 기능을 모델링하여 실제 프로젝트에 적용할 수 있는 유용한 예제를 제공함. 논리 모델링을 통해 데이터베이스 설계의 오류를 방지하고, 물리적 테이블 설계로 자연스럽게 이어지는 과정을 설명함. 이와 유사한 기능을 가진 프로젝트로는 Microsoft Outlook Calendar 등이 있음.