데이터베이스 설계의 필요성
개인 포트폴리오 프로젝트 오픈마켓서비스를 진행하는 도중 그때마다 필요한 컬럼과 테이블을 생성하면 개발 도중에 테이블과 컬럼 정보가 계속 바뀌어 개발을 진행하는 동안 동료 개발자와 소통하는 비용이 많이 들고 번거롭다고 생각하였다.
따라서 데이터베이스 설계를 체계적으로 하여 데이터베이스의 변동을 최소로 하여 개발 생산성과 데이터베이스 구조의 효율성과 확장성을 갖추도록 한다.
데이터베이스 스키마 설계 개요
설계는 E-R모델과 릴레이션 변환 규칙을 이용하여 설계하며 순서는 아래와 같다.
- 요구사항 분석
- 개념적 설계 (E-R 다이어그램)
- 논리적 설계 (릴레이션 스키마)
- 데이터 베이스 구현 (MYSQL 8.0)
- 느낀 점
1. 요구사항 분석
사용자의 요구사항을 분석하고 그에 맞는 설계를 한다.
요구사항 분석이 철저히 이뤄지지 않으면 설계를 완성한 이후 원하는 기능이 구현되지않거나 중간에 변경을 해야되기 때문에 생산성에 나쁜 영향을 준다.
- 일반회원은 회원가입시 아이디, 이름, 비밀번호, 핸드폰 번호, 주소를 입력한다.
- 일반회원은 배송지 주소를 여러 개 가지며 기본 배송지와 배송지 이름을 정할 수 있다.
- 판매자 회원은 아이디, 비밀번호, 판매자 닉네임, 사업자 이름, 사업자 번호, 사업자 주소지, 사업자 연락처를 입력한다.
- 판매자는 상품을 등록할 때 상품 이름, 가격, 배송비, 카테고리, 수량, 메인 사진 1개, 디테일 사진 3개, 설명을 입력할 수 있다.
- 상품은 하나의 카테고리를 가질 수 있고 카테고리는 여러 개의 상품을 분류할 수 있다.
- 구매자는 상품리스트를 볼 수 있고 상품 세부 내역을 볼 수 있다.
- 구매자는 상품 내부 내역을 보고 상품을 주문할 수 있다.
- 주문 내역은 저장된다. 번호, 개수, 가격, 발송 여부, 송장 번호, 구매 확정 여부
- 판매자는 자신의 상품 주문에 대해 송장번호를 입력하여 발송함을 알린다.
- 구매자는 송장번호가 입력되고 발송된 자신의 주문에 대해 구매 확정을 할 수 있다.
- 구매자는 구매한 상품에 한해서 리뷰를 쓸 수 있다. 리뷰는 제목, 내용, 별점, 작성일자로 이루어져있다.
- 구매자는 상품을 장바구니에 넣을 수 있으며 장바구니는 상품번호, 상품 이름, 상품 개수, 상품 가격을 보여준다.
1-1 요구사항에서 개체와 속성을 뽑아서 정리
개체 | 속성 |
일반회원 | 회원 번호, 아이디, 비밀번호, 이름, 핸드폰 번호, 배송지 주소(여러 개, 기본 배송지) |
판매회원 | 회원 번호, 아이디, 비밀번호, 닉네임, 사업자 이름, 사업자 번호, 사업자 주소지, 사업자 연락처 |
상품 | 이름, 가격, 배송비, 수량, 메인 사진1개, 디테일 사진 3개, 설명 |
카테고리 | 번호, 이름 |
장바구니 | 번호, 총 금액 |
1-2 관계를 뽑아서 정리
관계 | 참여 개체 | 유형 | 속성 |
주문 | 일반회원, : 상품 | N : M | 번호, 개수, 가격, 발송 여부, 송장 번호, 구매확정 여부 |
등록 | 판매회원 : 상품 | 1 : M | 등록 날짜 |
리뷰 | 일반회원 : 상품 | N : M | 번호, 제목, 내용, 별점, 작성 일자 |
분류 | 카테고리 : 상품 | 1 : M | |
소유 | 장바구니 : 일반회원 | 1 : M | |
담은 | 장바구니 : 상품 | N : M | 개수 |
2. 개념적 설계 (E-R 다이어그램)
특정 DBMS에 종속적이지 않은 개념적인 모델을 설계하며 E-R모델을 활용한다.
2-1. E-R 모델(Entity Relation Model)이란
E-R 모델은 데이터 구조와 제약 조건들을 개체(Entity), 애트리뷰트(Attribute), 관계(Relation)로 표현하는 데이터 모델이다.
- 개체(Entity)란 단독으로 존재하는 것을 의미한다. (ex 학생, 상품 등)
- 개체 집합(Entity Type)이란 개체들의 집합을 의미한다. (ex 학생 집합, 상품 집합 등)
- 애트리뷰트(Attribute)는 개체가 갖는 속성을 의미한다. (ex 이름, 학번, 학년, 가격 등)
- 관계(Relation)는 개체 집합(Entity Type)간의 관계를 의미한다. (ex 학생과 수업 사이의 수강, 구매자와 판매자와사이의 주문)
2-2 Chen notation 다이어그램
개념적 설계의 시각화를 위해 E-R 모델을 Chen 표기법을 참고하여 다이어그램을 그린다.
3. 논리적 설계
DBMS에 적합한 논리적 스키마 설계 단계로 E-R 모델 다이어그램을 릴레이션 스키마로 변환하여 데이터베이스 테이블로 생성하기 위한 준비를 한다.
3-1 릴레이션 스키마 변환 규칙
아래 규칙에 따라 변환하도록 한다.
순서대로 적용하며 해당 사항 없는 규칙은 생략한다.
- 모든 개체는 릴레이션으로 변환한다.
- N : M 관계는 릴레이션으로 변환한다.
- 1 : M 관계는 외래키로 표현한다.
- 1 : 1 관계는 외래키로 표현한다.
- 다중 값 속성은 릴레이션으로 변환한다.
3-2 모든 개체는 릴레이션으로 변환한다.
개체의 이름을 릴레이션의 이름이 되고 개체의 속성은 릴레이션의 속성이 된다.
3-3 N : M 관계는 릴레이션으로 변환한다.
회원은 여러 개의 상품을 주문할 수 있고 상품은 여러 회원의 주문을 받을 수 있는 N : M 관계이다.
관계의 이름은 릴레이션의 이름이 되고 관계의 속성은 릴레이션의 속성이 된다.
관계에 참여하는 개체의 기본 키를 해당 릴레이션에 포함하여 외래키로 설정한다.
3-4 1 : M 관계는 외래키로 표현한다.
1 : M 관계에서는 1인 개체의 기본키를 M인 개체의 릴레이션에 포함시켜 외래키로 지정한다.
관계의 속성들도 M인 개체 릴레이션에 포함한다.
- 판매회원 한 명이 다수의 상품을 등록할 수 있기 때문에 판매 회원의 기본 키를 상품에 추가하고 외래 키로 지정한다.
- 한 개의 카테고리가 다수의 상품에 분류될 수 있기 때문에 카테고리의 기본 키를 상품에 추가하고 외래 키로 지정한다.
- 한 개의 장바구니는 다수의 일반 회원이 사용하기 때문에 일반 회원의 기본 키를 장바구니에 추가하고 외래 키로 지정한다.
3-5 다중 값 속성은 릴레이션으로 변환한다.
- 회원 주소는 다중 값 속성이기 때문에 릴레이션으로 변환한다.
- 상품 사진은 다중 값 속성이므로 릴레이션으로 변환한다.
4. 데이터베이스 구현 (MYSQL 8.0)
실제 데이터베이스에서 테이블을 구성하고 기본 키와 외래 키를 지정하고 각 컬럼에 맞는 데이터 타입과 이름과 기본 값 등을 지정하였다.
5. 느낀 점
데이터 베이스를 미리 설계함으로 잦은 테이블 생성과 컬럼 변경에 대한 두려움은 사라졌다. 하지만 좀 더 견고하고 확장성 있는 데이터베이스를 설계한다는 것은 시행착오와 더 많은 학습이 필요하다는 것을 느꼈다. 이번 기회에 관계형 데이터베이스의 설계에 대해 알게 되었고 관계형 데이터베이스을 깊게 공부할 필요성과 욕구가 생겼다.