데이터베이스 모델링과 논리적 설계
카테고리: Database
태그: Database
이전 글에서 데이터베이스의 개념적 설계를 위해 ERD(Entity-Relationship Diagram)를 작성하였습니다. ERD를 작성하면서, 개체간에 존재하는 관계를 분석했습니다. 이러한 관계를 데이터베이스 구축에 사용하기 위해서는, 먼저 관계에 대한 해석이 필요합니다. 관계의 해석은 논리적 설계 과정에서 이루어지며, 이를 통해 테이블 생성, 컬럼 정의 등의 작업이 이루어집니다.
논리적 설계
논리적 설계란 ERD에서 도출된 개체, 속성, 관계 등을 논리적 스키마로 변환하는 과정을 포함합니다.
개체를 테이블로 만들기
각 개체를 속성을 포함하는 테이블로 변환합니다. 이후에, 기본 키를 결정합니다. 기본 키는 단일 키일 수도 있고, 복합 키일 수도 있습니다.
약개체를 테이블로 만들기
각 개체를 속성을 포함하는 테이블로 변환합니다. 이 과정에서, 테이블은 의존하는 개체의 기본키를 외래키로 포함합니다.
약개체의 부분 키와 상위 개체의 기본 키는 약개체의 복합 기본키가 됩니다.
관계 만들기 맵핑하기
테이블을 생성한 후에는, 테이블 간의 관계를 정의해야 합니다.
1 : 1 관계 맵핑하기
1 : 1 관계를 맵팡하기위한 방법에는 3 가지 방법이 존재합니다.
외래키 방식
하나의 개체에서 기본키를 선택하고, 다른 개체의 외래키로 사용하는 방법입니다.
개체 병합
두 개의 개체를 하나로 합치는 방법입니다. 이 방법에서는 한 개체의 레코드가 다른 개체의 레코드와 일대일 대응되므로 가능합니다.
Cross-reference or relatoinship relation option
두 개의 개체의 관계를 정의하는 세 번째 테이블을 만드는 방법입니다.
세 번째 테이블은 각각의 개체의 기본 키를 외래키로 가집니다.
1 : N 관계 맵핑하기
사원 테이블과 부서 테이블의 관계를 이용해서 예를 들어보겠습니다. 사원은 반드시 하나의 부서에서 일을 합니다. 그에 반해, 부서는 다수의 사원과 관계를 가질 수 있습니다.
이들의 관계를 맵핑하기 위해서는 부서 테이블의 기본키를 사원 테이블의 외래키로 사용합니다.
재귀 관계(Recursive Relationship)
이전 글에서 사원 테이블은 supervision이라는 이름의 1 : N 재귀 관계를 가지고 있습니다.
재귀 관계도 또한 다른 테이블과 비슷한 방식으로 맵핑을 진행합니다. 따라서 사원 테이블에서 외래키를 동일한 사원 테이블의 기본키로 사용하게 됩니다.
M : N 관계 맵핑하기
이전 글에서 언급한 M:N 관계를 가지는 개체를 사용하여 예시를 들어보겠습니다.
이러한 관계를 정의하기 위해서는 연결 테이블을 만들어야 합니다. 이 테이블은 오직 사원테이블과 프로젝트 테이블의 관계를 정희하기 위해서만 존재합니다.
연결 테이블은 보통 사원 테이블의 기본키와 프로젝트 테이블의 기본 키를 외래키로 가지며, 이 두 외래키를 합하여 기본 키로 사용하는 경우가 많습니다. 이렇게 하면 각 사원과 프로젝트 간의 유일한 관계를 표현할 수 있습니다. 또한 , 필요에 따라 연결 테이블에 추가적인 속성을 포함할 수도 있습니다.
예를 들어, John 사원은 ProjectA 와 ProjectB 두 개의 프로젝트를 진행하고 있으며, ProjectA는 John 과 David 사원이 함께 진행하고 있습니다.
이렇게 구성된 Works_on 테이블은 사원 테이블과 프로젝트 테이블의 기본 키를 외래키로 사용하며, 이 두 외래키를 조합하여 새로운 기본 키로 사용합니다. 이렇게 새로운 연결 테이블을 만들어 M:N 관계를 표현할 수 있습니다.
또한, 위의 예시에서 확인할 수 있듯이, 연결 테이블을 사용함으로써 관계에 속성을 부여할 수 있습니다. 이를 통해 프로젝트 참여에 대한 추가적인 정보를 저장하거나 관리할 수 있습니다.
다중값 속성 맵핑하기
속성을 표현하기위해, 새로운 테이블을 만들 수도 있습니다. 예를 들어, 부서는 여러 장소에 존재할 수 있다고 가정해봅시다.
다수의 속성을 표현하기 위해 다음과 같은 테이블을 만듭니다.
다중값 테이블은 부서 테이블의 다중값 속성을 표현하기 위해서만 존재합니다. 만약 다중값 속성이 복합 속성일 경우, 복합 속성을 분해하여 각각의 단일 속성으로 만들 필요성이 있습니다.
요약
이번 글에서는 개념적 설계를 통해 작성된 ERD를 바탕으로 논리적 설계를 진행하는 방법에 대해 알아보았습니다. 다음 글에서는 본 글에서 다룬 관계를 효과적으로 개선하는 방법인 정규화에 대해서 학습하겠습니다. 정규화를 통해 데이터베이스의설계를 더욱 견고하게 만들어 중복을 최소화하고 데이터 무결성을 유지할 수 있습니다.
출처
https://www.slideshare.net/hoyoung2jung/ss-40851049
https://medium.com/omarelgabrys-blog/database-modeling-logical-design-part-6-af029e93cc1f
댓글 남기기