해당 글에서는 RDBMS 데이터 모델링 이론을 기반으로 실제 구현을 방법에 대해 작성한 글입니다.
💡 [참고] 이전에 작성한 RDBMS의 데이터 모델링 개념을 참고하시면 도움이 됩니다.
[DB/설계] RDBMS 데이터 모델링 이해하기 -1: 데이터 모델링 과정 및 정규화, 역 정규화
해당 글은 데이터베이스 설계를 위한 RDBMS 데이터 모델링에 대해 이해를 돕기 위해 작성한 글입니다. 1) 데이터 모델링(Data Modeling)💡 데이터 모델링(Data Modeling)- 데이터베이스 시스템을 설계하
adjh54.tistory.com
1) 개념적 모델링(Conceptual, Contextural Modeling) 구성 : Draw.io 이용
1. 비정규 릴레이션
💡 비정규 릴레이션
- 데이터베이스의 초기 설계 단계에서 사용되는 개념으로 데이터가 아직 정규화되지 않은 상태를 의미합니다.
- 이 단게에서는 아직 정규화를 수행하지 않았기에 데이터 중복과 이상(Anomalies)이 발생할 수 있습니다.
[ 더 알아보기 ]
💡 데이터 이상(Anomalies)
- 삽입 이상, 삭제 이상, 갱신 이상 세 가지로 발생할 수 있으며, 이는 데이터를 삽입, 삭제, 갱신할 때 예상치 못한 문제나 불편함을 초래할 수 있는 상태를 의미합니다.
1.1. Entity(Object) 추출
💡 Entity(Object) 추출
- 데이터베이스 설계의 첫 번째 단계로 데이터베이스에서 관리하려는 주요 객체나 엔티티를 식별하고 추출하는 과정을 의미합니다.
- 이는 데이터 모델의 기본 구조를 정의하고 데이터베이스의 논리적 설계 단계를 위한 기초를 마련합니다.
단계 | 과정 | 설명 |
1 | 요구사항 분석 | 시스템에서 관리해야 하는 데이터를 파악하기 위해 비즈니스 요구사항을 분석합니다. 도메인 전문가와의 인터뷰, 기존 시스템 분석, 문서 검토 등을 통해 필요한 데이터를 식별합니다. |
2 | 엔티티 식별 | 관리해야 할 주요 객체나 개념을 엔티티로 정의합니다. 예를 들어, 온라인 쇼핑몰 시스템에서는 고객, 주문, 제품 등이 엔티티로 식별될 수 있습니다. |
3 | 속성 정의 | 각 엔티티의 특성과 관련된 데이터를 속성으로 정의합니다. 예를 들어, 고객 엔티티에는 이름, 주소, 전화번호 등의 속성이 포함될 수 있습니다. |
4 | 엔티티 간 관계 정의 | 엔티티 간의 상호작용과 연관성을 정의합니다. 예를 들어, 주문 엔티티는 고객 엔티티와 연관되며, 제품 엔티티와도 연관될 수 있습니다. |
1.2. Behavior(Queries) 추출
💡 Behavior(Queries) 추출
- 데이터베이스 설계에서 엔티티(테이블) 간의 상호작용을 정의하고 데이터베이스에서 수행될 주요 질의(쿼리)를 식별하고 추출하는 과정을 의미합니다.
- 이 단계에서는 사용자와 시스템 간의 관계를 고려하여 데이터베이스가 어떤 데이터를 제공해야하는지 명확히 이해하는 것이 중요합니다.
단계 | 과정 | 설명 |
1 | 사용자 요구사항 분석 | 사용자와의 인터뷰, 설문조사, 기존 시스템 분석 등을 통해 사용자가 어떤 정보를 필요로 하는지 파악합니다. 예를 들어, 판매 관리 시스템에서 영업팀은 특정 기간 동안의 매출 데이터를 필요로 할 수 있습니다. |
2 | 주요 쿼리 식별 | 분석된 사용자 요구사항을 바탕으로 데이터베이스에서 수행될 주요 쿼리를 식별합니다. 예를 들어, "특정 고객의 주문 내역 조회", "특정 제품의 재고 상태 확인", "월별 매출 통계" 등이 주요 쿼리가 될 수 있습니다. |
3 | 쿼리 최적화 | 식별된 쿼리가 효율적으로 수행될 수 있도록 데이터베이스 구조를 최적화합니다. 인덱스 설정, 적절한 조인 방식 선택, 캐싱 등의 기법을 통해 쿼리 성능을 향상시킵니다. |
4 | 테스트 및 검증 | 식별된 쿼리를 실제로 실행해보고, 예상한 결과가 도출되는지 확인합니다. 쿼리 결과가 정확하고 빠르게 반환되는지 검증합니다. |
2. Usecase Diagram
💡 Usecase Diagram
- 시스템의 기능적 요구사항을 시각적으로 표현하는 도구입니다. 주로 시스템(Subject) 내에서 사용자(Actor)와 시스템이 수행해야 할 기능(UseCase) 간의 상호작용을 나타냅니다.
- 이를 통해 시스템의 기능을 명확히 이해하고, 시스템 개발 과정에서 요구사항을 체계적으로 관리할 수 있습니다.
요소 | 설명 |
액터(Actor) | 시스템과 상호작용하는 외부 요소로, 사용자가 될 수도 있고 다른 시스템이 될 수도 있습니다. |
유스케이스(Use Case) | 시스템이 수행해야 하는 기능이나 작업을 나타냅니다. |
관계(Relationships) | 액터와 유스케이스 간의 상호작용을 나타내며, 일반적으로 연결선으로 표현됩니다. |
주체(Subject) | 유스케이스가 속하는 시스템의 특정 부분을 나타냅니다. |
2.1. Draw.io
💡 Draw.io
- 웹 기반의 다이어그램 작성 도구로, 사용자가 다양한 유형의 다이어그램을 쉽게 만들 수 있도록 도와줍니다. 이 도구는 사용자 친화적인 인터페이스를 제공하며, 다양한 템플릿과 도형을 사용하여 복잡한 다이어그램을 작성할 수 있습니다.
- 또한, 협업 기능을 통해 여러 사용자가 동시에 작업할 수 있으며, Google Drive, Dropbox 등과 같은 클라우드 저장소와 통합되어 작업 내용을 쉽게 저장하고 공유할 수 있습니다.
Flowchart Maker & Online Diagram Software
Flowchart Maker and Online Diagram Software draw.io is free online diagram software. You can use it as a flowchart maker, network diagram software, to create UML online, as an ER diagram tool, to design database schema, to build BPMN online, as a circuit d
app.diagrams.net
2.2. Draw.io 활용하기 : 사이트에 접속하여 Draw.io 내에서 UML 탭을 선택합니다

