🐥 카카오테크캠퍼스 - 2단계 1주차 Entity 세부 설계
🐥 카카오테크캠퍼스 - 2단계 1주차 Entity 기본 설계에서는 API 요청 응답에 따라 테이블을 예측해서 작성해 보았습니다
오늘은 화면 설계서와 기본 설계 과정에서 만들었던 테이블을 최적화하는 시간을 가졌습니다.
User(사용자)
Request Body를 보면 유저 이름, 이메일, 비밀번호가 필요하다
{
"username" : "meta",
"email" : "meta@nate.com",
"password" : "meta1234!"
}
- id : PK
- userName : 유저 이름
- email : 이메일
- password : 비밀번호
- createDate : 생성 날짜
- updateDate : 수정 날짜
Product(상품)
{
"success": true,
"response": [
{
"id": 1,
"productName": "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전",
"description": "",
"image": "/images/1.jpg",
"price": 1000
},
{
"id": 2,
"productName": "[황금약단밤 골드]2022년산 햇밤 칼집밤700g외/군밤용/생율",
"description": "",
"image": "/images/2.jpg",
"price": 2000
},
],
"error": null
}
전체 상품 목록 페이지를 보니 기본적으로 제품 이름,설명,사진,가격이 필요해보입니다.
- id : PK
- productName : 제품 명
- description : 제품 설명
- image : 제품 사진
- price : 제품 가격
- starCount : 별점
- createDate : 생성 날짜
- updateDate : 수정 날짜
Option(옵션)
제품 상세 보기의 데이터 형식을 확인합시다
{
"success": true,
"response": {
"id": 1,
"productName": "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전",
"description": "",
"image": "/images/1.jpg",
"price": 1000,
"starCount": 5,
"options": [
{
"id": 1,
"optionName": "01. 슬라이딩 지퍼백 크리스마스에디션 4종",
"price": 10000
},
{
"id": 2,
"optionName": "02. 슬라이딩 지퍼백 플라워에디션 5종",
"price": 10900
},
{
"id": 3,
"optionName": "고무장갑 베이지 S(소형) 6팩",
"price": 9900
},
{
"id": 4,
"optionName": "뽑아쓰는 키친타올 130매 12팩",
"price": 16900
},
{
"id": 5,
"optionName": "2겹 식빵수세미 6매",
"price": 8900
}
]
},
"error": null
}
options를 보니, 아래와 같이 필요해보입니다
- id : PK
- productId : FK->EProduct.id
- optionName : 옵션 이름
- price : 옵션 가격
- createDate : 생성 날짜
- updateDate : 수정 날짜
Cart (장바구니)
{
"success": true,
"response": {
"products": [
{
"id": 1,
"productName": "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전",
"carts": [
{
"id": 65,
"option": {
"id": 1,
"optionName": "01. 슬라이딩 지퍼백 크리스마스에디션 4종",
"price": 10000
},
"quantity": 5,
"price": 50000
},
{
"id": 66,
"option": {
"id": 2,
"optionName": "02. 슬라이딩 지퍼백 플라워에디션 5종",
"price": 10900
},
"quantity": 5,
"price": 54500
}
]
}
],
"totalPrice": 104500
},
"error": null
}
- id : PK
- userId : FK -> User.id
- orderItem : FK -> Item.id
- totalPrice : 장바구니 가격
- quantity : 장바구니에 들어간 갯수
- createDate : 생성 날짜
- updateDate : 수정 날짜
Order(주문)
{
"success": true,
"response": {
"products": [
{
"productName": "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전",
"items": [
{
"id": 65,
"option": {
"id": 1,
"optionName": "01. 슬라이딩 지퍼백 크리스마스에디션 4종",
"price": 10000
},
"quantity": 5,
"price": 50000
}
],
},
{
"productName": "삼성전자 JBL JR310 외 어린이용/성인용 헤드셋 3종!",
"items": [
{
"id": 3,
"option": {
"id": 1,
"optionName": "JR310BT (무선 전용) - 레드",
"price": 10000
},
"quantity": 5,
"price": 50000
}
],
}
],
"totalPrice": 104500
},
"error": null
}
- id : 주문 번호(PK)
- userId : FK -> User.id
- orderItem : FK -> Item.id
- totalPrice : 장바구니 가격
- createDate : 생성 날짜
- updateDate : 수정 날짜
Item(주문 아이템)
위의 주문 Item 필드를 확인하면 아래와 같은 데이터가 필요합니다
- id : PK
- orderId : FK -> Order.id : 주문 번호
- optionId : FK -> Option.id
- quantity : 옵션 갯수
- createDate : 생성 날짜
- updateDate : 수정 날짜
Product Id를 지운 이유는 option Table을 참조하는데 option table에 productId가 있어서 item을 unique하게 구분 할 수 있기 때문입니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'프로젝트 > 카카오 테크 캠퍼스' 카테고리의 다른 글
🐥 카카오테크캠퍼스 - 2단계 2주차 과제 (0) | 2023.07.03 |
---|---|
🐥 카카오테크캠퍼스 - 2단계 1주차 Entity 최종 설계 (0) | 2023.06.29 |
🐥 카카오테크캠퍼스 - 2단계 1주차 Entity 기본 설계 (0) | 2023.06.27 |
🐥 카카오테크캠퍼스 - 2단계 1주차 과제 분석 (0) | 2023.06.27 |
🐥 카카오 테크 캠퍼스 - 노션 캘린더 구글로 마이그레이션하기 (0) | 2023.04.24 |