Database
[데이터베이스 개론] Chapter8 - 데이터베이스 설계
로승리
2023. 5. 13. 04:20
데이터베이스 설계 단계
- 조직 구성원들의 다양한 요구에 알맞은 데이터베이스를 구축하기 위해서는 데이터베이스 설계가 중요하다.
- 관계 데이터 모델을 기반으로 두고 데이터베이스를 설계할 때는 E-R 모델과 릴레이션 변환 규칙을 이용한 설계 방법과 정규화를 이용한 설계 방법을 사용한다.
![]() |
![]() |
요구사항 분석
- 요구사항 분석 단계에서는 데이터베이스에 대한 사용자들의 요구 사항을 수집하고 분석하여, 개발할 데이터베이스의 용도를 명확히 파악하는 것이 목적이다.
- 요구 사항 분석 단계는 사용자가 요구하는 데이터베이스의 용도가 결정되는 단계이기 때문에 품질 좋은 데이터베이스를 개발하기 위해 가장 중요한 단계이다.
- 데이터베이스를 사용할 주요 사용자의 범위부터 결정한다.
- 사용자가 조직에서 수행하는 업무를 분석한다.
- 수집된 요구 사항을 다각도로 분석한 뒤 분석 결과를 요구 사항 명세서로 문서화한다.
개념적 설계
- 개념적 설계 단계의 주요 작업은 요구 사항 분석 결과를 기반으로 현실 세계에서 중요한 데이터 요소인 개체를 추출한 후 개체 간의 관계를 결정하여 이를 E-R 다이어그램으로 표현하는 것이다.
- 개념적 설계 단계에서 사용자의 요구 사항을 개념적 데이터 모델로 변환하는 작업을 개념적 모델링이라고 한다.
- E-R 다이어그램과 같이 개념적 데이터 모델로 표현된 개념적 설계의 결과물을 개념적 구조 또는 개념적 스키마라고 한다.
개체와 속성 추출
- 개념적 설계 단계에서 가장 먼저 수행해야 하는 기본 작업은 요구 사항 분석 단계의 결과물에서 개체를 추출하는 일이다.
- 개체는 저장할 만한 가치가 있는 중요 데이터를 지닌 사람이나 사물 등이며, 개념적 모델링을 하는 데 가장 중요한 요소다.
- 제시된 요구 사항의 문장들에서 명사를 찾는다.
- 일반적이고 광범위한 의미의 명사는 제외하고, 의미가 같은 명사가 여러 개면 대표 명사 하나만 선택한다.
- 개체가 아닌 속성으로 분류되는 단어도 존재하기 때문에 찾아낸 명사를 개체와 속성으로 정확히 분류하는 작업이 필요하다.
- 찾아낸 개체에 박스를 치고 속성에는 밑줄을 그어 표시한다.
관계 추출
- 관계는 개체 간의 의미 있는 연관성이다.
- 일반적으로 관계는 요구 사항을 표현한 문장에서 동사로 표현된다.
- 개체 간의 연관성을 의미 있게 표현한 동사만 선택하고 의미가 같은 동사가 여러 개이면 대표 동사 하나만 선택한다.
- 관계를 추출한 후에는 추출한 관계에 대한 매핑 카디널리티와 참여 특성을 결정한다.
- 매핑 카디널리티를 기준으로 추출한 관계를 1:1, 1:n, n:m 중 하나로 분류한다.
- 개체가 관계에 필수적으로 참여하고 있는지 선택적으로 참여하고 있는지를 의미하는 참여 특성을 결정한다.
E-R 다이어그램 작성
- E-R 다이어그램이 데이터베이스에 대한 요구 사항 명세서를 개념적으로 모델링하여 표현한 것이다.
- E-R 다이어그램이 개념적 설계 단계의 결과물인 개념적 스키마다.
- E-R 다이어그램에서 개체는 사각형, 속성은 타원형, 키 속성은 이름에 밑줄을 긋는다.
- E-R 다이어그램에서 관계는 마름모로 표현하고, 사각형= 표현된 개체와 선으로 연결한다.
- 1:1, 1:n, n:m 관계는 선 위에 레이블로 표시하며 필수적으로 참여하는 개체는 개체와 관계를 이중선으로 연결한다.
논리적 설계
- 논리적 설계 단계에서는 DBMS에 적합한 논리적 데이터 모델을 이용해서, 개념적 설계 단계에서 생성한 개념적 스키마를 기반으로 논리적 스키마를 설계한다.
- DBMS에 독립적인 개념적 스키마를 기반으로 하여 개발에 사용할 DBMS가 처리할 수 있는 데이터베이스의 논리적 구조를 설계하는 것이 논리적 설계 단계의 목표다.
- 논리적 설계 단계에서는 관계 데이터 모델을 이용하여 개념적 설계 단계의 결과물인 E-R 다이어그램을 관계 데이터 모델의 릴레이션 스키마, 즉 테이블 스키마로 변환하는 작업을 한다.
- E-R 다이어그램과 관계 데이터 모델은 규칙과 표현 방식이 달라 릴레이션 스키마로 변환할 때는 세심하게 고려할 사항이 많다.
- 규칙을 적용하여 생성된 릴레이션 스키마는 완벽하지 않을 수 있고, 이상 현상이 발생할 수도 있다.
- 더 정확히 변환하려면 다섯 가지 규칙을 적용해 릴레이션 스키마를 설계한 후에 정규화 과정을 통해 이상 현상이 발생하지 않도록 검증하는 작업을 수행하는 것이 좋다.
릴레이션 스키마 변환 규칙
- 규칙 1 : 모든 개체는 릴레이션으로 변환한다.
- E-R 다이어그램의 각 개체를 하나의 릴레이션으로 변환한다.
- 개체의 이름을 릴레이션의 이름으로 하고, 개체가 가진 속성도 릴레이션의 속성으로 그대로 변환한다.
- 단, 개체가 가지고 있는 속성이 복합 속성인 경우에는 복합 속성을 구성하고 있는 단순 속성만 릴레이션의 속성 으로 변환한다.
- 개체가 가지고 있는 키 속성을 릴레이션의 기본키로 변환한다.
- 규칙 2 : 다대다n:m 관계는 릴레이션으로 변환한다.
- E-R 다이어그램에 있는 n:m 관계를 하나의 릴레이션으로 변환한다.
- 관계의 이름을 릴레이션의 이름으로 하고, 관계의 속성도 릴레이션의 속성으로 그대로 변환한다.
- 단, 관계를 맺고 있는 개체가 무엇인지 중요하므로, 관계를 맺고 있는 개체들을 규칙 1에 따라 변환한 후 이 릴레이션들의 기본키를 관계 릴레이션에 포함시키고 외래키로 지정한다.
- 그리고 이 외래키들을 조합하여 관계 릴레이션의 기본키로 지정한다.
- 개체를 변환한 릴레이션의 기본키를 외래키로 지정할 때는 가져온 기본키들의 이름이 같을 경우 하나는 이름을 변경해야 한다.
- 규칙 3 : 일대다네 관계는 외래키로 표현한다.
- E-R 다이어그램에 있는 1:n 관계는 릴레이션으로 변환하지 않고 외래키로만 표현한다.
- 규칙 3-1 : 일반적인 일대다 관계는 외래키로 표현한다.
- 일반 개체들이 참여하는 1:n 관계는 릴레이션으로 변환하지 않고 외래키로만 표현한다.
- 관계를 맺고 있는 개체들을 규칙 1에 따라 변환한 릴레이션 중에서, 1:n 관계의 1측 개체 릴레이션의 기본키를 가져와 n 측 개체 릴레이션에 포함시키고 외래키로 지정한다.
- 관계의 속성들도 n측 개체 릴레이션에 포함시키지만 외래키나 관계의 속성을 포함시킬 때 해당 릴레이션의 원래 속성과 이름이 같으면 이름을 변경해야 한다.
- 규칙 3-2 : 약한 개체가 참여하는 일대다 관계는 외래키를 포함해서 기본키로 지정한다.
- 약한 개체가 참여하는 1:n 관계도 릴레이션으로 변환하지 않고 외래키로만 표현한다.
- 일반 개체들이 참여하는 1:n 관계처럼 관계를 맺고 있는 개체들을 규칙 1에 따라 릴레이션으로 변환한다.
- 이때 일대다1:n 관계의 1측 개체 릴레이션의 기본키를 가져와 n 측 개체 릴레이션에 포함시키고 외래키로 지정하며 관계의 속성들도 n 측 개체 릴레이션에 포함시킨다.
- 일반 개체들이 참여하는 1:n 관계와 다른 점은 n 측 개체 릴레이션이 가지고 있던 키 속성과 외래키 속성을 조합하여 기본키로 지정한다는 점이다.
- 규칙 4 : 일대일 관계를 외래키로 표현한다.
- E-R 다이어그램에 있는 1:1 관계도 1:n 관계처럼 릴레이션으로 변환하지 않고 외래키로만 표현한다.
- 규칙 4-1 : 일반적인 일대일 관계는 외래키를 서로 주고받는다.
- 일반적인 1:1 관계는 릴레이션으로 변환하지 않고 외래키로만 표현한다.
- 관계를 맺는 개체들을 규칙 1에 따라 변환한 릴레이션들이 서로의 기본키를 주고받아 이를 외래키로 지정한다.
- 이때, 관계가 가지는 속성들은 관계에 참여하는 개체를 변환한 릴레이션에 모두 포함시킨다.
- 규칙 4-1에 따라 1:1 관계에 참여하고 있는 개체에 해당하는 릴레이션들이 서로의 기본키를 주고받아 이를 외래키로 지정하면 불필요한 데이터 중복이 발생하게 된다.
- 관계를 표현하기 위해 남자 릴레이션과 여자 릴레이션이 외래키를 모두 가질 필요가 없고 1:n 관계의 표현처럼 한쪽 릴레이션만 외래키를 가져도 관계를 표현하는데 충분하다.
- 두 릴레이션 중 어떤 릴레이션에 외래키와 관계의 속성을 포함해야 하는지는 데이터베이스가 사용되는 조직의 환경적인 요소를 고려해서 선택한다.
- 규칙 4-2 : 일대일 관계에 필수적으로 참여하는 개체의 릴레이션만 외래키를 받는다.
- 1:1 관계를 맺고 있는 두 개체 중 관계에 필수적으로 참여하는 개체에 대응하는 릴레이션에만 외래키를 포함시킨다.
- 즉, 관계에 필수적으로 참여하는 개체에 해당하는 릴레이션이 선택적으로 참여하는 개체에 해당하는 릴레이션의 기본키를 받아 외래키로 지정한다.
- 이때, 관계가 가지고 있는 속성들도 관계에 필수적으로 참여하는 개체에 해당하는 릴레이션에 함께 포함시킨다.
- 관계에 반드시 참여하는 개체에 대응하는 릴레이션이 외래키를 가지도록 하는 것이 널 값을 최소화할 수 있다.
- 일대일 1:1 관계를 맺는 두 개체가 모두 선택적으로 참여하는 경우에는 외래키를 포함시킬 릴 레이션을 자유롭게 선택하면 된다. 그리고 필수적으로 참여하는 개체가 있다면 그 개체에 해 당하는 릴레이션에 외래키를 포함시키면 된다.
- 규칙 4-3 : 모든 개체가 일대일 관계에 필수적으로 참여하면 릴레이션 하나로 합친다.
- 일대일 1:1 관계를 맺고 있는 두 개체가 모두 관계에 필수적으로 참여한다면 그만큼 관련성이 있는 개체라는 의미다. 그러므로 두 개체에 해당하는 두 릴레이션을 하나로 합쳐 표현한다. 관계의 이름을 릴레이션의 이름으로 사용하고, 관계에 참여하는 두 개체의 속성들도 관계 릴 레이션에 모두 포함시킨다. 그리고 두 개체 릴레이션의 키 속성을 조합하여 관계 릴레이션의 기본키로 지정한다.
- 규칙 5 : 다중 값 속성은 릴레이션으로 변환한다.
- 관계 데이터 모델의 릴레이션에서는 다중 값을 가지는 속성을 허용하지 않는다. 그러므로 E-R 다이어그램에 있는 다중 값 속성은 그 속성을 가지고 있는 개체에 해당하는 릴레이션이 아닌 별도의 릴레이션을 만들어 포함시킨다.
- 새로 만들어진 릴레이션에는 E-R 다이어그램에서 다중 값 속성으로 표현된 속성뿐 아니라 그 속성을 가지고 있는 개체에 해당하는 릴레이션의 기본키를 가져와 포함시키고 이를 외래키로 지정한다.
- 새로 만들어진 릴레이션의 이름은 자유롭게 정하고, 기본키는 다중 값 속성과 외래키를 조합하여 지정한다.
기타 고려 사항
- 기본 변환 규칙에서는 n:m 관계만 릴레이션으로 변환하였지만 1:1, 1:n 관계도 릴레이션으로 변환할 수 있다. 특히, 속성이 많은 관계는 관계 유형에 상관없이 릴레이션으로 변환하는 것을 고려할 수 있다.
- n:m 외의 관계를 릴레이션으로 변환해도 된다. 하지만 그럴 경우 생성되는 릴레 이션의 개수가 많아져 릴레이션을 관리해야 하는 DBMS의 부담이 커지게 된다. 그러므로 릴레이션의 개수가 불필요하게 늘어나지 않도록, 외래키만으로도 표현이 가능한 1:1이나 1 : N 관계는 릴레이션으로 변환하지 않는 것이 좋다.
릴레이션 스키마 변환 규칙을 이용한 논리적 설계
- 논리적 설계를 위해 E-R 다이어그램을 릴레이션 스키마로 변환할 때는 변환 규칙을 순서대로 적용하면 된다.
물리적 설계와 구현
- 물리적 설계 단계에서는 하드웨어나 운영체제의 특성을 고려하여 필요한 인덱스의 구조나 내부 저장 구조, 접근 경로 등에 대한 물리적인 구조를 설계한다.
- 마지막으로 DBMS를 이용해 SQL 문을 작성하고 이를 실행시켜서 데이터베이스를 실제로 생성하면 데이터베이스 개발이 완료된다.
Q & A
본 도서의 내용을 정리한 것이 아닌 학습 스터디를 위해 제가 작성한 질답입니다.
사실과 다른 내용이 있다면 지적 부탁드립니다 :)
Q1 : 데이터베이스 설계 단계에서 개념적 설계 순서에 대해 알려주세요.
개체와 속성 추출 -> 관계 추출 -> E-R 다이어그램 작성 순서로 진행합니다.
Q2 : 데이터베이스 설계 단계인 논리적 설계 단계에서 n : m 외의 관계를 릴레이션으로 변환해도 되는지 알려주세요.
n:m 외의 관계를 릴레이션으로 변환해도 되지만, 그럴 경우 생성되는 릴레 이션의 개수가 많아져 릴레이션을 관리해야 하는 DBMS의 부담이 커지게 된다. 그러므로 릴레이션의 개수가 불필요하게 늘어나지 않도록, 외래키만으로도 표현이 가능한 1:1이나 1 : N 관계는 릴레이션으로 변환하지 않는 것이 좋습니다.
출처 : 김연희, 데이터베이스 개론 3판, 한빛아카데미(2022)