1. 프로젝트의 진행단계
👩🏻🚀 프로젝트 project란 대규모의 프로그램을 작성하기 위한 전체과정
⚡️ 분석과 설계 작업을 등한시하는 소프트웨어 분야의 고질적인 문제점 때문에 소프트웨어 개발 방법론이 제시됨
👩🏻🚀 소프트웨어 공학에서 제시하는 소프트웨어 개발 모델로 '폭포수 모델 Waterfall Model' 이 있다.
⚡️ 장점 : 단계가 명확히 구분되어서 프로젝트의 진행단계가 명확해짐
⚡️ 단점 : 문제점이 발생될 경우 다시 앞 단계로 거슬러 올라가기 어렵다.
👩🏻🚀 이 모델에서 가장 핵심적인 단계는 '업무 분석과 시스템 설계'
1) 프로젝트 계획
- 어떤 프로그램을 누가 어떻게 작성할지 계획을 세우며 요구 기능, 예산, 개발 기간을 결정.
2) 업무 분석
- DB 응용 프로그램은 원래 사람이 하던 일을 전산화한 것. 따라서 현실 세계의 수작업을 면밀히 분석하는 업무 파악 부터 시작.
- 업무의 개요와 목적, 수행 방법, 규칙과 절차 등의 비즈니스 로직(Business Logic)을 문서로 정리
ex. 쇼핑몰 시스템을 구축하려면 회원 관리, 가격 책정, 배송 및 반품, 마일리지 체계 등의 업무부터 알아야 함
- 은행이나 증권사, 병원의 업무는 고도의 전문 지식이 필요해 실무자와 같이 분석.
3) 시스템 설계
- 설계 단계에서는 분석 문서를 참조하여 구현 방법을 결정
- 규모에 맞는 하드웨어와 소프트웨어를 선정하고 업무에 필요한 사물을 추출
- 비즈니스 로직에 따라 실세계의 사물을 테이블로 정의하고 관계를 설정하는 작업을 모델링이라고 함
📌 모델링은 건축의 설계도에 해당. 구현 과정이 신속 정확하려면 모델링이 완벽해야 함
📌 모델링은 일반화된 모범 답안이 없어 숙련된 노하우를 요하는 고급 기술
4) 프로그램 구현
- 모델링한 데이터를 테이블로 구체화하고 효율적인 운영을위한 인덱스, 프로시저 등을 정의하는 단계
- 데이터를 실제 사용하고 입출력하는 클라이언트 응용 프로그램을 개발하고 사용자를 위한 설명서와 유지/보수를위한 문서까지 작성
5) 유지보수
- 구현 완료한 프로그램을 실제 업무에 사용하는 단계
- 미처 예상하지 못한 문제나 버그가 발견되고 기능 개선요구도 발생할 수 있다.
- 현실 세계가 계속 변하기 때문에 개발 완료한 프로젝트도 지속적인 관리가 필요함
2. 데이터베이스 모델링
1) 개념
- 현 세계에서 사용되는 작업이나 사물들을 DBMS의 데이터베이스 개체로 옮기기 위한 과정
- 데이터베이스 모델링은 상당히 어려운 작업, 구현하고자 하는 업무에 대한 폭넓고 정확한 지식이 필요하기 때문
- 일반적으로 모델링 담당하는 사람은 프로젝트 경험이 많거나 데이터베이스 관련 지식이 있는 사람
2) 데이터 베이스 모델링 분류
- 데이터베이스 모델링은 개념적 모델링, 논리적 모델링, 물리적 모델링으로 나눌 수 있다.
⚡️ 개념적 모델링은 주로 업무 분석단계에 포함
➡️ 비즈니스 개념과 규칙을 구성하고 범위를 지정하고 정의
⚡️ 논리적 모델링은 업무 분석의 후반부와 시스템 설계의 전반부에 걸쳐 진행
➡️ 규칙 및 데이터 구조의 기술 맵을 개발하는 단계
⚡️ 물리적 모델링은 시스템 설계의 후반부에 주로 진행
➡️ 데이터베이스의 실제 구현 단계
3. 엔티티
👩🏻🚀 모델링은 제작과정에서 분석 다음 단계인 설계에서 해야하는 작업
👩🏻🚀 모델링의 첫 단계는 데이터베이스에 저장할 대상인 엔티티를 정의하고 추출(속성 추출)하는 것
⚡️ 엔티티(Entity)는 정보에 해당하는 모든 실체이며 전산화의 대상
ex. 고객, 상품, 날짜, 가격 같은 명사 뿐만 아니라 구매, 가입, 대여 같은 추상적인 동사도 엔티티
👩🏻🚀 분석 단계에 오류가 있으면 엉뚱한 엔티티를 정의하는 실수를 하기도 함.
📍 다음은 쇼핑몰의 업무 분석 결과
[ 고객은 상품을 주문하고 쇼핑몰은 주문받은 상품을 배송한다. ]
➡️ 이 분석의 결과로부터 '고객/상품' 같은 사물과 '주문/배송' 동작을 엔티티로 추출
➡️ 엔티티는 보통 하나의 테이블로 구체화
➡️ 회원, 상품, 주문 등의 정보를 각각의 테이블에 저장
📍 다음은 엔티티를 구성하는 속성을 정의
[ 상품 : 이름, 가격, 재고, 할인율 ]
[ 고객 : 아이디, 주소, 전화번호, 예치금, 마일리지 ]
➡️ 속성은 테이블의 필드로 구체화
➡️ 추출한 속성 중에 엔티티를 대표하는 기본키를 선정
( 레코드끼리 구분 가능한 고유성이 있고 자주 검색하는 속성을 선정해야 함 )
4. 관계
👩🏻🚀 각각의 엔티티는 독립적으로 존재하지 않고 업무적으로 서로 연관
⚡️ 고객은 상품을 주문하며 쇼핑몰은 주문받은 상품을 배송하는 것
👩🏻🚀 엔티티를 정의한 후에는 비즈니스 로직에 따라 엔티티간의 관계를 설정
👩🏻🚀 관계(Relation)는 엔티티간의 연결 형태이며 관계형 DB의특징을 결정하는 핵심이다.
⚡️ 관계는 양쪽 엔티티의 인스턴스 개수에 따라 1) 1:1관계 2) 1:다 관계, 3) 다:다 관계로 분류
⚡️ 반드시 연결해야 하는 필수 관계와 필요할 때만 연결하는 선택 관계가 있음
1) 1:1 관계
👾 1:1 관계는 양쪽 테이블의 인스턴스를 하나씩 연결
👾 1:1 관계의 현실적인 예는 엔티티의 정보가 너무 많아 테이블을 분할할 때
➡️ 필드가 많으면 보기에도 정신없고 레코드가 거대해져 성능도 떨어짐
➡️ 자주 참조하는 정보와 부가적인 정보로 분할하면 참조하지 않는 속성은 필요할 때만 읽으면 되니 성능이 향상됨
ex. 회원 데이터의 경우 자주 사용하는 로그인 관련 정보와 상대적으로 사용이 적은 상세 정보를 분리
⚡️ 이때 두 테이블의 레코드끼리 짝을 찾을 수 있는 연결 고리가 필요
⚡️ 관계형 DB에서 레코드의 순서는 의미가 없어 순서로 연결 x
⚡️ 양쪽 테이블에 똑같은 키를 만들어 두면 연결 관계를 알 수 있는데 이런 용도로는 학번이 적합
➡️ 상세 정보를 알고 싶을 때 학생 테이블의 학번을 조사한 후 상세 테이블에서 학번이 같은 레코드를 참조
ex. 김학생의 체중을 알고 싶다면 학번인 1234로 상세 테이블을 검색
두 테이블은 학번이라는 외래키로 연결되어 있음.
2) 1:다 관계
👩🏻🚀 가장 흔하게 존재하는 관계는 1:다 관계이며 부서와 직원의 관계가 대표적이다.
➡️ 직원은 한 부서에 소속되며 한 부서에는 여러 명의 직원이 있음
📌 김유신과 정몽주는 총무부 소속이고 안중근과 허난설헌은 인사과 소속
📌 직원 테이블의 소속 부서 필드가 부서 테이블의 기본키를 가리킴
3) 다:다 관계
👩🏻🚀 다:다 관계도 현실에서는 흔하며 양쪽 엔티티가 서로 복수개의 엔티티로 연결
👩🏻🚀 다음 예는 학생과 과목간의 수강 관계를 표현한 것
📌 학생 한 명이 여러 과목을 수강할 수 있으며 또한 한 과목을 여러 학생이 수강할 수 있어 학생과 과목의 관계는 다:다 관계
📌 관계형 DB로는 다:다 관계를 표현할 수 없어 두 개의 1:다 관계로 변환하여 표현
📌 중간에 수강 엔티티를 삽입하여 두 개의 다:1 , 1:다 관계로 변환
💡 모델링의 목적은 데이터 구조를 중복없이 효율적으로 디자인하는 것이며 이를 위해 하나의 테이블을 여러 개로 분할
💡 분할된 테이블끼리의 연관성은 관계를 통해 설정, 관계는 외래키 제약에 의해 구체화
[ 내용 참고 : 책 '이것이 MySQL 이다' 및 IT 학원 강의 ]
'Database > MySQL' 카테고리의 다른 글
[MySQL] 데이터베이스 모델링 | 참조 무결성 (1) | 2024.02.25 |
---|---|
[MySQL] 데이터베이스 모델링 | 1~3 정규화, 역정규화 (1) | 2024.02.25 |
[MySQL] 제약조건 | 일련번호, 시퀀스, AUTO_INCREMENT (0) | 2024.02.24 |
[MySQL] 제약조건 | 식별자, 기본키, 복합키, 유니크, 체크 (1) | 2024.02.24 |
[MySQL] 제약조건 | 무결성, NULL 허용, 기본값 (1) | 2024.02.24 |