반응형

릴레이션 스키마 변환 규칙

E-R 다이어그램에 표현된 개체와 관계는 릴레이션으로 표현하는 방법과 다르다. 그래서 릴레이션 스키마로 변환할 때 규칙을 적용한다.

 

더 완벽하게 데이터베이스를 설계하기 위해 다섯 가지 규칙을 적용하여 릴레이션 스키마를 설계해보자.

 

모든 개체는 릴레이션으로 변환한다.

E-R 다이어그램의 각 개체를 하나의 릴레이션으로 변환한다. 개체의 이름을 릴레이션의 이름으로 하고, 개체가 가진 속성도 릴레이션의 속성으로 그대로 변환한다. 이 때 개체가 가지고 있는 속성이 복합 속성(ex 주소 : 우편번호, 기본주소, 상세주소 등으로 여러개의 속성을 가짐 인 경우에는 복합 속성을 구성하고 있는 단순 속성만 릴레이션의 속성으로 변환한다. 개체가 가지고 있는 키 속성은 릴레이션의 기본키로 변환한다.

 

즉, E-R 다이어그램에 있는 사각형인 개체는 하나의 릴레이션으로, 개체에 연결되어 있는 속성들은 해당 릴레이션의 속성으로 변환한다. 그리고 키 속성을 인수인계한다.

 

다대다 (n:m) 관계는 릴레이션으로 변환한다.

E-R 다이어그램에 있는 다대다 관계를 하나의 릴레이션으로 변환한다. 관계의 이름을 릴레이션의 이름으로 한다. 즉, 고객과 상품 사이에는 주문이라는 관계가 존재한다. 이는 고객이 여러개의 상품도 주문할 수 있고 여러명의 고객이 하나의 상품을 주문할 수 도 있기 때문에 다대다 관계이다. 이는 관계의 이름을 그대로 가져와 주문 릴레이션으로 변환하고, 주문 관계의 속성들을 그대로 릴레이션의 속성으로 변환한다.  그 후, 관계에 연결된 개체들의 기본키를 가져와 외래키로 지정하고 그 외래키들을 조합해 릴레이션의 기본키로 지정한다.

 

일대다 (1:n) 관계는 외래키로 변환한다.

E-R 다이어그램에 있는 일대다 관계는 릴레이션으로 변환하지 않고 외래키로만 표현한다. 단, 약한 개체가 참여하는 일대다 관계는 일반 개체가 참여하는 경우와 다르게 처리해야하므로 2개의 세부 규칙으로 나누어서 적용한다. 

 

 ※ 일반적인 일대다 관계는 외래키로 표현한다. 

  - 예를 들면 공급이라는 관계에 속해있는 제조업체와 상품이라는 개체가 있다면 다측 즉, 상품 개체에 있는 속성의 외래키로 1측인 공급업체의 기본키인 업체명을 포함한다.

 

 ※ 약한 개체가 참여하는 일대다 관계는 외래키를 포함하여 기본키로 지정한다.

  - 비행기라는 개체와 좌석이라는 개체가 있을때 비행기가 없으면 좌석이 존재하지 않으므로 좌석은 약한 개체이다. 이 때는 1측에 해당하는 비행기의 기본키인 비행기 번호를 다측인 좌석의 기본키에 외래키로써 포함해야한다. 즉 좌석 릴레이션의 좌석번호, 비행기 릴레이션의 비행기 번호가 좌석릴레이션의 기본키에 포함되어야한다. 

 

일대일 (1:1) 관계는 외래키로 변환한다.

 일반적인 일대일 관계는 릴레이션으로 변환하지 않고 외래키로만 표현한다. 예를들어 혼인이라는 관계를 가지는 남자라는 개체와 여자라는 개체가 있다면 배우자의 식별번호가 개체에 외래키로 포함 되어야 한다. 하지만 남자 릴레이션과 여자 릴레이션이 외래키를 모두 가지면 데이터 중복이 발생해서 불필요한 낭비가 생긴다. 이 때는 일대일 관계에 필수적으로 참여하는 개체의 릴레이션만 외래키를 받고, 만약 모든 개체가 일대일 관계에 필수적으로 참여 한다면 릴레이션 하나로 합치는 것이 바람직하다. 

 

다중 값 속성은 릴레이션으로 변환한다.

관계 데이터 모델의 릴레이션에서는 다중 값을 가지는 속성을 허용하지 않는다. 그러므로 E-R 다이어그램에 있는 다중 값 속성으로 별도의 릴레이션을 만들어 포함시키고 그 속성을 가진 개체의 기본키를 외래키로 포함시키고 기본키는 다중 값 속성과 외래키를 조합한다. 

 

기타

다대다 관계만 릴레이션으로 변환했지만 반드시 그럴 필요는 없다. 일대일, 일대다 관계도 릴레이션으로 변환할 수 있다. 특히, 속성이 많은 관계는 유형에 상관없이 릴레이션으로 변환하는 것이 바람직한 경우도 많다. 릴레이션의 개수가 너무 많아져 관리해야하는 DBMS의 부담이 커지지 않게 꼭 필요한 관리를 하는 것이 역량인듯 하다.

[출처] https://jaehoney.tistory.com/11

728x90

'[개발관련] > 분석, 설계' 카테고리의 다른 글

데이터베이스 설계  (0) 2022.06.10
반응형

1. 데이터베이스 설계 개요

가) 데이터베이스 설계 정의

