Preface
이번 장에선 관계형 모델, 즉 관계형 테이블에 대해 공부했다.
그러나 아무리 생각해봐도 관계형 테이블을 사용하는 이유를 이해할 수 없었다.
내가 만약 실무자라면, 복잡한 관계형 테이블 대신 한눈에 들어오는 ER 모델을 선호할 것 같다는 생각이 들었다.
물론 ER 모델은 각 엔티티 타입의 세부 사항까지는 나타낼 수 없지만, 자료사전을 통해 필요한 부분의 내용을 발췌하여 사용할 수 있다. 또한, ER 모델 대신 클래스 다이어그램을 통해 세부 속성을 표현할 수도 있다.
특정 개념·도구의 사용 이유를 이해하기 위해선 다양한 시각(관점)에서의 정보가 필요한 것 같다.
1. 자료 흐름 중심 설계
- 구조적 분석의 결과를 구조적 설계로 옮기는 과정이다.
- 자료 흐름 중심 설계(DFD : Data Flow-oriented Design) = 구조적 설계
① 프로세스
② 자료 흐름
③ 자료 저장소
④ 외부 객체 etc.
- DFD에 기초한 요구사항 명세서를 바탕으로 구조적 설계를 입력한다.
- 구조 도표(structured design) : 프로그램 구조를 나타날 때 사용하는 표기법
→ 자료와 제어의 흐름, 프로그램 제어 구조 등을 나타냄
- 구조 도표의 표기법
① 사각형 : 모듈
② 오각형 : 다른 페이지로 연결되어 있는 모듈
③ 작은 원이 있는 화살표 : 모듈 사이의 정보 흐름
→ 하얀 것은 데이터 흐름을, 까만 것은 제어 흐름을 나타냄
④ 마름모꼴 : 선택적 호출
⑤ 곡선 화살표 : 반복적 호출
⑥ 플래그(flag) : 'ON', 'OFF'의 값을 가지는 제어 신호
- 프로세스의 동작
① 입력을 받고 가공 처리 후 새로운 결과물을 만들어 내는 프로세스
→ 변환 흐름(transform flow)
② 입력을 받고 입력 값에 의해 결정을 내린 후 입력과 관계 없는 결과물을 출력하는 프로세스
→ 트랜잭션 흐름(transaction flow)
- 구조적 분석 결과를 자료 흐름 프로그램 구조로 전환시키는 단계
① 요구사항 분석에서 나온 결과를 검토한 후 필요시 수정
② 자료 흐름의 유형 조사 (변환흐름 or 트랜잭션 흐름)
③ 흐름의 경계 설정
④ 자료 흐름도를 프로그램 구조로 매핑
⑤ 분할하여 제어 계층 구조 정의 (하향식 접근 방법)
⑥ 가이드라인과 시스템 특성을 고려하여 수정
- 변환 흐름 중심 설계
① 시스템을 구성 요소들로 분할
② 모듈 간 계층 구조 생성
③ '입력 흐름', '변환 중심', '출력 흐름'으로 구성
- 변환 흐름 중심 설계 단계
① 요구사항 명세서로부터 정제된 자료 흐름도 제작
② 자료 흐름의 유형 조사
③ 입력 경계와 출력 경계 설정
④ 최상위 수준에서 자료 흐름 중심 프로그램 구조 개발 (최상위 수준의 세분화)
⑤ 자료 흐름도를 프로그램 구조로 전환 (두 번째 수준의 세분화)
⑥ 프로그램 구조 정제
- 트랜잭션 흐름 중심 설계
① 트랜잭션 : 자료나 제어 시그널 등이 특정 행위를 유발시키는 것
② 들어온 입력을 여러 갈래의 출력 흐름으로 쪼갤 수 있는 경우 가능
③ 여러 출력 경로 중 하나를 따라 흘러감
- 트랜잭션 흐름 중심 설계 단계
① 요구사항 명세서로부터 하나의 자료 흐름도 제작
② 자료 흐름도가 트랜잭션 흐름을 갖는지 결정
③ 트랜잭션 중심과 동작 경로 파악
④ 트랜잰션 흐름 프로그램 구조 개발
⑤ 자료 흐름도를 프로그램 구조로 매핑
⑥ 프로그램 구조 정제
2. 데이터베이스 설계
- 데이터베이스 정규화 : 데이터베이스 설계에서 중복을 최소화하도록 데이터를 구조화하는 것
- 관계형 모델은 테이블을 이용하여 나타낸다.
- 각 테이블 = 릴레이션(relation)
- 테이블의 각 행 = 투플(tuple)
- 관계형 데이터베이스에서의 뷰(view)
① 사용자에게 보이거나 연산을 위해 만들어지는 가상 테이블
② 실제 존재하는 테이블로부터 연산을 수행하여 결과를 보여주는 것
→ 사용자는 뷰를 통해 실제 데이터베이스에 접근
③ 뷰를 통한 데이터 갱신은 제한된 사용자에게만 허용
- ER 모델에서 관계형 모델로의 매핑 단계
1. ER 모델의 각 엔티티 타입에 대해 하나의 테이블을 만든 후, 엔티티 타입의 속성들을 테이블의 속성으로 포함
→ 엔티티 타입의 주 키는 테이블의 주 키(primary key)가 되며, 여러 속성이 모여 키가 되는 경우 성능 향상과 메모리 절약을 위해 시스템 생성 키(system generated key)를 사용
2. 두 엔티티 타입이 이차(binary) 관계 타입으로 일대일 대응 관계를 가질 때, 이 관계 타입은 하나의 엔티티 타입에 포함
3. 두 엔티티 타입이 일대다 대응 관계를 가질 때, '일'로 참여하는 엔티티 타입 테이블에 관계 타입을 묶어 표시
4. 두 엔티티 타입이 다대다 대응 관계를 가질 때, 관계 타입을 위해 독립적인 테이블 S를 생성
5. 관계 타입의 차수가 3차 이상인 경우 새로운 테이블 S를 생성
6. 상위 클래스와 하위 클래스에 나타난 정보를 관계형 테이블로 매핑시키는 경우
참고 문헌 : 윤청, 『소프트웨어 공학 에센셜』(생능출판), 2019, p.336~360.
'CS > 소프트웨어 공학 에센셜' 카테고리의 다른 글
사용자 인터페이스 설계와 상세 설계 (0) | 2021.06.24 |
---|---|
디자인 패턴 (0) | 2021.06.22 |
소프트웨어 설계 기법 (0) | 2021.06.18 |
유스케이스와 UML (0) | 2021.06.15 |
객체지향 분석 기법 (0) | 2021.06.12 |
댓글