-
[TIL] 20.12.29 데이터베이스 설계, MVC 패턴Cloud/클라우드 아키택트 양성과정 2021. 1. 26. 09:56
[20.12.29] 데이터베이스 설계, MVC 패턴
* 데이터베이스 설계
- 데이터베이스 설계는 현실 세계의 개체를 컴퓨터 세계에서 표현하는 과정이다.
1) 현실 세계와 컴퓨터 세계
> 데이터베이스 설계를 위해서 현실 세계에서의 어떤 개념이 표현되는지 알아본다.
현실 정보 데이터 개체 ↔ 개체 타입 ↔ 레코드 타입 특성 ↔ 속성 ↔ 필드 값 ↔ 값 ↔ 값 > 현실 세계에서의 개체와 그 개체의 특성과 값을 컴퓨터 세계에 대응시키면 위와 같다.
> 설계 과정에서 개념적 설계 과정을 통해 가운데 과정이 산출되고 이는 논리적 설계로 데이터에 대응된다.
2) 데이터베이스 설계 과정
> 모든 RDBMS는 개념적, 논리적 설계 적용이 가능하고 DB에 따라서 물리적 설계가 달라진다.
(1) 개념적 설계 (conceptual design)
> 개체, 관계로 현실 세계를 개념적으로 표현한다.
> 개체 : 단독으로 존재하며 다른 것과 구분되는 객체
> 속성 : 개체의 성질 및 특성
> 관계 : 개체 사이의 관계
> E-R 모델로 표현되며 E-R 모델의 대략적인 모습은 아래와 같다.
E-R 모델 예시 > 각 모양이 나타내는 의미는 다음과 같다.
모양 설명 모양 설명 직사각형 개체 원 속성 마름모 관계 선 연결 (2) 논리적 설계 (logical design)
> 개념적 설계 단계에서 표현된 객체나 관계를 데이터로 정확히 표현했는지
> DB를 다루는 회사에서 다루는 데이터가 제대로 포함됐는지를 확인한다.
> 현실 세계의 자료를 물리적 저장장치에 저장할 수 있도록 선택한 DBMS에 맞는 논리적 구조로 변환
> RDBMS라면 이 과정에서 개체와 관계를 테이블로 표현한다.
E-R 모델에서 테이블로 분류 > 주로 개체를 기준으로 테이블을 구성하며 속성은 컬럼으로 표현된다.
> 관계는 연결된 개체의 관계(일대일, 일대다, 다대다)에 따라서 별도 테이블이 될 수도 있다.
> 일대다 관계의 경우 '다'에 해당하는 테이블에 정보를 표현한다.
> 다대다 관계의 경우 별도 관계 테이블을 생성한다.
> 테이블로 표현하는 과정에서 정보의 손실이 없게 설계한다.
> 되도록 데이터 중복을 피하도록 설계한다.
> 이 단계에서는 개체나 관계를 한글로 표현한다.
(3) 물리적 설계 (physical design)
> 한글로 표현된 테이블, 컬럼명을 모두 영문으로 표기한다.
> 선택한 DBMS에 맞게 테이블과 컬럼을 설계한다.
> 컬럼에 따라 적절한 데이터 타입과 크기를 정의한다.
※ 데이터베이스 설계 예시
> 다음과 같은 조건에 맞는 데이터베이스를 설계해본다.
[조건]
하나의 기자재는 한 연구실에서 관리한다.
한 연구실은 여러 기자재를 관리한다.
한 명의 연구원은 한 연구실에만 소속될 수 있다.
하나의 연구실은 여러 연구원으로 구성된다.
한 명의 연구원은 여러 기자재를 사용할 수 있다.
하나의 기자재는 여러 연구원이 사용할 수 있다.
[필요 속성]
기자재 번호, 기자재 이름, 기자재 입고 날짜, 기자재 사용 날짜, 기자재 사용 번호,
연구원 번호, 연구원 이름, 연구실 번호, 연구실 이름
[개체/속성]
개체(연구실) : 속성(연구실 번호, 연구실 이름)
개체(연구원) : 속성(연구원 번호, 연구원 이름)
개체(기자재) : 속성(기자재 번호, 기자재 이름, 기자재 입고 날짜)
[관계]
[연구실-기자재] => 관리 (1:N)
[연구실-연구원] => 소속 (1:M)
[연구원-기자재] => 사용 (N:M)
각 관계에 따라서 다음과 같은 결과가 도출된다.
1. 연구원 테이블은 연구실 번호를 속성으로 가진다. (1:N)
2. 기자재 테이블은 연구실 번호를 속성으로 가진다. (1:M)
3. 연구원-기자재 관계를 위해 '사용'이라는 별도 테이블을 생성한다. (N:M)
4. 사용 테이블은 사용 날짜, 사용 번호, 사용 연구원 번호, 사용 기자재 번호를 속성으로 가진다.
[E-R 모델 표현]
그리다 보니 '사용'에서 사용 연구원 번호, 사용 기자재 번호가 누락됐다.
[테이블 설계]
CREATE TABLE lab( lab_id INT AUTO_INCREMENT PRIMARY KEY, lab_name VARCHAR(20) NOT null ); CREATE TABLE researcher( r_id INT AUTO_INCREMENT PRIMARY KEY, r_name VARCHAR(20) NOT null, lab_id INT NOT NULL, FOREIGN KEY (lab_id) REFERENCES lab(lab_id) ); CREATE TABLE equipment( eq_id INT AUTO_INCREMENT PRIMARY KEY, eq_name VARCHAR(20) NOT NULL, eq_arrived VARCHAR(30) NOT NULL, lab_id INT NOT NULL, FOREIGN KEY (lab_id) REFERENCES lab(lab_id) ); CREATE TABLE eq_use( use_id INT AUTO_INCREMENT PRIMARY KEY, use_day VARCHAR(30) NOT NULL, r_id INT NOT NULL, eq_id INT NOT NULL, FOREIGN KEY(r_id) REFERENCES researcher(r_id), FOREIGN KEY(eq_id) REFERENCES equipment(eq_id) );
E-R 모델에 맞춰 테이블을 설계했다.
* MVC 패턴
- 디자인 패턴 중 하나로 프로그램 개발 과정에서 프로그램을 Model, View, Controller로 나눈 것이다.
- 각각 역할을 나눠놓았기 때문에 유지보수에 용이하다.
1) Model
> 테이블에 저장된 데이터를 조회, 갱신, 삭제하는 등의 일을 처리한다. (CRUD)
2) Controller
> 실질적으로 요청을 처리하는 역할이다.
> 요청을 처리하기 위해 View, Model과 소통하기도 한다.
3) View
> 실제 사용자가 보게 되는 시각적인 화면을 구성하는 역할이다.
> View를 통해서 서비스를 선택할 수 있고 선택 시 Controller가 Model에게 서비스를 요청한다.
> 그렇게 다시 반환된 결과는 View를 통해서 사용자에게 시각적으로 전달된다.
* 실습문제
실습문제는 따로 없고 조별과제로 파이썬과 MariaDB를 이용해서 간단한 쇼핑몰을 제작했다.
조별로 각자 컨셉을 정했는데 내가 속한 조는 식료품 구매 쇼핑몰을 제작했다.
며칠 동안 제작했기 때문에 프로젝트 종료 시점의 TIL에서 포스팅해야겠다.
※ 이 게시물은 '이것이 MySQL이다' 교재와 엔코아 플레이데이터에서 배운 내용을 토대로 작성되었습니다.
'Cloud > 클라우드 아키택트 양성과정' 카테고리의 다른 글
[TIL] 21.01.04 리눅스(VMware Workstation) 설치 및 설정 (0) 2021.01.28 [TIL] 20.12.30 조별 프로젝트(쇼핑몰 프로젝트) (0) 2021.01.26 [TIL] 20.12.28 제약조건, 테이블, 뷰, 파이썬 연동 (0) 2021.01.25 [TIL] 20.12.23 MariaDB 데이터 형식, 내장 함수, 조인, 제약조건 (0) 2021.01.18 [TIL] 20.12.22 DBMS, RDB, MariaDB 설치, 쿼리 실습 (0) 2021.01.16