- 사용자 요구조건 에서부터 데이터베이스 구조를 도출해 내는 과정

- 데이터들을 효과적으로 관리하기 위하여 데이터베이스의 구조를 조직화하는 작업

나) 데이터베이스 설계 목적

- 이해관계자의 데이터 관점 요구사항에 대한 정확한 이해 및 추상화

- 데이터를 중심으로 한 이해관계자 간의 원활한 의사소통 수단

- 데이터 중심의 분석방법

다) 데이터베이스 설계 시 고려사항

항목
설명
제약조건
저장된 데이터 값이 만족해야 될 주어진 조건
데이터베이스 무결성
갱신, 삽입, 삭제 등의 연산이 수행된 뒤에도 데이터 값은 제약조건을 만족해야하는 조건
일관성
저장된 두 데이터 값 또는 특정 질의에 대한 응답들에 모순성 없이 일치하는 특성
회복
시스템에 장애가 발생했을 때 장애 발생 직전의 일관된 데이터 상태로 돌아가는 기법
보안
불법적인 데이터의 변경이나 손실 또는 노출에 대한 보호
효율성
응답 시간의 단축, 저장공간의 최적화, 시스템 생산성이 포함
데이터베이스 확장성
시스템 운영에 영향을 주지 않으면서 새로운 데이터를 계속적으로 추가 가능한 기법

2. 데이터베이스 설계 개념도 및 설계 단계

가) 데이터베이스 설계 개념도

- 개념적 설계 => 논리적 설계 => 물리적 설계

- Entry 목록 및 정의서, Relation 목록, ERD가 공통 주요 산출물

나) 데이터베이스 설계 단계별 특성

단계
주요관점
설명
요구조건 분석
문서화
- 개체, 속성, 관계, 제약조건과 같은 정적정보 구조
- 트랜잭션 유형, 트랜잭션 실행빈도와 같은 동적 DB 처리 요구조건
- 기관의 경영목표, 정책 및 규정과 같은 기관적 제약조건
개념적 설계
현실세계 추상화
- 현실세계를 데이터관점으로 추상화 단계
- DBMS를 고려하지 않는 독립적 설계
- 데이터베이스의 개념적 스키마 (E-R다이어그램) 구성
논리적 설계
데이터모형기반 설계
- 특정 데이터모델(계층형, 관계형, 객체지향형 등)을 적용한 설계
- 사용 할 DBMS 특성을 고려한 설계
- 데이터베이스의 논리적 스키마 (릴레이션 스키마) 생성
물리적 설계
DBMS기반 설계
- 특정 DBMS의 물리적 구조와 내부적인 저장구조, 분산형태, 데이터타입의 특징, 인덱스의 특징 등을 구체화하는 설계단계
- 오브젝트, 접근방법, 트랜잭션분석, 인덱스, 뷰, 데이터베이스 용량설계 등을 수행
- 데이터베이스의 물리적 스키마 생성 (하드웨어/운영체제 특성 고려)

3. 데이터베이스 요구사항 수집 및 분석

가) 데이터베이스 요구사항 수집 및 분석 항목

