๐ก ERD ์ ์คํค๋ง
- ์ฌ์ค ๊ตฌ์กฐ์ ์ผ๋ก ๊ฐ์ง๋ง ERD๋ ์ฌ๋ฌ ๊ด๊ณ ๋ชจ๋ธ์ ์ค๊ณ๋๋ผ๊ณ ๋ณด๋ฉด ๋๊ณ ,
์คํค๋ง๋ ERD๋ ๋ค๋ฅธ ๋ค์ด์ด๊ทธ๋จ์์ ์ ์ํ ๊ฒ์ ๋ฐํ์ผ๋ก ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์งํฉ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ
์ค๋ ๊ณผ์ ๋ ์๋์ ํ ์ด๋ธ ๊ตฌ์กฐ๋ค์ SQL ์ฟผ๋ฆฌ๋ฌธ์ ์ง์ ์์ฑํ์ฌ ๋ง๋ค์ด๋ณด๋ ๊ฒ์ด์๋ค! โฌ๏ธ
์ฌ์ค ์ค๋์ ๊ณผ์ ๋ ๋ณด๊ณ ๊ทธ๋ฅ ๋ฐ๋ผ ๋ง๋ค๋ฉด ๋๊ธฐ ๋๋ฌธ์, ์ด์ ์ด๋ ค์ ๋ ์ธ์คํ๊ทธ๋จ ์คํค๋ง ๋์์ธ์ ํด์ ๊ทธ๋ฐ์ง ์ข ๋ ์ดํด๊ฐ ์ฌ์ ๋ค.
ํ ์ด๋ธ ๊ตฌ์กฐ ํ์ ์๋ ํค์๋๋ค์ ์ค๋ช ํด๋ณด์๋ฉด,
โ
Null
์ดNO
โ null์ด ๋ค์ด์ค๋ฉด ์๋๊ณ , ๋น ๊ฐ์ ํ์ฉํ์ง ์๋๋ค๋ ์๋ฏธ
โ auto_increment
โ key ๊ฐ์ด ์๋์ผ๋ก 1์ฉ ์ฆ๊ฐ๋๋ค๋ ์๋ฏธ
โ current_timestamp
โ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ๋์ ์๊ฐ์ด ์๋์ผ๋ก ๋ค์ด๊ฐ
โ default_generated
โ ๋ํดํธ ๊ฐ์ด ์๋์์ฑ๋๋ค๋ ์๋ฏธ
( ์ด๋ฒ ์์์์๋ ์์์ current_timestamp ์ผ๋ก ๋ํดํธ ๊ฐ์ ์๋์ผ๋ก ๋ฃ์ด์ฃผ๊ธฐ ๋๋ฌธ์ ์ด ์์คํธ๋ผ ์กฐ๊ฑด๋ ์๋์ผ๋ก ํต๊ณผํ์ฌ ์ฐ์ง ์์๋ ๋จ
โ - not nullํ๊ณ default๊ฐ null๋ก ์ง์ ๋์ด ์๋ ๊ฒ์ ๋ฌด์ํ๊ณ ๋์ด๊ฐ๊ธฐ
( ์๋ชป ์ฐ์ฌ์ง ๊ฒ )
์ค๋์ ์ฌ๋ฐ์์ง๋ง ๊ทธ ์ค ์ค๋ ์ด๋ ค์ ๋ ๋ถ๋ถ์,
โ๏ธ Q1 ) NULL๊ณผ not NULL / DEFAULT ๋ฅผ ์ฟผ๋ฆฌ๋ฌธ์ ์ด๋ป๊ฒ ๋ฃ์ด์ผํ๋์ง
โ
โ๏ธ Q2 ) FOREIGN KEY ๋ฅผ ์ด๋ป๊ฒ ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ์ฐธ์กฐํ๋์ง
์ด ๋ ๋ถ๋ถ์ด์๋ค!
๊ทธ๋๋ ์ค๋์ ์๊ฐ์ด ๋ง์ ๋ง์ด ๊ฒ์ํ๋ฉด์ ์ ์์ฑํ๋ค ๐
์๋๋ ๋ด๊ฐ ์์ฑํ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๊ทธ์ ๊ฒฐ๊ณผ๋ก ๋ง๋ค์ด์ง ERD์ด๋ค โฌ๏ธ
CREATE TABLE user (
id int not null primary key auto_increment default null,
username varchar(255) not null default null,
email varchar(255) not null default null,
roleId int null
);
CREATE TABLE content (
id int not null primary key auto_increment default null,
title varchar(255) not null default null,
body varchar(255) not null default null,
created_at timestamp not null default current_timestamp,
userId int default null,
);
CREATE TABLE role (
id int not null primary key auto_increment,
name varchar(255) not null
);
CREATE TABLE category (
id int not null primary key auto_increment,
name varchar(255) not null
);
CREATE TABLE content_category (
id int not null primary key auto_increment,
contentId int not null,
categoryId int not null
);
ALTER TABLE content ADD FOREIGN KEY (userId) REFERENCES user (id);
ALTER TABLE user ADD FOREIGN KEY (roleId) REFERENCES role (id);
ALTER TABLE content_category ADD FOREIGN KEY (contentId) REFERENCES content (id);
ALTER TABLE content_category ADD FOREIGN KEY (categoryId) REFERENCES category (id);
์ฌ๊ธฐ์์ role๊ณผ user / user์ content ๋ ๊ฐ๊ฐ 1:N ๊ด๊ณ์ด์ง๋ง,
content์ category๋ N:M ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ content_category ๋ผ๋ JOIN ํ ์ด๋ธ์ ๋ง๋ค์ด ์๋ก๋ฅผ ์ฐธ์กฐํ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ์ด๋ ค์ ๋ ๋ ๊ฐ์ง์ ๋ํ ๋ต์ ํด๋ณด์๋ฉด,
โ๏ธ Answer1 )
์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ ๋ ๊ฐ๊ฐ์ null๊ฐ๊ณผ default ๊ฐ์ ๋ฐ๋ก ๋ค๋ฅธ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ทธ๋ฅ ๋์ด์ฐ๊ธฐ๋ก ์ญ ์ด์ด์ค๋ค!
โ๏ธ Answer2 )
์ธ๋ํค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง ์ด๋ค.
โ
1. ํ ์ด๋ธ์ ์์ฑํ ๋ ์ปฌ๋ผ๋ค ๋ฐ์
FOREIGN KEY (์ธ๋ํค ๋ฃ์ ์ปฌ๋ผ๋ช ) REFERENCES ์ฐธ์กฐํ ํ ์ด๋ธ๋ช (์ฐธ์กฐํ ์ปฌ๋ผ๋ช )
์ด๋ ๊ฒ ์จ์ฃผ๊ธฐ
โ
2. ALTER / ADD FOREIGN KEY ์ฌ์ฉํ์ฌ, ์์ ๋ด๊ฐ ์์ฑํ ์ฟผ๋ฆฌ๋ฌธ ์ฒ๋ผ
ALTER TABLE ์ธ๋ํค๋ฅผ ๋ฃ์ ํ ์ด๋ธ๋ช ADD FOREIGN KEY (์ธ๋ํค ๋ฃ์ ์ปฌ๋ผ๋ช ) REFERENCES ์ฐธ์กฐํ ํ ์ด๋ธ๋ช (์ฐธ์กฐํ ์ปฌ๋ผ๋ช );
์ด๋ ๊ฒ ์จ์ฃผ๊ธฐ
์ค๋ ์ด ํ์ต์ ์ด์ ํ๊ณ ์ค๋ ์ธ์คํ๊ทธ๋จ ์คํค๋ง๋ฅผ ๋ง๋ค์๋ค๋ฉด ๋ญ๊ฐ ๋ ์ ํ ์ ์์์ํ ๋ฐ ํ๋ ์๊ฐ์ด ๋ค์ง๋ง ๊ทธ๋๋ ์ด์ ์ข ์ด์ ์ ์ด๊ฐ๋ฉฐ ๊ตฌ์กฐ๋ฅผ ์ดํดํ ์๊ฐ์ด ํ๋์ง ์์๋ค๋ ๊ฒ์ ๋๋ผ๊ณ , ๊ทธ๋ฐ ์๊ฐ์ด ์์ด ์ค๋ ๋ ์์ํ๊ฒ ํ๋ค๊ณ ์๊ฐํ๋ค ๐