데이터 베이스 요약 - 5. 데이터베이스 설계와 ER 모델
5. 데이터베이스 설계와 ER 모델
데이터베이스 설계는 개념적 데이터베이스 설계와 물리적 데이터베이스 설계로 구분.
개념적 데이터베이스 설계는 조직체(실세계)의 엔티티, 관계, 프로세스, 무결성 제약조건 등을 나타내는 추상화 모델을 구축.
- 엔티티는 서로 구분이 되면서, 조직체에서 데이터베이스에 나타내려는 객체(사람, 장소, 사물 등)
- 관계는 두 개 이상의 엔티티들 간의 연관을 나타냄
- 프로세스는 관련된 활동을 나타냄
- 무결성 제약조건은 데이터의 정확성과 비즈니스 규칙을 의미
물리적 데이터베이스 설계에서는 물리적인 저장 장치와 접근 방식을 다룸.
개념적 수준의 모델은 특정 데이터 모델과 독립적으로 응용 세계를 모델링 할 수 있도록 함. 데이터베이스 구조나 스키마를 하향식으로 개발할 수 있기 위한 틀(framework)을 제공함.
엔티티-관계(ER, Entity-Relationship) 모델 등이 있으며, 개념적인 데이터 모델이 사상될 수 있는 다수의 구현 데이터 모델(implementation data model; 관계 데이터 모델 등)이 존재함.
5.1. 데이터베이스 설계의 개요
조직체의 운영과 목적을 지원하기 위해 데이터베이스를 생성하는 과정. 응용과 사용자들이 요구하는 데이터, 데이터 간의 관계를 표현하는 것.
요구사항 분석, 개념적 설계, DBMS의 선정, 논리적 설계, 스키마 정제, 물리적 설계와 튜닝 등으로 이루어짐.
(1) 요구사항 수집과 분석: 요구사항에 관한 지식을 기반으로 관련 있는 엔티티들, 이들의 애트리뷰트들, 엔티티들 간의 관계 등을 파악함. 또한 데이터 처리에 관한 연산, 연산들의 의미, 접근하는 데이터의 양 등을 분석함.
(2) 개념적 설계: 조직체에서 사용되는 정보의 모델을 구축하는 과정. 사용자들의 요구사항 명세로부터 개념적 스키마가 만들어짐. 엔티티 타입, 관계 타입, 애트리뷰트들을 식별한 후 도메인을 결정하고, 후보 키와 기본 키를 결정함.
(3) DBMS 선정: 기술적 요인(DBMS의 데이터 모델, 인터페이스, 제공되는 서비스 등)과 경제적 요인(구입 비용, 유지 보수 비용 등)을 고려.
(4) 논리적 설계: 선택한 DBMS의 데이터 모델을 사용하여 논리적 스키마(외부 스키마도 포함)를 생성함. 예를 들어, ER 모델로 표현된 개념적 스키마를 관계 데이터 베이스 스키마로 사상함. 또한 더 좋은 스키마로 변환하기 위해서 정규화 과정을 적용함.
(5) 물리적 설계: 요구사항들을 만족시키기 위해 저장 구조와 접근 경로 등을 결정함. 성능상의 주요 기준에는 여러 가지가 있음.
- 응답 시간
- 트랜잭션 처리율
- 전체 데이터베이스에 대한 보고서 생성 시간
(6) 트랜잭션 설계: 요구사항 수집과 분석 후에, 데이터베이스 설계 과정과 별도로 트랜잭션 설계를 할 수 있음. 트랜잭션은 데이터베이스에서 동작할 응용 프로그램(검색, 갱신 등). 데이터베이스 스키마는 트랜잭션에서 요구하는 정보를 포함해야 함.
5.2. ER 모델
EER(Enhanced Entity Relationship) 모델이 데이터베이스 설계 과정에 사용될 수 있음. 개념적 설계를 위한 모델로서, 많은 CASE 도구들에서 지원됨. 실세계를 엔티티, 애트리뷰트, 엔티티들 간의 관계로 표현.
엔티티는 사람, 장소, 사건등과 같이 독립적으로 존재하면서 고유하게 식별이 가능한 실세계의 객체. 사원처럼 실체가 있는 것, 개념과 같이 추상적인 것이 있음.
엔티티들은 엔티티 타입(또는 엔티티 집합)들로 분류됨.
엔티티 타입은 동일한 애트리뷰트들을 가진 엔티티들의 틀. 엔티티 타입은 관계 모델 릴레이션의 스키마에 해당.
엔티티 집합은 동일한 애트리뷰트들을 가진 엔티티들의 모임. 엔티티 집합은 관계 모델 릴레이션의 인스턴스에 해당.
엔티티 집합과 엔티티 타입을 엄격하게 구분할 필요는 없음. ER 다이어그램에서 엔티티 타입은 직사각형으로 나타냄.
강한 엔티티 타입(정규 엔티티 타입)은 키 애트리뷰트를 사용하여 고유하게 엔티티들을 식별할 수 있는 엔티티 타입.
약한 엔티티 타입은 키를 형성하기에 충분한 애트리뷰트들을 갖지 못한 엔티티 타입. ER 다이어그램에서 이중선 직사각형으로 표기.
약한 엔티티 타입이 식별되기 위해서는 소유 엔티티 타입(owner entity type)이 제공한 키 애트리뷰트를 결합해야함. 약한 엔티티 타입의 부분 키는 점선 밑줄을 그어 표시
하나의 엔티티는 연관된 애트리뷰트들의 집합으로 설명됨.
키 애트리뷰트는 엔티티 타입 내에서 각 엔티티를 고유하게 식별함. ER 다이어그램에서 기본 키에 속하는 애트리뷰트는 밑줄을 그어 표시함.
요구사항 명세에서 명사나 형용사로 표현됨. ER 다이어그램에서 타원형으로 나타냄. 애트리뷰트와 엔티티 타입은 실선으로 연결.
(1) 단순 애트리뷰트(simple attribute)는 다른 애트리뷰트로 나눌 수 없는 애트리뷰트. ER 다이어그램에서 대부분의 애트리뷰트는 단순 애트리뷰트.
(2) 복합 애트리뷰트(composite attribute)는 두 개 이상의 애트리뷰트로 이루어진 애트리뷰트.
(3) 단일 값 애트리뷰트(single-valued attribute)는 엔티티마다 하나의 값을 갖는 애트리뷰트(예: 어떤 사원도 두 개 이상의 사원번호를 갖지 않는 것). ER 다이어그램에서 대부분의 애트리뷰트는 단일 값 애트리뷰트.
(4) 다치 애트리뷰트(multi-valued attribute)는 엔티티마다 여러 개의 값을 가질 수 있는 애트리뷰트. ER 다이어그램에서 이중선 타원으로 표현함.
(5) 저장된 애트리뷰트(stored attribute)는 다른 애트리뷰트와 독립적으로 존재하는 애트리뷰트. ER 다이어그램에서 대부분의 애트리뷰트는 저장된 애트리뷰트 (예: 사원 엔티티 타입에서 사원이름은 다른 애트리뷰트와 독립적).
(6) 유도된 애트리뷰트(derived attribute): 다른 애트리뷰트의 값으로부터 얻어진 애트리뷰트. 릴레이션의 애트리뷰트로 포함시키지 않는 것이 좋음. ER 다이어그램에서 점선 타원으로 표현함.
관계는 엔티티들 사이에 존재하는 연관이나 연결로서 두 개 이상의 엔티티 타입들 사이의 사상으로 생각할 수 있음. 요구사항 명세에서 흔히 동사는 ER 다이어그램에서 관계로 표현됨.
ER 다이어그램에서 다이어몬드로 표기. 관계 타입이 서로 연관시키는 엔티티 타입들을 관계 타입에 실선으로 연결함.
관계 타입은 관계의 특징을 기술하는 애트리뷰트들을 가질 수도 있음. 이는 키 애트리뷰트를 갖지 않음.
차수(degree)는 관계로 연결된 엔티티 타입들의 개수를 의미. 흔한 관계는 두 개의 엔티티 타입을 연결하는 2진 관계.
카디날리티 비율은 한 엔티티가 참여할 수 있는 관계의 수를 나타냄. 관계를 1:1, 1:N, M:N 으로 구분. 카디날리티에 관한 정보는 간선 위에 나타냄.
(1) 1:1 관계: A의 각 엔티티가 정확하게 B의 한 엔티티와 연관되고, B의 각 엔티티가 정확하게 A의 한 엔티티와 연관된 관계.
(2) 1:N 관계: A의 각 엔티티가 B의 임의의 개수의 엔티티와 연관되고, B의 각 엔티티는 정확하게 A의 한 엔티티와 연관된 관계. 실세계에서 흔히 나타나는 관계.
(3) M:N 관계: 한 엔티티 타입에 속하는 임의의 개수의 엔티티가 다른 엔티티 타입에 속하는 임의의 개수의 엔티티와 연관됨.
카디날리티 비율의 최소값과 최대값은 ER 다이어그램에서 관계 타입과 엔티티 타입을 연결하는 실선 위에 (min,max) 형태로 표기.
- min은 각 엔티티는 적어도 min번 관계에 참여함을 의미
- max는 각 엔티티는 최대한 max번 관계에 참여함을 의미
- min=0은 어떤 엔티티가 반드시 관계에 참여해야 할 필요는 없음을 의미
- max=*는 어떤 엔티티가 관계에 임의의 수 만큼 참여할 수 있음을 의미
역할(role)은 관계 타입의 의미를 명확하게 하기 위해 사용됨. 특히, 하나의 관계 타입에 하나의 엔티티 타입이 여러 번 나타나는 경우에는 반드시 역할을 표기해야 함. 관계 타입의 간선 위에 표시.
전체 참여는 어떤 관계에 한 엔티티 타입의 모든 엔티티만 참여하는 것.
부분 참여는 어떤 관계에 한 엔티티 타입의 일부 엔티티만 참여하는 것.
약한 엔티티 타입은 항상 관계에 전체 참여.
전체 참여는 ER 다이어그램에서 이중 실선으로 표시. 카디날리티 비율과 함께 참여 제약조건은 관계에 대한 중요한 제약조건.
다중 관계: 두 엔티티 타입 사이에 두 개 이상의 관계 타입이 존재할 수 있음.
순환적 관계: 하나의 엔티티 타입이 동일한 관계 타입에 두 번 이상 참여하는 것.
ER 스키마를 작성하기 위한 지침.
- 다치 애트리뷰트는 엔티티로 분류해야 함
- 가능한 한 복합 식별자를 피함
데이터베이스 설계 과정.
- 응용의 요구사항을 수집하여 기술
- 응용과 연관이 있는 엔티티 타입들을 식별
- 응용과 연관이 있는 관계 타입들을 식별
- 1:1, 1:N, M:N 관계를 결정
- 필요한 애트리뷰트들을 식별하고, 각 애트리뷰트가 가질 수 있는 값들의 집합을 식별
- 기본 키를 식별
- 응용을 위한 ER 스키마 다이어그램을 그림
- ER 스키마 다이어그램이 요구사항과 부합되는지 검사
- ER 스키마 다이어그램을 DBMS이 사용하는 데이터베이스 모델로 변환
많은 애트리뷰트가 엔티티 타입에 연결된 다이어그램을 나타내려면 불편하고 공간을 많이 차지하기에 다른 표기법을 사용.
CASE 도구들에서는 새발(crow-feet) 표기법 및 변형들이 흔히 사용됨.
5.3. 데이터베이스 설계 사례
5.4. ER 스키마를 관계 모델의 릴레이션으로 사상
논리적 설계 단계에서는 E R스키마를 관계 데이터 모델의 릴레이션들로 사상함.
ER 스키마에는 엔티티 타입과 관계 타입이 존재하지만, 관계 데이터베이스에는 이들을 구분하지 않고 릴레이션들만 있음.
ER-관계 사상 알고리즘
단계 1: 정규 엔티티 타입과 단일 값 애트리뷰트
- ER 스키마의 각 정규 엔티티 타입 E에 대해 하나의 릴레이션 R을 생성함
- E에 있던 단순 애트리뷰트들을 릴레이션 R에 모두 포함시킴
- E에서 복합애트리뷰트는, 이를 구성하는 단순 애트리뷰트들만 릴레이션R 에 포함시킴
- E의 기본 키가 릴레이션 R의 기본 키가 됨
단계 2: 약한 엔티티 타입과 단일 값 애트리뷰트
- 각 약한 엔티티 타입 W에 대하여 릴레이션 R을 생성함
- W에 있던 모든 단순 애트리뷰트들을 릴레이션 R에 포함시킴
- 소유 엔티티 타입의 기본 키를 약한 릴레이션 R에 외래 키로 포함시킴
- 릴레이션 R의 기본 키는 약한 엔티티 타입의 부분 키와 소유 엔티티 타입에 해당하는 릴레이션을 참조하는 외래 키의 조합
단계 3: 2진 1:1 관계 타입
- 각 2진 1:1 관계 타입 R에 대하여, R에 참여하는 엔티티 타입에 대응되는 릴레이션 S와 T를 찾음
- S 와 T 중에서 한 릴레이션을 선택한다. 만약 S를 선택했다면 T의 기본 키를 S에 외래 키로 포함시킴
- S 와 T 중에서 관계 타입에 완전하게 참여하는 릴레이션을 S의 역할을 하는 릴레이션으로 선택함
- 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트들을 S에 대응되는 릴레이션에 포함시킴
- 두 엔티티 타입이 관계 타입 R에 완전하게 참여할 때는 이들을 하나의 릴레이션으로 합칠 수 있음
단계 4: 정규 2진 1:N 관계 타입
- 정규 2진 1:N 관계타입 R에 대하여, N측의 엔티티 타입에 대응되는 릴레이션 S를 찾음
- 1측의 엔티티 타입에 대응되는 릴레이션 T의 기본 키를 릴레이션 S에 외래 키로 포함시킴
- 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트들을 릴레이션 S에 포함시킴
단계 5: 2진 M:N 관계 타입
- 2진 M:N 관계 타입 R에 대해서 릴레이션 R을 생성함
- 참여한 엔티티 타입의 기본 키를 릴레이션 R에 외래 키로 포함시킴. 이들의 조합이 릴레이션 R의 기본 키가 됨
- 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트들을 릴레이션 R에 포함시킴
단계 6: 3진 이상의 관계 타입
- 3진 이상의 각 관계 타입 R에 대한 릴레이션 R을 생성함
- 관계 타입 R에 참여하는 모든 엔티티 타입의 기본 키를 릴레이션 R에 외래 키로 포함시킴
- 관계 타입 R이 가지고 있는 모든 단순 애트리뷰트을 릴레이션 R에 포함시킴
- 일반적으로 외래 키들의 조합이 릴레이션 R의 기본 키가 됨
- 카디날리티가 1:N:N이면 카디날리티가 1인 릴레이션의 기본 키를 참조하는 외래 키를 제외한 나머지 외래 키들의 조합이 릴레이션 R의 기본 키가 됨
단계 7: 다치 애트리뷰트
- 각 다치 애트리뷰트에 대한 릴레이션 R을 생성함
- 다치 애트리뷰트를 릴레이션 R에 포함시키고, 다치 애트리뷰트를 갖는 엔티티 타입이나 관계 타입의 기본 키를 릴레이션 R에 외래 키로 포함시킴
- 릴레이션의 R의 기본 키는 다치 애트리뷰트와 외래 키의 조합
댓글남기기