์ค๋์ ๊ฐ์๋ฅผ ๋ฃ์ง ์๊ณ , 9์๋ถํฐ zep์ ๋ชจ์ฌ์ ํ๋ฃจ์ข ์ผ ์นด๋ฉ๋ผ ์ผ๊ณ ํ๋ก์ ํธ ์ํํ๋ ๋ ์ด์๋ค.
ํ๋ก์ ํธ๋ ์ด 2๊ฐ. ํฌํธํด๋ฆฌ์ค ํ์ด์ง ๋ง๋ค๊ธฐ์, ์๊ตฌ์ฌํญ์ ๋ง๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง์ ํ๋ ํ๋ก์ ํธ์๋ค. ํฌํธํด๋ฆฌ์ค ํ์ด์ง๋ ์ด๊ฒ์ ๊ฒ ์กฐ๊ธ์ฉ ๊ณ์ ์์ ์ค
๐ERD
Entity Relationship Diagram, ์์คํ ์ ์ํฐํฐ๋ค์ด ๋ฌด์์ด ์๋์ง, ์ด๋ค ๊ด๊ณ๊ฐ ์๋์ง ๋ํ๋ด๋ ๋ค์ด์ด๊ทธ๋จ
์๊ตฌ์ฌํญ
๊ฐ์ฌ๋๊ป์ ํ๋ฉด ์์ด์ดํ๋ ์์ ์ฃผ์ จ๋ค. ๊ณต์ฐ ํฐ์ผํ ์๋น์ค์ ๋ํ ์์ด์ดํ๋ ์์ด๊ณ , ์ฃผ์ด์ง ํ์ด์ง๋ 5๊ฐ์๋ค.
1. ๊ณต์ฐ ๋ชฉ๋ก ํ์ด์ง
2. ๊ณต์ฐ ์์ธ ํ์ด์ง
3. ๋ก๊ทธ์ธ ํ์ด์ง
4. ํ์๊ฐ์ ํ์ด์ง
5. ์ฃผ๋ฌธ ๋ด์ญ ํ์ด์ง
์ฐ์ ์์ฑํ ERD๋ ๋ค์๊ณผ ๊ฐ๋ค!
๐ ํ ์ด๋ธ
user_info
์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ. ๋ก๊ทธ์ธ/ํ์๊ฐ์ ๊ธฐ๋ฅ๊ณผ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ค.
id
: ์ฌ์ฉ์ ์๋ณ์ ์ํ ๊ธฐ๋ณธ ํค.AUTO_INCREMENT
๋ฅผ ์ฌ์ฉํด ์๋์ผ๋ก ์ฆ๊ฐํ๋ค.email
,name
,password
: ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ์ ํ์ํ ํ์ ํ๋์ด๋ค.VARCHAR(100)
๋ก ์ ์ธํ์๋ค.created_at
,updated_at
: ๊ฐ๊ฐ ํ์๊ฐ์ ์๊ฐ๊ณผ ์ ๋ณด ์์ ์๊ฐ์ ์ ์ฅํ๋ ํ ์ด๋ธ. ์๊ตฌ์ฌํญ ํ์ด์ง์์๋ ๋ณด์ด์ง ์์ง๋ง, ์ฌ์ฉ์ ํ ์ด๋ธ ์์ฑ ์ ํ์๋๋ ํ๋๋ผ๊ณ ์๊ฐํ์ฌ ํฌํจํ์๋ค. ๋ ๋ค ์๊ฐ์ ์๋์ผ๋ก ๊ธฐ๋กํ๋๋กCURRENT_TIMESTAMP
๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
shows
๊ณต์ฐ ์ ๋ณด๋ฅผ ๋ด๋ ํ ์ด๋ธ. ๊ณต์ฐ ๋ชฉ๋ก๊ณผ ๊ณต์ฐ ์์ธ ํ์ด์ง์ ์ถ๋ ฅ๋๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
id
: ๊ณต์ฐ ์๋ณ์ฉ ๊ธฐ๋ณธ ํค์ด๋ค.user_info
์ ๋ง์ฐฌ๊ฐ์ง๋กAUTO_INCREMENT
๋ฅผ ์ ์ฉํ์ฌ ์๋์ผ๋ก ์ฆ๊ฐํ๋ฉฐ, ํ์ ํ ํ ์ด๋ธ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก id๋ฅผ ์ค์ ํ์๋ค.title
,description
:VARCHAR()
๋ก ์ ์ธํ์์ผ๋ฉฐ, ์ค๋ช ์ ๊ธด ๋ฌธ์ฅ์ ์ํดVARCHAR(1000)
์ ์ฌ์ฉํ๋ค.price
,quantity
: ํฐ์ผ ๊ฐ๊ฒฉ๊ณผ ๊ณต์ฐ ์ ์ฒด ์ข์ ์ ์ด๋ค.show_date
: ๊ณต์ฐ ๋ ์ง ๋ฐ ์๊ฐ์ ์ ์ฅํ๋ ํ๋.created_at
๋ฑ๊ณผ ๋ฌ๋ฆฌ, ๊ธฐ๋ณธ๊ฐ์ ์ฃผ์ง ์๊ณ ์ฌ์ฉ์๊ฐ ์ง์ ์ ๋ ฅํ๋ ํํ๋ก ์ค์ ํ์๋ค.created_at
: ๊ณต์ฐ ์ ๋ณด๋ฅผ ๋ฑ๋กํ ์๊ฐ์ ์ ์ฅํ๋ค.
poster
๊ณต์ฐ์ ์ฐ๊ฒฐ๋๋ ์ด๋ฏธ์ง ์ ๋ณด๋ฅผ ๋ด๋ ํ ์ด๋ธ์ด๋ค.
id
: ํฌ์คํฐ ์๋ณ์ฉ ํคpath
: ์ค์ ์ด๋ฏธ์ง URL ๋๋ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ๋ค.
โ์ shows์ poster์ ๋ฐ๋ก ๊ตฌ์ฑํ๋?
ํ๋์ ๊ณต์ฐ์ด ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ง ์๋ ์๊ณ , ์ฌ๋ฌ ๊ณต์ฐ์ด ํ๋์ ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ ์๋ ์๋ค. ๋ ์ด๋ฏธ์ง ๋ณ๊ฒฝ์ด๋ ์ฌ์ฌ์ฉ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ํ ์ด๋ธ๋ก ๊ตฌ์ฑํ๊ณ , ์ธ๋ํค๋ก ์ฐธ์กฐํ๋๋ก ๊ตฌ์ฑํ๋ค.
orders
์ฌ์ฉ์ ์ ์ฒด ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ. ์ฅ๋ฐ๊ตฌ๋๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค.
id
: ์ฃผ๋ฌธ ์๋ณ์ฉ ๊ธฐ๋ณธ ํคorder_code
: ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง ๊ณ ์ ์ฃผ๋ฌธ๋ฒํธ์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์id
๋AUTO_INCREMENT
๋๋ INTํ์ด์ง๋ง, ์ฌ์ฉ์์๊ฒ ํ์๋๋ ์ฃผ๋ฌธ๋ฒํธ๋ ๋ฐ๋ก ์์ฑํ์ฌ ์ ์ฅํ๋ ๋ฐฉ์์ ์๊ฐํ์ฌ ๊ตฌ์ฑํ๋ค.user_id
: ์ฃผ๋ฌธํ ์ฌ์ฉ์.user_info.id
๋ฅผ ์ฐธ์กฐํ๋ ์ธ๋ํค์ด๋ค.total_price
: ์ ์ฒด ์ฃผ๋ฌธ ๊ธ์กorder_date
: ์ฃผ๋ฌธ ์์ ์ ์๋์ผ๋ก ๊ธฐ๋กํ๋๋กDATETIME CURRENTSTAMP
๋ฅผ ์ฌ์ฉํ์์
order_items
์ฃผ๋ฌธํ๋ ๊ณต์ฐ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ
id
: ์ฃผ๋ฌธ ํญ๋ชฉ ์๋ณ ํคorder_id
: ์ด๋ค ์ฃผ๋ฌธ์ ์ํ ํญ๋ชฉ์ธ์ง๋ฅผ ๋ํ๋ธ๋ค.show_id
: ์ด๋ค ๊ณต์ฐ์ ์ฃผ๋ฌธํ๋์ง ๋ํ๋ธ๋ค.price
: ์ฃผ๋ฌธํ๋ ๊ณต์ฐ ๊ฐ๊ฒฉquantity
: ์ฃผ๋ฌธํ ์๋
โorders์ order_items๋ฅผ ์ ๋ฐ๋ก ๊ตฌ์ฑํ๋?
ํ ๋ฒ์ ์ฃผ๋ฌธ์ ์ฌ๋ฌ ๊ฐ์ ๊ณต์ฐ์ ๋ด์ ์ ์์ด, ์ด๋ฅผ ๋ฌถ๋ ์์ ๊ฐ๋ ์ผ๋ก order์ ์์ฑํ๋ค.
ํ ์ด๋ธ ๊ด๊ณ
๐ user_info <-> orders
- ๊ด๊ณ: 1:N
- ์ค์ : orders.user_id -> user_info.id(FK)
- ์ด์ : ํ ๋ช ์ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๋ฒ ๊ตฌ๋งคํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ
๐ orders <-> order_items
- ๊ด๊ณ: 1:N
- ์ค์ : ordes_items.order_id -> order.id
- ์ด์ : ํ ๋ฒ ์ฃผ๋ฌธํ ๋ ์ฌ๋ฌ ๊ฐ ๊ณต์ฐ์ ์๋งคํ ์ ์๊ธฐ ๋๋ฌธ์ ํญ๋ชฉ ๋จ์๋ก ๋ถ๋ฆฌํ์๋ค.
๐ order_items <-> shows
- ๊ด๊ณ: N:1
- ์ค์ : order_items.shows_id ->shows.id
- ์ด์ : ์ฃผ๋ฌธ ํญ๋ชฉ ํ๋๋ ํ๋์ ๊ณต์ฐ์ ์ฐธ์กฐํ์ง๋ง, ํ ๊ฐ์ ๊ณต์ฐ์ ์ฌ๋ฌ๊ฐ ์ฃผ๋ฌธํ ์ ์์
๐ shows <-> poster
- ๊ด๊ณ: N:1
- ์ค์ : shows.poster_id => poster.id(FK)
- ์ด์ : ํ๋์ ํฌ์คํฐ๋ฅผ ์ฌ๋ฌ ๊ณต์ฐ์ด ์ฌ์ฌ์ฉํ ์ ์๋ค.
๐์๋๋ ํ๋์ ๊ณต์ฐ์ด ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ์ฐธ์กฐํ ์ ์๋ ๊ตฌ์กฐ(๋ค๋๋ค ๊ด๊ณ)๋ฅผ ์ผ๋์ ๋์์ง๋ง, ํ์ฌ ํ ์ด๋ธ ๊ตฌ์กฐ์์๋ ์ค๊ฐ ํ ์ด๋ธ ์์ด ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ด๋ ต๋ค. ํ์ฌ ๊ตฌ์กฐ์์๋ ํ๋์ ๊ณต์ฐ์ด ํ๋์ ์ด๋ฏธ์ง๋ง ์ฐธ์กฐํ ์ ์์ผ๋ฉฐ, ํ๋์ ์ด๋ฏธ์ง๋ ์ฌ๋ฌ ๊ณต์ฐ์์ ์ฌ์ฌ์ฉ๋ ์ ์๋ค.
DDL
โ
user_info ํ
์ด๋ธ
CREATE TABLE user_info (
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> email VARCHAR(100) NOT NULL,
-> name VARCHAR(100) NOT NULL,
-> password VARCHAR(100) NOT NULL,
-> created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
-> updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
-> );
โ
shows ํ
์ด๋ธ
CREATE TABLE shows(
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> title VARCHAR(100) NOT NULL,
-> poster_id INT NOT NULL,
-> description VARCHAR(1000),
-> price INT NOT NULL,
-> quantity INT NOT NULL,
-> created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
-> FOREIGN KEY (poster_id) REFERENCES poster(id)
-> );
โ
poster ํ
์ด๋ธ
CREATE TABLE poster (
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> path VARCHAR(255) NOT NULL
-> );
โ
orders ํ
์ด๋ธ
CREATE TABLE orders(
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> order_code VARCHAR(50) NOT NULL,
-> user_id INT NOT NULL,
-> total_PRICE INT NOT NULL,
-> order_date DATETIME NOT NULL,
-> FOREIGN KEY (user_id) REFERENCES user_info(id)
-> );
โ
orders_item ํ
์ด๋ธ
CREATE TABLE order_items(
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> order_id INT NOT NULL,
-> show_id INT NOT NULL,
-> price INT NOT NULL,
-> quantity INT NOT NULL,
-> FOREIGN KEY (order_id) REFERENCES orders(id),
-> FOREIGN KEY (show_id) REFERENCES shows(id)
-> );
โ์ค๋ฅ: ์์ฝ์ด ์ถฉ๋
์ฒ์์๋ ํ ์ด๋ธ๋ช ์ show, order๋ก ์ค์ ํ๊ณ DDL์ ์์ฑํ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'show(
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
poster_...' at line 1
์ด๋ MariaDB์์ ์์ฝ์ด์ ์ถฉ๋ํด์ ๋ฐ์ํ๋ ์ค๋ฅ์๋ค.
๋ฐฑํฑ์ผ๋ก ๊ฐ์ธ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๊ฑฐ๋, ๋๋ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ฝ๊ฒ ๊ฐ๋ฅํ ๋ฌธ์ ์๋ค. ๋๋ shows, orders๋ก ๋ณต์ํ์ผ๋ก ํ ์ด๋ธ๋ช ์ ๋ณ๊ฒฝํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ์์ฝ์ด๋ฅผ ์ถฉ๋ถํ ๊ณ ๋ คํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ชจ๋ธ๋งํ๋ผ๋ ๊ตํ์ ์ป์๋ค..
โ์๋ก์ด ์ปฌ๋ผ ์ถ๊ฐํ๊ธฐ
ํ ์ด๋ธ์ ์์ฑํ ๋ ์ค์๋ก ์ปฌ๋ผ์ ํ๋ ๋นผ๋จน์๋ค... ALTER TABLE ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋นผ๋จน์ ์ปฌ๋ผ์ ์ถ๊ฐํด์ฃผ์๋ค.
ALTER TABLE shows
ADD COLUMN show_date DATETIME NOT NULL;
SQL๋ฌธ
DDL๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๊ณ , SQL๋ฌธ์ ์ฌ์ฉํด ๋ฐ์ดํฐ ์ฝ์ , ์กฐํ, ์์ ์ ํด๋ณด์๋ค.
โ
user_info
//์กฐํ
SELECT * FROM user_info
//์
๋ ฅ
INSERT INTO user_info(email, name password) VALUES ("monicx@email.com", "dakyung", "1234@");
//์์
UPDATE user_info SET name = "hwang dakyung" WHERE id = 1;
โ
shows
//์กฐํ
SELECT * FROM shows;
//์
๋ ฅ
ISERT INTO shows (title, poste_id, description, price, quantity) VALUES ("....");
//์์
UPDATE shows SET description = "์ฌ๋ฐ์" WHERE id = 1;
โ
poster
//์กฐํ
SELECT * FROM poster;
//์
๋ ฅ
INSERT INTO poster (path) VALUES ("https://img.com");
//์์
UPDATE poster SET poster = "https://wicked.com" WHERE id = 1;
โ
orders
//์กฐํ
SELECT * FROM orders;
//์
๋ ฅ
INSERT INTO orders (order_code, user_id, total_price) VALUES ("...");
โ
order_items
//์กฐํ
SELECT * FROM order_items;
//์
๋ ฅ
INSERT INTO order_items (order_id, show_id, price, quantity) VALUES (1, 1, 132000, 2);
//์์
UPDATE order_items SET quantity = 1 WHERE id = 1;
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ ๋ง์ด ์ง๋ดค์ง๋ง, ERD๋ฅผ ์ด๋ ๊ฒ ๊ฐ ์ก๊ณ ๋ง๋ค์ด๋ณธ๊ฑด ๊ฑฐ์ ์ฒ์์ธ ๊ฒ ๊ฐ๋ค. ์๊ณต ํ ๋ ํด๋ณธ ๊ฒ ๊ฐ๊ธฐ๋ ํ๊ณ ..? ํ ์ด๋ธ ๋ค ๋ง๋ค๊ณ ์ ์ผ๋ก ์ฐ๊ฒฐ๊น์ง ํด๋์ผ๋ ๋ญ๊ฐ ๋ญ๊ฐ ๋ฉ์๋ค.
DDL๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง๋ค ๋ ์คํ๋ฅผ ๋๋ฌด ๋ง์ด ๋ด์ ํ๋ ํ ์ด๋ธ ๋ง๋๋๋ฐ 10๋ถ๋ ๋ ๊ฑธ๋ ธ๋ค. ์ง์ง ๋๋ฌด ํ๋๊ณ ์ง์ฆ๋ฌ์ง๋ง ๋๋ถ์ ์ด์ SQL๋ฌธ ๊ธฐ๋ณธ ์ ๋๋ ๋๋ฌด ์ฝ๊ฒ ์ธ ์ ์๊ฒ ๋๋ฏ. ๊ฐ๋จํ์ง๋ง ๋ง์ ๋์์ด ๋ ํ๋ก์ ํธ์ธ ๊ฒ ๊ฐ๋ค.
+ ํฌํธํด๋ฆฌ์ค ๋ง๋๋ ์ค๐ ๏ธ
'๐๏ธํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค > ํ๋ก์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ๋ธ์ฝ์ค] ๐พํ ๋์ค ๋ง์ผ ๋ฐฑ์๋ ์ฐ๊ฒฐํ๊ธฐ(node.js, mariaDB) (0) | 2025.04.04 |
---|---|
[๋ฐ๋ธ์ฝ์ค]๐พํ ๋์ค ๋ง์ผ ๋ง๋ค๊ณ ๋ฐฐํฌํ๊ธฐ(HTML,CSS,Netlify) (0) | 2025.04.03 |