데이터베이스 설계
사용자의 요구 사항을 고려하여 데이터베이스를 생성하는 과정으로 5단계로 나눌 수 있다.
먼저 1단계는 요구 사항 분석 단계로 데이터베이스의 용도를 파악하고, 이를 요구사항 명세서로 나타낸다. 2단계는 개념적 설계 단계로 DBMS에 독립적인 개념적 구조를 설계하는 단계이다. 개념적 스키마, 즉 E-R 다이어그램이 그 결과물로 나타나야 한다. 3단계는 논리적 설계로 DBMS에 적합한 논리적 구조를 설계한다. 논리적 스키마가 그 결과물로 나와야 하며, 대부분 사용하는 관계 데이터베이스라면 릴레이션 스키마가 그 결과물이다. 여기까지가 핵심 단계이다. 4단계는 물리적 설계 단계로 DBMS로 구현 가능한 물리적 구조를 설계한다. 이를 통해 물리적 스키마가 결과물로 나와야 한다. 5단계는 구현으로 SQL 문을 통해 DBMS에 실제 데이터베이스를 만드는 단계이다.
요구 사항 분석
사용자의 요구 사항을 수집 및 분석하여 개발할 데이터베이스의 용도를 보다 명확히 해야 한다. 결과물로 요구사항 명세서가 나와야 한다.
요구사항 명세서는 정해진 양식이 있는 것은 아니지만, 개요, 포괄적 요구사항, 구체적 요구사항, 중요도, 용어사전 정도를 생각해두면 편하다.
개념적 설계
DBMS에 독립적인 개념적 스키마를 설계한다. 일반적으로 E-R 다이어그램을 많이 사용한다.
작업은 먼저 개체 및 개체의 속성과 키를 선별한다. 그 후 각 개체 간 관계를 결정한다. 마지막으로 정의된 개체와 관계를 E-R 다이어그램으로 나타내면 된다.
개체 및 속성은 요구사항 명세서에서 추출하는데 저장할 만한 가치가 있는 중요 데이터가 그 대상이다. 예를 들어 병원 데이터베이스라면 환자, 의사, 간호사 등과 병실, 수술실, 의료 장비 등이 있다. 관리 수준에 따라 속성으로 분류될 수도 있으므로 이를 잘 고려해야 한다. 일반적으로 명사를 찾아서 뽑으면 개체나 속성인 경우가 많다.
E-R 다이어그램으로 정리하기 편하게 표로 나타내던가, 미리 E-R 다이어그램으로 그려놓으면 된다.
관계는 개체 간 의미있는 연관성을 요구사항 명세서에서 추출한다. 일반적으로 동사를 찾아서 뽑으면 관계인 경우가 많다. 관계의 속성도 같이 추출한다.
찾아낸 관계에 대해 매핑 카디널리티와 참여 특성을 결정해야 하고, 이 후 E-R 다이어그램으로 나타내는데, 앞서 개체 및 속성을 E-R 다이어그램으로 나타내었다면 그 위에 추가하면 되겠다.
논리적 설계
다양한 DBMS가 있으므로 그에 적합한 논리적 스키마를 설계한다. 관계 데이터 모델이 많이 사용되므로 보통의 경우 릴레이션 스키마로 만들게 된다.
E-R 다이어그램을 릴레이션 스키마로 변환할 때는 다음 규칙을 참고하면 좋다.
- 모든 개체는 릴레이션으로 변환한다.
- 다대다 관계는 릴레이션으로 변환한다.
- 일대다 관계는 외래키로 표현한다.
- 일대일 관계는 외래키로 표현한다.
- 다중값 속성은 릴레이션으로 변환한다.
변환 규칙은 순서대로 적용하되 해당되지 않는 규칙은 제외한다.
개체를 릴레이션으로 변환할 때는 당연하지만, 개체 이름을 릴레이션 이름으로, 개체 속성을 릴레이션 속성으로, 개체 키 속성을 릴레이션 기본키로 변환한다. 개체 속성이 복합속성이라면 복합속성을 구성하는 단순속성만 릴레이션 속성으로 변환한다.
다대다 관계를 릴레이션으로 변환할 때는 관계 이름을 릴레이션 이름으로, 관계 속성을 릴레이션 속성으로, 관계에 참여하는 개체를 릴레이션으로 변환하고 개체가 변환된 릴레이션의 기본키를 관계 릴레이션에 포함하여 외래키로 지정, 이 외래키들을 조합하여 관계 릴레이션의 기본키로 설정한다.
일대다 관계는 카디널리티가 1인 개체 릴레이션의 기본키를 카디널리티가 n인 개체 릴레이션에 외래키로 포함시키고, 관계 속성 역시 n인 개체 릴레이션에 포함시킨다. 만약 약한 개체가 참여하는 일대다 관계라면 외래키를 포함하여 기본키로 설정한다.
일대일 관계는 외래키로 표현하는데, 일반적인 관계에서는 외래키를 서로 주고 받는다. 단 필수적으로 참여하는 관계가 있다면 해당 개체의 릴레이션만 외래키를 받는다. 예를 들어 회사와 CEO가 일대일 관계이고, CEO는 반드시 회사에 참여해야 한다면 CEO 릴레이션에 회사의 기본키가 외래키로 포함되어야 하며, 관계가 가지던 속성 역시 CEO 릴레이션에 포함된다. 단 모든 관계가 필수 참여라면 관계 및 개체를 하나의 릴레이션으로 합친다.
다중값 속성은 릴레이션으로 변환하고, 해당 속성을 가지고 있던 개체 릴레이션의 기본키를 외래키로 가져와 다중값 속성과 조합하여 기본키로 사용한다.
모든 관계를 릴레이션으로 변환할 수 있기 때문에 위 사항을 고려하되 외래키가 아니라 릴레이션으로 변환하는 것이 더 효율적이라 판단되면 릴레션으로 변환하여 사용한다.
개체가 자기 자신과 관계 맺는 순환 관계 역시 기본 규칙을 그대로 적용하면 된다.
그 외 데이터 타입, 널 허용 여부, 기본값, 제약조건 등은 테이블 명세서를 통해 작성한다.
'Computer Science and Engineering > Database' 카테고리의 다른 글
[DB] 인덱스(index) (0) | 2025.06.02 |
---|---|
[DB] B-트리(B-tree) (0) | 2025.06.02 |
[DB] 관계 데이터 연산(relational data operator) (0) | 2025.04.03 |
[DB] 관계 데이터 모델(relation data model) (0) | 2025.04.01 |
[DB] 데이터 모델링(data modeling) 및 표기법(notation) (0) | 2025.03.26 |