항목
설명
요구조건 수집
- 데이터베이스를 사용하는 주요 분야와 사용자 그룹을 식별
- 식별된 그룹들의 업무, 데이터 종류, 용도, 처리형태, 흐름 및 제약/요구조건 수집
- 트랜잭션에 대한 입력과 출력 데이터 식별
- 설문지/인터뷰 및 회의롤 통해 도출하고 문서화 진행
제약조건 식별
- 경영정책, 내/외부적 환경, 조직의 정보전략을 연구/분석하여 요구조건 명세에 반영
- 반영된 요구조건 명세는 데이터베이스 설계 범위를 결정짓는 중요 요소로 활용
명세 작성
- 관련 데이터 요소, 트랜잭션, 처리 특성에 대한 명세 포함
- 빈번한 변경을 방지하여 안정적인 개발 환경조성
- 작업-데이터 관계, 데이터 요소간 제약조건, 유일성 및 함수 종속성 명세 포함
명세 검토
- 정보 처리 요구조건을 조직하여 표현하기 위한 소프트웨어 공학기법 사용
- 사용자 그룹과 다시 검토하고 확인 한 뒤 최종 시스템 명세로 확정
명세검토
활용 기법
소프트웨어 공학
- HIPO, SADT, DFD, Orr-Warnier, Nassi-Schneiderman
- 정보 처리 요구조건을 조직하여 표현하기 위한 다이어그램 방식
프로그램 활용
(PSL/PSA)
- 명세에 대한 일관성과 완전성을 검사하기 위한 자동화 도구 활용
- 요구조건을 설계 데이터베이스에 저장하여 설계 과정동안 활용

4. 데이터베이스 개념적 설계

가) 개념적 설계 정의 및 특징

- 요구사항 분석 결과를 개념적인 데이터 모델(E-R 모델)을 사용하여 고차원적인 표현 기법으로 기술하는 방식

- DBMS를 고려하지 않는 독립적 설계

- 데이터베이스의 개념적 스키마 (E-R다이어그램) 구성

나) 개념적 스키마 설계 과정

개체와 속성 추출
- 요구사항 분석단계에서 개체와 속성을 추출하는 일
관계 추출
- 개체간의 의미있는 연관성이며, 추출한 관계의 매핑 카디널리티를 기준으로하여 관계(1:1, 1:N, N:M) 결정
- 개체가 관계에 필수적 참여인지 또는 선택적 참여인지를 구분짓는 참여특성을 결정
E-R 다이어그램 작성
- 요구 사항 명세서에서 추출한 개체, 속성 및 관계를 E-R 다이어그램으로 작성

* 매핑 카디널리티란? 관계를 맺는 두 개체 집합에서, 각 개체 인스턴스가 연관성을 맺고 있는 상대 개체 집합의 인스턴수 개수

개념적 스키마 결과물 = E-R 다이어그램

다) 개념적 설계 방법

뷰 통합방법
(하향식 방법)
뷰 식별 모델링 관점
- 요구조건 분석 단계에서 식별된 사용자 그룹을 기초로 뷰(VIEW)를 식별하고 모델링 수행
- 필요 개체를 식별, 각 개체의 키 속성 결정, 개체들간 관계성을 식별 및 명세
- 개체의 특성을 표현하는 설명 속성 추가
뷰 통합 관점
- 완성된 부문별 뷰들을 하나로 통합해서 전체적 개념 스키마를 작성하는 방식
- 통합 시 동일성 통합(같은 요소나 동의어 통합), 집단화(개체를 구성하는 속성집합), 일반화(공통 성질을 가진 개체들을 일반적이고 포괄적으로 만듬) 개념 이용
애트리뷰트
합성 방법
(상향식 방법)
작업-데이터
관계
- 속성을 분류하고, 분류된 속성들 중 후보키 가능여부를 기준으로 분류
- 개체 정의(기본키, 대체키, 설명 속성으로 구성)
- 관계 정의(개체간의 관계, 개체와 속성간 관계, 속성들 간의 관계 식별)
- E-R 다이어그램 작성

5. 데이터베이스 논리적 설계

가) 논리적 설계 정의 및 특징

- 개발에 사용할 DBMS에 적합한 논리적 데이터 모델을 이용, 개념적 설계 단계에서 생성한 개념적 스키마를 기반으로 DBMS가 처리할 수 있는 데이터베이스의 논리적 구조를 설계

나) 논리적 설계 시 변환 규칙

- E-R 다이어그램을 릴레이션으로 변환 시 작업의 난이도는 낮춰주는 규칙

