데이터베이스 과제를 진행하면서,,
이전에 프로젝트를 진행하며 논리적, 물리적 설계 단계에서 이해하지 않고 쉽게 지나쳤던 부분을 다시 마주치며 과정을 기록으로 남겨보고자 한다.
데이터베이스 설계 단계는 보편적으로 다음과 같다.
- 요구 사항 분석
2. 개념적 설계
3. 물리적 설계- 논리적 설계
- 구현
과제 목표는 영화 예매 사이트의 데이터베이스 구축으로 논리적 설계 단계까지만 진행된다.
요구 사항 분석은 과제의 내용으로 주어졌기 때문에 요구 사항 분석 결과를 가지고 개념적 설계부터 시작하여 설계 진행 순서로 기술한다.
추상화(Abstraction) 되어있는 정보를 일련의 과정을 거쳐 엔티티 후보 풀과 리스트로 기술한다.
엔티티 종류에 따라 추가적으로 필요한 엔티티를 확인해 추출한다.
특히 동사
E-R 다이어그램에서 마름모로 표현된다.
관계설정(마름모) - 관계명 - 참여도(점선) - 필수 관계(이중선) 를 검토하여 설정한다.
참여도와 필수 관계를 정의하는데 생각보다 둘의 정의가 모호하고 어려웠다.
(참고)
공급에서 상품은 필수적이다.
→ 제조업체가 상품을 공급한다.
→ 모든 상품은 제조업체에서 공급되어야한다.
→ 상품이 공급하지 않은 제조업체가 있을 수 있다.
작성에서 게시글은 필수적이다.
→ 회원이 게시글을 작성한다.
→ 모든 게시글은 회원이 작성한다.
→ 게시글을 작성하지 않은 회원이 있을 수 있다.
영화예매 관계를 주어진 명세서로 작성했을 때 ERD이다.


ERD를 기반으로 릴레이션 스키마를 작성한다.
다대다 관계
일대다 관계
일대일 관계
단, 관계 속성이 많을 경우 (2~3개 이상) 관계를 단독 릴레이션으로 변환한다.
복합속성은 논리적 설계 과정에서 나열하여 변환한다.
필수적 참여를 포함한 관계 릴레이션에서는 참여개체의 기본키를 외래키로 포함한다.
① 제 1 정규형 (1NF)
② 제2정규형 (2NF)
③ 제 3 정규형 (3NF)
④ 보이스/코드 정규형 (BCNF)

사진 출처 : https://spidyweb.tistory.com/116
회원-좌석 관계를 정의하는 과정에서 요구 사항을 만족하는 관계를 찾지 못해 가장 많은 시간을 할애했던 것 같다...
그리고 정규화 과정을 수행하면서 출연 릴레이션의 배우 속성이 후보키가 아님에도 영화 속성을 결정한다고 생각하면서 분해하고 복합키로 추가하는 방법을 찾아갔다. (하지만 종속자인 영화번호 속성이 기본키가 아니므로 해당되지 않는 다는 것을 깨달았다.)
강의를 들으며 일대다, 다대다 관계에서 릴레이션을 변환하는 과정을 보면서 어느정도 익혔다고 생각했는데 역시 예제를 보면서 하는 것과는 다르다. 과제를 수행하면서 원리를 파악하지 못했다는 것을 느꼈고 이번 기회로 오류를 바로 잡고 부족한 부분을 채운것 같다.