데이터베이스 설계와 설계 주안점

데이터베이스 설계


개념적 설계 - 논리적 설계 - 물리적 설계 이전에 중요한 단계가 하나 더 있다.


요구 명세 단계

바로 요구 명세 도출 작업인데,
데이터베이스 이용자들(클라이언트 엔드 포인트, 웹 애플리케이션 서버 등)이
필요로 하는 데이터를 규정하는 작업이다.

도메인 전문가들이 참여하여 요구사항을 도출하며
산출물은 문서가 될 수도 있고, 다이어그램의 형태가 될 수 있다.


따라서, 데이터베이스 설계 단계를 나누자면 다음과 같다.
요구명세 도출 - 개념적 설계 - 논리적 설계 - 물리적 설계


개념적 설계 단계

개체-관계 모델이 생성되며 중복, 충돌 등이 발생하는지 체크를 위해 스키마를 검토할 수 있다.
저장 방식이 아닌 관계에 집중한다.

기능적 요구사항 명세서가 생성된다.
데이터에 적용될 연산/트랜잭션의 종류가 기술된다.(CRUD 작업)


이 이후부터는 개념적 설계 단계에서의 추상 데이터 모델이
실제 데이터베이스 구현으로 이어진다.


논리 설계 단계

논리 설계 단계에서는
상위 개념적 스키마를 데이터베이스의 데이터 모델에 대응시킨다.
개념적 스키마(주로 E-R모델)을 관계형 스키마로 대응시킨다.


물리 설계 단계

물리적 설계 단계에서는
파일 구성 형식 및 인덱스 구조에 대한 선택을 수행한다.


데이터베이스의 물리적 스키마는
DB와 통신하는 응용 프로그램이 개발된 후 상대적으로 쉽게 바꿀 수 있다.

하지만
논리적 스키마를 바꾸려면
1. 질의문
2. 응용 프로그램 코드
에 영향을 크게 줄 수 있으므로

설계 단계에 주의를 기울여야한다.



설계 주안점

중복성

정보의 반복.

왜 이것이 문제가 되냐하면,
불필요한 저장 공간 낭비 및 트랜잭션 발생 뿐 아니라
일관성에도 영향을 미칠 수 있기 때문이다.

"정보가 수정될 때, 중복되어 저장되어있는 모든 복사본을 수정해야한다."
이 case에 대한 예방책을 일일이 만들기는 쉽지 않다.

때문에 정보는 정확히 한 장소에 위치시키는 것이 이상적이다.

불완전성

간단히 말하면 좋지 않은 설계.


분반 단일 릴레이션과
수업-분반 관계를 비교해보자


첫번째 관계의 경우
새로운 수업을 등록할 때, 분반이 반드시 존재해야한다.

이 설계의 문제는
일단 수업에 대한 정보만 기술하고 싶지만 
분반이 반드시 제공돼야하는 불편함이 있을 수 있다.

그렇지 않으면 수업을 최초 등록 한 후, 분반 정보에는 null값이 저장되는데
이는 주 키 제약에 위배되기 때문에 실현할 수 없다.


두번째 관계의 경우
수업에 대한 정보는 등록하되,
분반이 수업 테이블을 참조하게 함으로서
실제 강의 자체는 제공하지 않을 수 있다.(row 자체를 등록하지 않는다.)


시스템 특성에 따라 첫번째 관계가 더 적합할 수도 있다.
이는 어떤 시스템이냐에 따라 적합한 설계가 달라질 수 있다.


댓글

이 블로그의 인기 게시물

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

노마드코더 개발자북클럽 Clean code TIL 6 : 6장. 객체와 자료구조

백엔드 개발자가 Djnago fullstack 사이드 프로젝트를하며 ( html, css, vanillaJS 그리고 JS프레임워크 )