2.3. Draw.io 활용하기 : Draw.io 내에 Usecase Diagram에 대한 요소를 이용하여 그려줍니다.

2.4. 시스템(주체) 내에서 Actor로 시작하여 기능(Usecase)를 수행하여 서로 간의 관계를 구성합니다.

2) 논리적 모델링(Logical Modeling) -1 : 테이블 구성 (MySQLWorkbench Model 활용)
💡 논리적 모델링(Logical Modeling) -1 : 테이블 구성 (MySQLWorkbench Model 활용)
- 개념적 모델링에서 작성한 UseCase를 기반으로 논리적 모델링을 구성합니다.
1. 엔티티 관계 다이어그램(ERD, Entity-Releation Diagram) / 확장 엔티티 관계 다이어그램(EERD, Extenstion Entity-Releation Diagram)
💡 엔티티 관계 다이어그램(ERD, Entity-Releation Diagram)
- 데이터베이스 설계에서 사용되는 다이어그램으로, 엔티티 간의 관계를 시각적으로 표현합니다. 주요 구성 요소는 엔티티, 속성, 관계입니다.
- 이를 통해 데이터베이스의 논리적 구조를 명확히 이해하고, 데이터베이스 설계 및 개발 과정을 체계적으로 진행할 수 있습니다.
💡 확장 엔티티 관계 다이어그램(EERD, Extenstion Entity-Releation Diagram)
- ERD의 확장 버전으로 보다 복잡한 데이터베이스 구조를 표현할 수 있습니다.
- ERD의 기본 요소 외에도 상속, 서브타입, 슈퍼타입 등의 개념을 포함하여 더 정교한 모델링을 가능하게 합니다.
- 이를 통해 대규모 데이터베이스 시스템이나 복잡한 비즈니스 요구사항을 효과적으로 설계할 수 있습니다.
💡 MySQL Workbench 툴을 기반으로 논리적 모델링을 구성해봅니다.
2. File - New Model를 선택합니다.

3. Add new Diagram을 선택합니다.

4. Edit Schema… 을 선택합니다.
💡 Edit Schema… 을 선택합니다.
- 생성하려는 스키마를 선택하여 테이블을 생성합니다.

5. Schema Editor를 설정합니다.
💡 Schema Editor를 설정합니다.
- Character Set을 Default Collation, Collation을 Default Collation으로 설정합니다.

6. 'New Table' 버튼을 눌러서 테이블을 생성합니다.

7. 클릭하고 오른쪽에 두면 테이블이 생성되고, 더블 클릭하면 테이블 정보를 구성할 수 있습니다

8. 아래와 같이 테이블의 요소들을 작성하면 구성이 완료되었습니다.

3) 논리적 모델링(Logical Modeling) -2 : 테이블 관계 구성(MySQLWorkbench Model 활용)
1. 생성한 테이블을 선택하고 하단의 탭 ‘Foreign Keys’를 선택합니다.

2. Foregin Key를 입력하고 연결관계를 선택하며 연결할 FK 컬럼을 선택하면 테이블 관계가 맺어집니다.
💡 Foregin Key를 입력하고 연결관계를 선택하며 연결할 FK 컬럼을 선택합니다.
- 해당 예시에서는 부동산(Agency) 테이블과 중개인(Agent) 테이블 간의 1 : 다 관계를 맺습니다.
- 부동산(Agency) 테이블의 id 컬럼 값이 중개인(Agent) 테이블의 agency 컬럼과 연결됩니다.

