본문 바로가기

BackEnd/DB(SQL)

[DB_MySQL] 이것이 MySQL이다 ch04 데이터베이스 모델링

728x90
반응형

1. 프로젝트의 진행 단계

 ◎ 프로젝트(Projcet)

    ▷ 현실세계의 업무를 컴퓨터 시스템으로 옮겨놓는 일련의 과정

    ▷ 대규모의 프로그램을 작성하기 위한 전체 과정

       ▶ ex) 집 짓기의 경우 : 초가집 → 목조건물 → 수 십층 이상의 건물

    ▷ 분석과 설계 작업 등한시 → '소프트웨어 개발 방법론'의 대두

    ▷ 폭포수 모델 (Waterfall Model)

 

 ◎ 폭포수 모델 (Waterfall Model)

    ▷ 가장 오래되고 전통적으로 사용되는 소프트웨어 개발 모델

       ▶ 폭포가 떨어지듯이 각 단계가 끝나면 다음 단계로 진행

    ▷ 장점

       ▶ 각 단계가 명확히 구분되어 프로젝트의 진행 단계가 명확해집니다.

    ▷ 단점

       ▶ 문제점이 발생될 경우 다시 앞단계로 거슬러 올라가기가 어려움

       ▶ 문제점이 대부분 프로그램 구현 단계나 테스트 단계에서 발생

       ▶ 대부분의 문제점을 업무 분석단계에서 다시 시작하여 해결

 

2. 데이터베이스 모델링

 ◎ 데이터베이스 모델링(데이터 모델링) 개념

    ▷ 현 세계에서 사용되는 작업이나 사물들을 DBMS의 데이터베이스 개체로 옮기기 위한 과정

 

 ◎ 데이터베이스 모델링 실습

    ▷ 개념적 모델링

       ▶ 업무 분석 단계에 포함

 

    ▷ 논리적 모델링

       ▶ 업무 분석의 후반부와 시스템 설계의 전반부에 걸쳐 진행

 

    ▷ 물리적 모델링

       ▶ 시스템 설계의 후반부에 주로 진행

 

 

 ◎ 쇼핑몰 데이터 예제

1. 방문 내역 & 구매내역 데이터
   ▷ 메모장이나 엑셀로 작성되었다 가정

2. 기록된 내용에서 물건 구매 내역이 없는 고객 위로 정렬
   ▷ L자형 테이블이 되어 낭비되는 공간 생김

3. L자형 테이블을 빈칸이 있는 곳과 없는 곳으로 분류
   ▷ 고객테이블, 구매테이블로 분류하여 공간 절약
   ▷ 고객 테이블 중복 제거
   ▷ 기본 키(PK, Primary Key) 필요
      ▶ 고객 이름을 고객을 구분할 수 있는 구분자로 설정
      ▶ 각 행을 구분하는 유일한 값
      ▶ 기본 키의 조건은 중복되지 않고 비워있지 않아야함
   ▷ 구매 테이블에 '누가 구매했는지' 표기 위해 고객 이름 필요

4. 테이블 간의 업무적인 연관성(Relation) 정의
   ▷ 주 (Master)가 되는 쪽이 부모 테이블
      ▶ ex) 고객이 물건을 소유(o), 물건이 고객을 소유(x)
      ▶ 주가 되는 고객 테이블이 부모, 상세가 되는 구매 테이블이 자식이 됨(1 : N 모델)
   ▷ 기본 키(PK, Primary Key)
      ▶ 중복되지 않고 비어있지 않아야함
   ▷ 외래 키(FK, Foreign Key)
      ▶ 외래 키로 부모 테이블에서 유일하게 하나의 정보를 얻을 수 있음
   ▷ 제약조건
      ▶ 새로운 데이터 들어갈 때는 부모 테이블에 먼저 넣어야 함
      ▶ 데이터 삭제시에는 자식 테이블에서도 지워야 함

5. 완성된 고객 테이블과 구매 테이블의 구조 정의

 

 ◎ 정의한 테이블을 다이어그램으로 만들기

1. Workbench 실행하고 localhost로 접속, 열린 쿼리 창 모두 닫기
2. 모델 다이어그램 작성
   ▷ [File] → [New Model] 선택
   ▷ [MySQL Model] 탭에서 DB 이름 수정
   ▷ 기본적으로 데이터베이스 이름은 'mydb'
   ▷ 데이터베이스에서 마우스 오른쪽 버튼 클릭 후 [Edit Schema], 'modelDB'로 이름 수정

3. 모델 다이어그램 작성
   ▷ [Model Overview]의 [Add Diagram] 더블 클릭
      ▶ [EER Diagram] 탭 추가되고 다이어그램 그릴 수 있는 상태
   ▷ [Place a New Table] 아이콘 클릭 → 빈 화면에서 다시 마우스 클릭해 테이블 생성
      ▶ 다이어그램의 table1을 더블 클릭 → 고객 테이블(userTBL) 만들기
      ▶ 같은 과정 반복해 구매 테이블(buyTBL) 작성
   ▷ 테이블 간에 1:N 관계 맺어주기
      ▶ <Place a Relationship Using Existing column> 아이콘 클릭
      ▶ buyTBL의 'userName' 열과 userTBL의 'userName' 열을 차례로 클릭

4. 모델링 파일 실제 데이터베이스에 적용
   ▷ Workbench 메뉴의 [File] → [Open Model] → modelDB.mwb 열기
   ▷ [Database] → [Forward Enginner] 선택
   ▷ [Forward Enginner to Database] 시작되면
      ▶ [Set Parameters for connecting to a DBMS] 기본값
      ▶ [Set Options for Database to be Created] 기본값

   ▷ Root 비밀번호 입력
   ▷ [Select Objcets to Forward Engineer] 에는  'Export MySQL Table Object' 체크
   ▷ [Review the SQL Script to be Executed]  → 자동 SQL문 생성

5. 다이어그램에서 데이터베이스로 내보내기한 결과 확인
   ▷ [Navigator] → [Schemas]
      ▶ 빈 곳에서 마우스 오른쪽 버튼 클릭한 후 [Refresh All] 선택하여 새로고침
   ▷ modelDB 데이터베이스 확장해 테이블 확인

6. 기존 존재하는 데이터베이스 이용해 다이어그램 작성
   ▷ ShopDB의 테이블, 인덱스, 스토어드 프로시저, 트리거를 다이어그램으로 변경
   ▷ Workbench 메뉴의 [Database] → [Reverse Engineer] 선택
      ▶ [Set Parameters for connectiong to a DBMS]
      ▶ [Connect to DBMS and Fetch Information]
      ▶ [Select the schemas below you want to include:]
      ▶ [Retrieve and Reverse Engineer Schema Objects]
      ▶ [Select Objects to Reverse Engineer]
      ▶ [Reverse Engineer Progress]의 세부 단계 설정
      ▶ [Reverse Engineer Results]에서 4개에 테이블, 1개 뷰, 1개 루틴(=스토어드 프로시저) 변환된 것을 확인

 

모델링으로 테이블을 만드는 방법을 수행해보았습니다!

 

저렇게 만들면 자동으로 구문이 생성되는 것이 SQL의 장점이네요!!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형