๊ณผ์ ๋ช
1. ์๊ตฌ์ฌํญ๋ถ์ / API์์ฒญ ๋ฐ ์๋ต ์๋๋ฆฌ์ค ๋ถ์
2. ์๊ตฌ์ฌํญ ์ถ๊ฐ ๋ฐ์ ๋ฐ ํ
์ด๋ธ ์ค๊ณ๋
๊ณผ์ ์ค๋ช
1. ์๊ตฌ์ฌํญ ์๋๋ฆฌ์ค๋ฅผ ๋ณด๊ณ ๋ถ์กฑํด ๋ณด์ด๋ ๊ธฐ๋ฅ์ ํ๋ ์ด์ ์ฒดํฌํ์ฌ README์ ๋ด์ฉ์ ์์ฑํ์์ค.
2. ์ ์๋ ํ๋ฉด์ค๊ณ๋ฅผ ๋ณด๊ณ ํด๋น ํ๋ฉด์ค๊ณ์ ๋ฐฐํฌ๋ ๊ธฐ์กด ์๋ฒ์ API์ฃผ์๋ฅผ ๋งค์นญํ์ฌ README์ ๋ด์ฉ์ ์์ฑํ์์ค. (์นด์นด์ค ํ๋ฉด์ค๊ณ ์๋๋ฆฌ์ค๊ฐ ์์)
3. ๋ฐฐํฌ๋ ์๋ฒ์ ๋ชจ๋ API๋ฅผ POSTMAN์ผ๋ก ์์ฒญํด๋ณธ ๋ค ์๋ต๋๋ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๊ณ ๋ถ์กฑํ ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ธ์ง ์ฒดํฌํ์ฌ README์ ๋ด์ฉ์ ์์ฑํ์์ค.
4. ํ ์ด๋ธ ์ค๊ณ๋ฅผ ํ์ฌ README์ ER-Diagram์ ์ถ๊ฐํ์ฌ ์ ์ถํ์์ค.
- API ์์ฒญ ์๋ต์ ๋ฐ๋ผ ํ ์ด๋ธ์ ์์ธกํด์ ์์ฑ
- er-diagram ์ค๊ณ
04) ํ ์ด๋ธ ์ค๊ณ๋ฅผ ํ์ฌ README์ ER-Diagram์ ์ถ๊ฐํ์ฌ ์ ์ถํ์์ค.
์นด์นด์คํ ํฌ๋ฅผ ์งํํ๋ฉฐ SQL์ ๋ํด ๋ฐฐ์ฐ๊ธด ํ์ง๋ง, ์ฌ์ฉ๋ฒ๊ณผ ์ค์ต ์์ฃผ๋ก ๋ฐฐ์ ๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ๊ณผ์ ๋ฅผ ์งํํ๋ฉฐ SQL ๋ฌธ๋ฒ๋ค์ ํ๋์ฉ ์ตํ๊ฐ๋ณด๋ ค๊ณ ํ๋ค.
1. User ํ ์ด๋ธ
- id : PK
- username : ์ฌ์ฉ์ ์ด๋ฆ
- email : ์ฌ์ฉ์ ์ด๋ฉ์ผ ⇒ UNIQUE
- password : ์ฌ์ฉ์ ํจ์ค์๋
user ํ ์ด๋ธ์ ํ์ํ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ์ด๋ฅผ ํ ๋๋ก sql๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
email varchar(100) NOT NULL,
password varchar(256) NOT NULL,
username varchar(45) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY email_UNIQUE (email)
);
User ํ ์ด๋ธ์์ id, email, password, username์ ํ์์ ์ผ๋ก ์ ๋ ฅ๋ฐ์์ผ ํ๋ ํ๋์ด๋ฏ๋ก, 'NOT NULL'๊ณผ ๊ฐ์ ์ ์ฝ ์ฌํญ์ ๋ฃ์ด์ค๋ค.
id ๊ฐ์ ๊ฒฝ์ฐ PRIMARY KEY('id')๋ก ์ ๋ ฅํ์ฌ PK๋ก ์ค์ ํด์ฃผ์์ผ๋ฉฐ AUTO_INCREMENT๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋ ๋๋ง๋ค ์๋์ผ๋ก 1์ฉ ์ฆ๊ฐ์์ผ ์ฃผ๋ ์์ฑ์ผ๋ก, id๊ฐ์ด ์ ๋ ฅ๋ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐํ๋๋ก ํ๋ค.
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=goddlaek&logNo=221005664911
[Mysql] Auto Increment ์ฌ์ฉํ๊ธฐ
์คํค๋ง๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด ๋ฐ์ดํฐ์ ์๋ฅผ p.k๋ก ์ค์ ํด์ผ ํ ๋๊ฐ ์๋ค. ์ด๋ด๊ฒฝ์ฐ ์๋ก ๋ฐ์ดํฐ๋ฅผ insertํ ๋๋ง...
blog.naver.com
email ํ๋๋ UNIQUE KEY๋ฅผ ๊ฑธ์ด์ฃผ์ด ํด๋น ์ด์ ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ์ง ์์ผ๋ฉฐ, ๊ฐ ํ์ ํด๋น ์ด์ ๊ฐ์ด ๊ณ ์ ํ๋๋ก ํ๋ค. ์ฆ, ๋ค๋ฅธ ์ ์ ๊ฐ ๊ฐ์ ์ด๋ฉ์ผ๋ก ๊ฐ์ ์ ํ ์ ์๋๋ก ํ๋ค.
https://thisisprogrammingworld.tistory.com/133
[MySQL]๋ ์ง/์๊ฐ ํ์ ๊ณผ TIMESTAMP ์นผ๋ผ ์์ฑ
MySQL์ ๋ ์ง/์๊ฐ ํ์ MySQL์ ๋ ์ง/์๊ฐํ์ ์ผ๋ก๋ DATE, DATETIME, TIME, TIMESTAMP๊ฐ ์๋ค. DATE ํ์ ์ ๋ ์ง๋ง ํฌํจํ๋ ํ์ YYYY-mm-dd ํ์์ผ๋ก ์ ๋ ฅ ๊ฐ๋ฅ 1000-01-01๋ถํฐ 9999-12-31๊น์ง๋ง ์ ๋ ฅ ๊ฐ๋ฅ DATETIME
thisisprogrammingworld.tistory.com
2. Product ํ ์ด๋ธ
- id : PK
- product_name : ์ํ๋ช
- description : ์ํ ์ค๋ช
- image : ์ํ ์ฌ์ง
- price : ์ํ ๊ฐ๊ฒฉ
Product ํ ์ด๋ธ์ ํ์ํ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ๊ณ , SQL๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
CREATE TABLE product (
id int(11) NOT NULL AUTO_INCREMENT,
product_name varchar(100) NOT NULL,
description varchar(1000),
image varchar(500),
price int(11),
PRIMARY KEY (id)
);
https://heavening.tistory.com/85
int์ ์ข ๋ฅ ๋ฐ ํฌ๊ธฐ tinyint, smallint, int, bigint ์ด๊ฐ๋จ ์ ๋ฆฌ
int๊ฐ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ ํ์ ์ ํฌ๊ธฐ๊ฐ ๊ฐ๋ ํท๊ฐ๋ฆฌ๋๋ฐ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํฉ๋๋ค. int๋ inteager์ ์ฝ์์ ๋๋ค. int๋ ์ ์์ ๋๋ค. ์์ซ์ ์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ถ์ decimal ๊ฐ์ ๋ฐ์ดํฐ ํ์์ ์ฌ์ฉํ์ธ์ :)
heavening.tistory.com
https://m.blog.naver.com/darkxpavmffj/90089405466
Mysql varchar(50) ๊ณผ char(50)์ ์๋ฏธ
DB ์์ varchar์ด๋ผ๋ ๊ฒ์ ๊ฐ๋ณ๊ธธ์ด ๋ฌธ์์ด์ ์๋ฏธํ๋ฉฐ varchar(50)์ 50byte๊น์ง ๋ฃ...
blog.naver.com
3. Option ํ ์ด๋ธ
- id : PK
- product_id : FK ⇒ priduct(id)
- option_name : ์ต์
์ด๋ฆ
- price : ์ต์
๊ฐ๊ฒฉ
Product ํ ์ด๋ธ๊ณผ Option ํ ์ด๋ธ์ ๋ณ๋๋ก ์์ฑํ๋ ์ด์ ๋, ์ด ๋์ ๊ด๊ณ๊ฐ 1 ๋ N ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์๋ ์ค๋ณต์ ์ต์ํํ๊ณ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์ง ๋ฐ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํํ๋ค. ์ด๋ Product ํ ์ด๋ธ๊ณผ Option ํ ์ด๋ธ์ ๋๋์ด ์ค๊ณํจ์ผ๋ก์จ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ํผํ๊ณ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์๋ค. ๋ํ, ์ต์ ์ ๊ฐ๊ฒฉ, ์ฌ๊ณ ์๋, ์ ์กฐ์ฌ ์ ๋ณด ๋ฑ์ ์ถ๊ฐ๋ก ์ ์ฅํด์ผ ํ ์๋ ์๊ธฐ ๋๋ฌธ์, ์ด๋ฌํ ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ ์ํด option ํ ์ด๋ธ์ ๋ฐ๋ก ์์ฑํ๊ณ ํ์ํ ์์ฑ์ ์ถ๊ฐํ ์ ์๋ค.
https://appmaster.io/ko/blog/deiteo-jeonggyuhwaran-mueosinga
๋ฐ์ดํฐ ์ ๊ทํ๋ ๋ฌด์์ ๋๊น? | AppMaster
๋ฐ์ดํฐ ์ ๊ทํ๋ ์ค๋ณต์ฑ์ ์ค์ด๊ณ ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ๊ตฌ์กฐํํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ์ฌ๊ธฐ์์ ์์ธํ ์์๋ณด๊ธฐ
appmaster.io
CREATE TABLE option (
id int(11) NOT NULL AUTO_INCREMENT,
product_id int(11) DEFAULT NULL,
option_name varchar(100) NOT NULL,
price int(11) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (product_id) REFERENCES product (id)
);
FK(Foreign Key)๋ฅผ ์ฌ์ฉํ์ฌ Product ํ ์ด๋ธ์ id์ ๋ถ๋ฌ์ ํ์ ์กฐ์ธํ์ฌ ์ ํ๊ณผ ์ต์ ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ ์ ์ฝ์กฐ๊ฑด(constraint)๋ฅผ ๊ฑธ์ด์ค๋ค.
https://jerryjerryjerry.tistory.com/49
[SQL] ํค(์ํผํค,๋์ฒดํค,ํ๋ณดํค,๊ธฐ๋ณธํค,์ธ๋ํค)
* ํค(Key) - ์ด์ ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์ด๊ฑฐ๋ ์ ๊ธ ๋ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก, ๊ฐ์ ๊ฒ์ด ํ๋๋ ์๋ค. ์ฐ๋ฆฌ์ง ์ด์ ๊ฐ ์์ง์ ์ด์ ๋ ๋ค๋ฅด๋ฏ์ด ๋ง์ด๋ค. - ์ด์ ๊ฐ์ด ํค๋ผ๋ ๊ฒ์ ๋ฌด์ธ๊ฐ๋ฅผ ์๋ณํ๋ ๊ณ ์ ํ ์๋ณ์(
jerryjerryjerry.tistory.com
https://runtoyourdream.tistory.com/129
[SQL] ์ ์ฝ์กฐ๊ฑด, Constraint(NOT NULL, UNIQUE, PRIMARY KEY(๊ธฐ๋ณธํค), FOREIGN KEY(์ธ๋ํค))!
ํ ์ด๋ธ ์์ฑ์์ Constraint๋ฅผ ์ฌ์ฉํด์ ์ ๋ ฅํ๋ ์๋ฃ์ ๋ํด์ ์ ์ฝ, ์ฆ ๊ท์น์ ์ ํด์ค ์ ์๋๋ฐ์. ์ด๋ ์ ํด์ง ์ ์ฝ์ ๋ฐ๋ผ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ์ด ๋ฉ๋๋ค. ์ ์ฝ์ ๋ฐฐ๋ฐ๋๋ค๋ฉด ์๋ฃ ์ ๋ ฅ์ด ๊ฑฐ๋ถ๋
runtoyourdream.tistory.com
์ค์ต ๋ฉํ ๋๊ณผ์ Q&A ์๊ฐ์์ ์ธ๋ํค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ์ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ํ์๋ฉด์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ค์ด์ฃผ์ จ๋๋ฐ, ์ธ๋ํค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์ถํ์ ์์๋ณด๊ณ ์ถ๋ค.
4. Cart ํ ์ด๋ธ
- id : PK
- user_id : FK ⇒ user(id)
- option_id : FK ⇒ option(id)
- total_price : ์ฅ๋ฐ๊ตฌ๋ ๊ฐ๊ฒฉ
- quantity : ์ฅ๋ฐ๊ตฌ๋์ ๋ค์ด๊ฐ ๊ฐฏ์
CREATE TABLE cart (
id int(11) NOT NULL AUTO_INCREMENT,
user_id int(11) NOT NULL,
option_id int(11) NOT NULL,
quantity int(11) NOT NULL,
total_price int(11) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (user_id) REFERENCES user(id),
FOREIGN KEY (option_id) REFERENCES option(id),
);
user ํ ์ด๋ธ์ id, option ํ ์ด๋ธ์ id ์ ๋ณด๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ ํค๋ฅผ ์ฐธ์กฐํ๋ค. ์ด๋ค ์ ํ์ธ์ง์ ๋ํ ์ ๋ณด๊ฐ ํ์์๋ ์ด์ ๋ Option ํ ์ด๋ธ์ ์ด๋ฏธ ํด๋น ์ต์ ์ ์ ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
5. Order ํ ์ด๋ธ
- id : ์ฃผ๋ฌธ ๋ฒํธ(PK)
- user_id : FK ⇒ user(id)
- totalPrice : ์ฅ๋ฐ๊ตฌ๋ ๊ฐ๊ฒฉ
CREATE TABLE order (
id int(11) NOT NULL AUTO_INCREMENT,
user_id int(11) NOT NULL,
totalprice int(11),
PRIMARY KEY (id),
FOREIGN KEY (user_id) REFERENCES user(id)
);
Order ํ ์ด๋ธ์๋ ์ ์ ์ ๋ณด์ ๋ํ ํ๋๋ง ํ์ํ ์ด์ ๋ ํ๋์ ์ฃผ๋ฌธ์ ์ฌ๋ฌ ๋ช ์ ์ ์ ๋ฅผ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ์ฃผ๋ฌธ ํ ์ด๋ธ์์๋ ์ ์ ์ ์ ๋ณด๋ง ๊ฐ์ง๊ณ , ์์ดํ ํ ์ด๋ธ์์ ์ฃผ๋ฌธ์ ๋ํ ์ ๋ณด์ ๊ตฌ๋งค๋ ์ ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋๋ค.
6. Item ํ ์ด๋ธ
- id : PK
- orderId : FK ⇒ order(id)
- optionId : FK ⇒ option(id)
- quantity : ์ต์
๊ฐฏ์
- price : ๊ฐ๊ฒฉ
CREATE TABLE item (
id int(11) NOT NULL AUTO_INCREMENT,
option_id int(11) NOT NULL,
quantity int(11) NOT NULL,
price int(11) NOT NULL,
order_id int(11) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (order_id) REFERENCES order(id),
FOREIGN KEY (option_id) REFERENCES option(id),
);
๊ตฌ๋งค๋ ์ ํ์ ์ต์ ์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๊ณ ๊ตฌ๋งคํ ์๋๊ณผ ๊ฐ๊ฒฉ์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๋ค. ํด๋น ์ต์ ์ ๊ฐ๊ฒฉ์ด ๋ฌ๋ผ์ง์ ์์ผ๋ฏ๋ก, (๊ตฌ๋งค ์๊ธฐ์ ๊ฐ๊ฒฉ๊ณผ ํ์ฌ์ ๊ฐ๊ฒฉ์ ๋ณ๋ ๋ฑ) ๊ฐ๊ฒฉ ํ๋๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ๋ฃ์ด์ค๋ค. ๋ํ, ์ด๋ค ์ฃผ๋ฌธ์ ์์ดํ ์ธ์ง์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๋ค.
ER-Diagram
'๐ช kakaotech campus' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์นดํ ์ผ | [STEP2 clone coding] 2์ฃผ์ฐจ ๊ณผ์ - (2) (0) | 2023.07.07 |
---|---|
์นดํ ์ผ | [STEP2 clone coding] 2์ฃผ์ฐจ ๊ณผ์ - (1) (0) | 2023.07.04 |
์นดํ ์ผ | [STEP2 clone coding] 1์ฃผ์ฐจ ๊ณผ์ - (2) (0) | 2023.06.29 |
์นดํ ์ผ | [STEP2 clone coding] 1์ฃผ์ฐจ ๊ณผ์ - (1) (0) | 2023.06.28 |
์นดํ ์ผ | ์นด์นด์คํก ์ผํํ๊ธฐ ํด๋ก ํ๋ก์ ํธ ๊ณผ์ ๐ (0) | 2023.06.27 |