규칙
설명
1. 모든 개체는
릴레이션으로 변환
- E-R 다이어그램의 각 개체를 하나의 릴레이션으로 변환. 개체의 이름을 릴레이션 이름으로, 속성은 릴레이션 속성으로 변환
2. N:M 관계는
릴레이션으로 변환
- E-R 다이어그램의 관계는 릴레이션 이름, 관계의 속성은 릴레이션 속성으로 변환
- 관계를 맺고 있는 개체는 제1규칙에 따라 변환한 후 이 릴레이션의 기본키를 관계 릴레이션에 포함시키고 외래키로 지정 (외래키 지정 시 이름이 같을 경우 변경)

3. 1:N 관계는
외래키로 표현
3.1 일반적인 1:N 관계는 릴레이션으로 변환하지 않고 외래키로만 표현
- 제1규칙에 따라 개체를 릴레이션으로 변환, 1에 해당하는 개채의 기본키를 N에 해당하는 개체의 외래키로 지정

3.2 약개체가 참여하는 1:N 관계의 경우 외래키가 포함된 릴레이션에서는 해당 외래키를 포함하여 기본키를 지정
- 약개체의 기본키는 외래키(오너개체의 기본키)와 약개체의 기본키의 혼합으로 구성

승객이 좌석번호만을 가지고 자신이 예매한 좌석을 정확하게 찾을 수 없다. 예매한 비행기까지 알아야만 정확한 확인이 가능하기에 약개체 좌석 릴레이션에서 비행기번호와 좌석번호를 기본키로 설정하는 것이 타당하다
4. 1:1 관계는
외래키로 표현
4.1 일반적인 1:1 관계는 외래키를 서로 주고 받음
- 관계는 릴레이션으로 변환하지 않고 개체 릴레이션 기본키를 상호간 외래키로만 표현
- 관계가 가지고 있는 속성들은 관게에 참여하는 개체를 변환한 릴레이션에 포함
4.2 1:1관계에 필수적으로 참여하는 개체의 릴레이션만 외래키를 수용
- 관계를 맺는 두 개체중 관계에 필수적으로 참여하는 개체 릴레이션에만 외래키 포함
- 관계에 필수적으로 참여하는 개체 릴레이션이 선택적으로 참여하는 개체 릴레이션의 기본키를 받아 외래키로 지정, 관계의 속성들은 관계에 필수적인 개체 릴레이션에 포함
- 선택적 참여 릴레이션이 외래키를 가져도 되지만 외래키로 지정 된 속성에는 Null 값이 저장되는 경우가 많이 발생

4.3 모든 개체가 1:1 관계에 필수적으로 참여 시 릴레이션 하나로 표현
- 두 개체가 모두 필수적으로 참여한다면 관련성이 높기에 릴레이션을 합쳐 하나로 표현
- 관계의 이름을 릴레이션으로 사용, 관계에 참여하는 개체의 속성을 관계 릴레이션에 포함
- 두 개체 릴레이션의 키 속성을 조합하여 관계 릴레이션의 기본키로 지정

5. 다중 값 속성은 릴레이션으로 변환
- 관계 데이터 모델 릴레이션은 다중 값 속성을 허용하지 않아 E-R 다이어그램에 있는 다중 값 속성은 별도의 릴레이션을 만들어 포함
- 신규 릴레이션의 속성 구성은 다중 값 속성으로 구성되고 기본키 구성은 다중값 속성과 외래키를 조합하여 지정

6. 데이터베이스 물리적 설계 개요

가) 물리적 설계 정의 및 특징

정의
- 논리적 스키마로부터 효율적이고 구현 가능한 물리적 데이터베이스 구조를 설계하는 행위
특징
- 구현단계에서 실행할 수 있는 트랜잭션을 구현하는데 필요한 내부 구조를 결정 (병행 수행)
- 데이터베이스의 물리적 구조는 데이터베이스 시스템 성능에 중대한 영향을 미침
- 물리적 설계는 하드웨어와 운영 체제의 특성을 고려하여 설계

나) 물리적 데이터베이스 기본 저장 구조

- 물리적 데이터베이스의 기본적인 데이터 단위는 저장 레코드(= 논리적 레코드 + 물리적 저장 정보)

- 동일 파일(한 타입의 저장 레코드들의 집합) 내에 있는 저장 레코드라고 해서 반드시 크기 미일치

- 물리적 설계는 "저장 레코드 양식", "저장 장치에서의 레코드 집중화", "접근 경로 설계"가 포함