4) 물리적 모델링(Physical Modeling) -1 : 실제 테이블 생성(Forward Engineer)
💡 물리적 모델링(Physical Modeling) -1 : 실제 테이블 생성
- 논리적 모델링 단계에서 생성한 테이블과 테이블 관계를 기반으로 실제 데이터베이스에 테이블을 생성해 봅니다.
1. Database - Forward Engineer… 버튼을 선택합니다.

2. [Connection Options 단계] 생성하려는 스키마를 확인하고 ‘Continue’ 버튼을 누릅니다.

3. [Options 단계] 추가 속성을 지정해도 되며, 테스트에서는 기본 속성으로 선택하고 ‘Continue’ 버튼을 누릅니다.

💡 [참고] 속성에 대한 설명 값
속성 | 설명 |
Table Options | |
- Skip creation of FOREIGN KEYS | 외래 키(FK)를 생성하지 않음 |
- Skip creation of FK Indexes | 외래 키 인덱스를 생성하지 않음 |
- Generate separate CREATE INDEX statements | 개별 CREATE INDEX 문을 생성 |
- Generate INSERT statements for tables | 테이블에 대한 INSERT 문을 생성 |
- Disable FK checks for INSERTS | INSERT 시 외래 키 체크를 비활성화 |
Other Objects | |
- Don't create view placeholder tables | 뷰의 자리 표시자 테이블을 생성하지 않음 |
- Do not create users. Only create privileges (GRANTS) | 사용자 생성 대신 권한만 부여 |
Code Generation | |
- DROP objects before each CREATE object | 각 CREATE 객체 전 해당 객체를 DROP |
- Generate DROP SCHEMA | DROP SCHEMA 문을 생성 |
- Omit schema qualifier in object names | 객체 이름에 스키마 접두사를 생략 |
- Generate USE statements | USE 문을 생성 |
- Add SHOW WARNINGS after every DDL statement | 각 DDL 문 이후 SHOW WARNINGS 문 추가 |
Include model attached scripts | 모델에 첨부된 스크립트를 포함 |
3. [Select Objects 단계] 모델링에서 구성된 정보에 대해 모두 반영할지에 대한 선택을 하여 ‘Continue’ 버튼을 누릅니다.
💡 모델링에서 구성된 정보에 대해 모두 반영할지에 대한 선택을 합니다
- 특정 Table, View, Routine, Trigger 등 객체를 비활성화하려면 체크박스를 해제하면 됩니다.

4. [Review SQL Script 단계] DDL이 생성되었습니다.

5. [Commit Progress 단계] 실제 수행이 되어 테이블이 구성이 됩니다.

7. 테이블 생성을 확인하였습니다.

5) 물리적 모델링(Physical Modeling) -2 : 실제 테이블 수정 및 검토(Reverse Engineer)
💡 물리적 모델링(Physical Modeling) -2 : 실제 테이블 수정 및 검토
- 물리적 모델링 생성 단계에서 생성된 테이블 내에서 테이블의 수정 및 검토가 필요한 경우 이를 이용하여 테이블 혹은 관계에 대해서 변경합니다.
1. SQL DDL 테이블 생성
CREATE TABLE EstateFile (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
estate INT UNSIGNED NOT NULL COMMENT '물건 ID',
mime VARCHAR(127) NOT NULL COMMENT '파일 종류',
orgname VARCHAR(127) NOT NULL COMMENT '원래 파일명',
sysname VARCHAR(127) NOT NULL COMMENT '시스템 저장 파일명',
filepath VARCHAR(127) NOT NULL COMMENT '저장 위치',
filesize INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '파일크기',
deldate TIMESTAMP NULL COMMENT '삭제 일시',
PRIMARY KEY (id)
);

2. Database - Reverse Engineer.. 버튼을 선택합니다.

3. [Connection Options 단계] 연결할 데이터베이스를 선택하고 ‘Continue’ 버튼을 선택합니다.

4. [Connect to DBMS 단계] 데이터베이스 연결이 됨을 확인되었고 ‘Continue’ 버튼을 선택합니다.

5. [Select Schemas 단계] 이전에 모델링을 수행했던 스키마를 선택합니다.

6. [Retrieve Objects 단계] 스키마와의 연결이 완료되었습니다.

7. [Select Objects 단계] Forward Engineer로 추가된 테이블 및 SQL DDL로 추가한 테이블을 포함하여 총 3개에 대해 수행을 위해 ‘Execute’ 버튼을 누릅니다

8. [Reverse Engineer 단계] 수행이 완료됨을 확인하였고 ‘Continue’ 버튼을 선택합니다.

9. [Results 단계] 생성이 완료됨을 확인합니다.

10. SQL DDL로 구성한 테이블이 잘 포함됨을 확인하였습니다.

오늘도 감사합니다. 😀
'DB > 설계' 카테고리의 다른 글
[DB/설계] RDBMS 데이터 모델링 이해하기 -1: 데이터 모델링 과정 및 정규화, 역 정규화 (0) | 2024.07.11 |
---|