๐ŸŒˆ [Section2] 14. ERD ์„ค๊ณ„

ํ˜„์ฃผยท2022๋…„ 10์›” 7์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
33/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • ERD ์„ค๊ณ„ํ•˜๊ธฐ

โœ๏ธ ERD (Entity Relationship Diagram)

  • ํ…Œ์ด๋ธ”๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์„ค๋ช…ํ•ด์ฃผ๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ๋ฅผ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
    ( ์ €๋ฒˆ ์‹œ๊ฐ„์— ํ•œ ์Šคํ‚ค๋งˆ ๋””์ž์ธ๊ณผ ๊ฐ™์€ ๊ฒƒ )

๐Ÿ’ก ERD ์™€ ์Šคํ‚ค๋งˆ

  • ์‚ฌ์‹ค ๊ตฌ์กฐ์ ์œผ๋กœ ๊ฐ™์ง€๋งŒ ERD๋Š” ์—ฌ๋Ÿฌ ๊ด€๊ณ„ ๋ชจ๋ธ์˜ ์„ค๊ณ„๋„๋ผ๊ณ  ๋ณด๋ฉด ๋˜๊ณ ,
    ์Šคํ‚ค๋งˆ๋Š” ERD๋‚˜ ๋‹ค๋ฅธ ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ์ œ์‹œํ•œ ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ

๐Ÿ˜œ SQL์„ ์‚ฌ์šฉํ•ด 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 ์ฐธ์กฐํ•  ํ…Œ์ด๋ธ”๋ช… (์ฐธ์กฐํ•  ์ปฌ๋Ÿผ๋ช…); ์ด๋ ‡๊ฒŒ ์จ์ฃผ๊ธฐ


๐ŸŒˆ ๋Š๋‚€์ 

์˜ค๋Š˜ ์ด ํ•™์Šต์„ ์–ด์ œ ํ•˜๊ณ  ์˜ค๋Š˜ ์ธ์Šคํƒ€๊ทธ๋žจ ์Šคํ‚ค๋งˆ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ๋ญ”๊ฐ€ ๋” ์ž˜ ํ•  ์ˆ˜ ์žˆ์—ˆ์„ํ…๋ฐ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์ง€๋งŒ ๊ทธ๋ž˜๋„ ์–ด์ œ ์ข…์ด์— ์ ์–ด๊ฐ€๋ฉฐ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•œ ์‹œ๊ฐ„์ด ํ—›๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋ผ๊ณ , ๊ทธ๋Ÿฐ ์‹œ๊ฐ„์ด ์žˆ์–ด ์˜ค๋Š˜ ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค ๐Ÿ‘

0๊ฐœ์˜ ๋Œ“๊ธ€