다) 물리 데이터베이스 (내부 스키마) 설계

분 류
설 명
저장 레코드의 양식 설계
- 저장 레코드 양식은 데이터 타입, 데이터 값의 분포, 프로그램, 접근빈도 고려
- 저장 레코드에 대한 데이터 표현압축에 대한 양식
- 물리적 단계의 성능평가에 따라 앞의 결정 사항이 변경 가능성 존재
레코드 집중의 분석 및 설계
- 저장 공간에 레코드들이 물리적으로 집중 저장되도록 할당 (물리적 순차성)
- 레코드들을 연속된 저장 공간에 할당, 블록 크기 선성(효율적 검색 목적)
- 데이터 레코드의 순차 처리시 "큰 블록" 유리, 임의 접근 처리시 "작은 블록" 유리
접근 경로 설계
- 접근 경로는 물리적 저장 장치 위에 저장된 데이터의 접근(저장구조)과 처리(탐색 기법)를 가능하게 하는 절차
- 저장 구조는 주로 인덱스를 통한 접근 방법과 저장 레코드를 정의
- 탐색 기법은 주어진 응용을 위해 취해야 될 적절한 접근 경로 정의
- DBMS가 정해지면 물리적 설계는 DBMS가 제공하는 DB파일 조직 방법 중 선택

라) 물리 데이터베이스 설계 시 고려사항

항목
설명
응답 시간
- 트랜잭션을 실행시키기 위해 시스템에 입력 시킨 때부터 다시 결과를 받을 때 까지 시간
- 트랜잭션이 참조하는 데이터에 대한 데이터베이스 접근시간은 DBMS에 영향을 받음
저장 공간 효율화
- 데이터베이스 파일, 접근 경로 구조들을 저장하기 위해 최소한의 저장공간을 사용
트랜잭션 처리도
- 단위 시간에 데이터베이스 시스템이 처리할 수 있는 평균 트랜잭션 처리도
- 시스템에 부하가 절정을 이루는 시간대를 고려

- 성능 요건을 만족하는 여부를 평가는 시뮬레이션이나 프로토타입과 같은 분석적 기법이나 실험적 기법 사용

참고내용

1. CRUD Matrix - 프로세스와 데이터 간의 상관관계

가) CRUD Matrix 정의

- 시스템 개발 시 프로세스와 DB에 저장되는 데이터 사이의 상관관계을 표현하는 Matrix

나) CRUD Matrix 필요성

필요성
설명
모델링 작업 검증
- 분석 단계의 데이터 모델과 프로세스 모델에 대한 작업 검증 역활
중요 산출물
- 시스템 구축 단계에서 어플리케이션 개발 시 필요하며 중요한 산출물
테스트시 사용
- 어플리케이션을 객관적 자료를 사용하여 테스트 시 중요 테스트 케이스 역활
인터페이스 현황파악
- 전체 업무의 인터페이스 파악 가능

다) CRUD Matrix 명칭

확인사항
설명
Create
- 프로세스가 하나 이상의 엔티티에 데이터를 생성하는지 여부
- 필수 데이터 생성 누락 여부 확인 및 생성 후 읽기가 전혀 없는 경우 확인
- 특정 엔티티 데이터를 생성하는 프로세스가 다수 존재하는 경우 병합을 고려
Read
- 데이터 생성 없는 읽기가 존재하는지 여부
- 특정 데이터 읽기가 과도하고 빈번하게 발생하는 경우 부하분산을 고려
Upload
- 데이터 생성 없는 수정이 존재하는지 여부
- 데이터 수정 프로세스가 전혀 없는 경우 확인
- 특정 엔티티 데이터를 수정하는 프로세스가 다수 존재하는 경우 병합을 고려
Delete
- 데이터 생성 없는 삭제가 존재하는지 여부
- 데이터 삭제 프로세스가 전혀 없는 경우 확인
- 특정 엔티티 데이터를 삭제하는 프로세스가 다수 존재하는 경우 병합을 고려
공통
- 한개의 프로세스가 CRUD를 모두 수행하는 경우 프로세스 분할을 고려
- CRUD가 한번도 유발되지 않는 엔티티 및 프로세스 확인
728x90

'[개발관련] > 분석, 설계' 카테고리의 다른 글

RDB - 릴레이션 스키마 변환 규칙 5가지  (0) 2022.06.10

+ Recent posts