쇼핑몰 사이트 구축하기 위해서
1. 회원가입에 대한 테이블 설계가 필요하다.
2. 상품에 대한 정보를 저장하는 테이블이 필요하다.
3. 주문 테이블 필요, 주문 상세테이블 필요 (정규화 과정 때문에)
User Table 설계 도면 (사용자 테이블)
| Field (속성) | Type (타입) | Constraints (제약) | desc (설명) |
| id | INT | PK, auto_increment | 사용자 고유 ID |
| username | VARCHAR(50) | Not Null | 사용자 이름 |
| VARCHAR(100) | Not Null, Unique | 이메일 주소 | |
| password | VARCHAR(255) | Not Null | 비밀번호 |
| address | VARCHAR(255) | - | 주소 |
| created_at (회원 생성일) | TIMESTAMP | Default CURRENT_TIMESTAMP |
계정 생성 시간 |
Product Table (상품 테이블)
| Field(속성) | Type(타입) | Constraints(제약) | desc(설명) |
| id | INT | PK, auto | 식별자 |
| name | VARCHAR(100) | NOT NULL | 상품 이름 |
| description | TEXT | - | 상품 설명 |
| price | DECIMARL(10, 2) | Not Null | 가격 |
| stock | INT | Default 0 | 재고 수량 |
| created_at (상품 등록일) | TIMESTAMP | Default CURRENT_TIMESTAMP |
상품 등록 시간 |
Order Table (주문 테이블)
| Field | Type | Constraints | desc |
| Id | INT | PK, auto_increment |
주문 고유 ID |
| user_id | INT | Foreign Key | 주문한 사용자의 ID |
| total_price | DECIMAL(10, 2) | not null | 총 주문 금액 |
| create_at | TIMESTAMP | DEFAULT CurrentTime | 주문시간 |
Order Detail Table (주문 상세 테이블)
| Field | Type | Constraints | desc |
| id | INT | pk, auto_increment | 주문 상세 고유 ID |
| order_id | INT | not null, fk | 주문 ID |
| product_id | INT | not null, fk | 주문한 상품ID |
| count | INT | not null | 주문 수량 |
| price | DECIMAL(10, 2) | not null | 상품의 주문 가격 |
주문(orders) 테이블과 주문 상세(order_details) 테이블을 분리하여 설계한 이유는 뭘까?
→ 데이터베이스 정규화 원칙에 기반한 것
정규화는 데이터베이스 설계에서 중요한 과정으로, 데이터 중복을 최소화하고, 데이터 무결성을 향상시키며,
수정, 삽입, 삭제 등의 데이터베이스 작업 시 발생할 수 있는 문제점들을 방지하기 위해 사용됩니다.
주문과 주문 상세 테이블 분리의 목적
- 중복 제거
주문 정보와 주문 상세 정보를 하나의 테이블로 관리할 경우, 주문 정보(예: 주문자 ID, 주문 날짜)가 각 주문 상품마다 반복적으로 저장됩니다. 이는 데이터 중복을 초래하고, 디스크 공간을 불필요하게 사용하게 합니다.
한번 테스트 해봄
Item Table
| Field | Type | Constraints | desc |
| ID | INT | PK, unique, auto_increment |
물건의번호 |
| name | Foreign Key | user table 이름 | |
User Order Table (사용자 테이블에서 주문할 때 필요한 데이터)
| Field | Type | Constraints | desc |
| id | INT | user table 주문하는 식별자 | |
| name | VARCHAR(50) | user table 이름 | |
| address | VARCHAR(255) | user table 주소 |
Product Order Table (상품 테이블에서 주문할 때 필요한 데이터)
| Field | Type | Constraints | desc |
| id | INT | user table 주문하는 사람 | |
| price | Foreign Key | user table 이름 | |
| stock | Foreign Key | user table 주소 |
'MySQL' 카테고리의 다른 글
| 2024.06.12 MySQL 활용 쇼핑몰과 카테고리 1단계 (0) | 2024.06.12 |
|---|---|
| 2024.06.11 MySQL활용 블로그 서비스의 DB 구축(2) (0) | 2024.06.11 |
| 2024.06.11 MySQL활용 SELF JOIN (0) | 2024.06.11 |
| 2024.06.11 MySQL 활용 정규화란(1단계) (0) | 2024.06.11 |
| 2024.06.10 MySQL 기본 MySQL DML, DDL, DCL 이란 (0) | 2024.06.10 |