Database

[데이터베이스 개론] Chapter8 - 데이터베이스 설계

로승리 2023. 5. 13. 04:20

데이터베이스 설계 단계

  • 조직 구성원들의 다양한 요구에 알맞은 데이터베이스를 구축하기 위해서는 데이터베이스 설계가 중요하다.
  • 관계 데이터 모델을 기반으로 두고 데이터베이스를 설계할 때는 E-R 모델과 릴레이션 변환 규칙을 이용한 설계 방법과 정규화를 이용한 설계 방법을 사용한다.

 

요구사항 분석

  • 요구사항 분석 단계에서는 데이터베이스에 대한 사용자들의 요구 사항을 수집하고 분석하여, 개발할 데이터베이스의 용도를 명확히 파악하는 것이 목적이다.
  • 요구 사항 분석 단계는 사용자가 요구하는 데이터베이스의 용도가 결정되는 단계이기 때문에 품질 좋은 데이터베이스를 개발하기 위해 가장 중요한 단계이다.
  1. 데이터베이스를 사용할 주요 사용자의 범위부터 결정한다.
  2. 사용자가 조직에서 수행하는 업무를 분석한다.
  3. 수집된 요구 사항을 다각도로 분석한 뒤 분석 결과를 요구 사항 명세서로 문서화한다.

개념적 설계

  • 개념적 설계 단계의 주요 작업은 요구 사항 분석 결과를 기반으로 현실 세계에서 중요한 데이터 요소인 개체를 추출한 후 개체 간의 관계를 결정하여 이를 E-R 다이어그램으로 표현하는 것이다.
  • 개념적 설계 단계에서 사용자의 요구 사항을 개념적 데이터 모델로 변환하는 작업을 개념적 모델링이라고 한다.
  • E-R 다이어그램과 같이 개념적 데이터 모델로 표현된 개념적 설계의 결과물을 개념적 구조 또는 개념적 스키마라고 한다.

개체와 속성 추출

  • 개념적 설계 단계에서 가장 먼저 수행해야 하는 기본 작업은 요구 사항 분석 단계의 결과물에서 개체를 추출하는 일이다.
  • 개체는 저장할 만한 가치가 있는 중요 데이터를 지닌 사람이나 사물 등이며, 개념적 모델링을 하는 데 가장 중요한 요소다.
  1. 제시된 요구 사항의 문장들에서 명사를 찾는다.
  2. 일반적이고 광범위한 의미의 명사는 제외하고, 의미가 같은 명사가 여러 개면 대표 명사 하나만 선택한다.
  3. 개체가 아닌 속성으로 분류되는 단어도 존재하기 때문에 찾아낸 명사를 개체와 속성으로 정확히 분류하는 작업이 필요하다.
  4. 찾아낸 개체에 박스를 치고 속성에는 밑줄을 그어 표시한다.

관계 추출

  • 관계는 개체 간의 의미 있는 연관성이다.
  • 일반적으로 관계는 요구 사항을 표현한 문장에서 동사로 표현된다.
  • 개체 간의 연관성을 의미 있게 표현한 동사만 선택하고 의미가 같은 동사가 여러 개이면 대표 동사 하나만 선택한다.
  • 관계를 추출한 후에는 추출한 관계에 대한 매핑 카디널리티와 참여 특성을 결정한다.
  • 매핑 카디널리티를 기준으로 추출한 관계를 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)