c o d i n g . . ๐Ÿ‰/MySQL

[์ƒํ™œ์ฝ”๋”ฉ] ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

H J 2021. 9. 25. 04:34

1. ์—…๋ฌดํŒŒ์•…

: UI ๊ทธ๋ ค๋ณด๊ธฐ, ๊ธฐํš

 

 

2. ๊ฐœ๋…์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

: ๊ฐœ๋…๋“ค์„ ์ฐพ๊ณ  ๊ด€๊ณ„ ์ฐพ๊ธฐ, ERD

์ •๋ณด-๊ทธ๋ฃน-๊ด€๊ณ„  ex) ์ด๋ฆ„, ํ•™๋ฒˆ  - ์ €์ž, ๊ธ€ - ์ž‘์„ฑ, ์ฐธ์„

 

๐Ÿฅž ERD (๊ฐœ์ฒด-๊ด€๊ณ„ ๋ชจ๋ธ)

 

RDB๋Š” ๋‚ดํฌ ๊ด€๊ณ„ ํ—ˆ์šฉ x 

๊ฑฐ๋Œ€ ๋‹จ์ผ ํ…Œ์ด๋ธ” → ์ค‘๋ณต ๋ฐœ์ƒ

 

→ ์ฃผ์ œ์— ๋”ฐ๋ผ ํ‘œ ์ชผ๊ฐœ๊ธฐ, JOIN ์‚ฌ์šฉ

 

 

Entity → table: ๋Œ“๊ธ€, ๊ธ€, ์ €์ž

Attribute → column: ์ด๋ฆ„, ํ•™๋ฒˆ

Relation → PK, FK, JOIN: ์ž‘์„ฑ, ์†Œ์†

 

 

(1) Entity, Attribute ์ฐพ๊ธฐ

 

(2) Identifier ์‹๋ณ„์ž ์ง€์ •(์ค‘๋ณต x) → PK(๊ธฐ๋ณธํ‚ค)

: ์‹๋ณ„์ž๋Š” ์ค‘๋ณต ์—†์ด ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค

๊ทธ๋Ÿฌํ•œ ๊ฒƒ์„ ๊ธฐ๋ณธํ‚ค(primary key)๋ผ๊ณ  ํ•œ๋‹ค

candidate key = primary key + alternate key

์ฆ‰, ํ›„๋ณดํ‚ค ์ค‘์— ํ•˜๋‚˜์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ ์ •ํ•˜๋ฉด ๋‚˜๋จธ์ง€๋Š” ๋Œ€์ฒดํ‚ค๊ฐ€ ๋œ๋‹ค

(์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ํ•ฉ์ณ์„œ ์‹๋ณ„ํ•  ๋•Œ๋Š” ์ค‘๋ณตํ‚ค(composite key)๋ผ๊ณ  ํ•œ๋‹ค)

 

(3) Relationship

: ์™ธ๋ž˜ํ‚ค(FK) ์ •ํ•˜๊ธฐ

 

(4) Cardinality

: 1:1 ๊ด€๊ณ„, 1:N ๊ด€๊ณ„, N:M ๊ด€๊ณ„ ๊ตฌ๋ถ„ํ•˜๊ธฐ

 

(5) Optionality

: Optional, Mandatory ๊ตฌ๋ถ„ํ•˜๊ธฐ

 

http://erd.yah.ac/

 

http://erd.yah.ac/

 

erd.yah.ac

์—ฌ๊ธฐ์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค

์•„์•…! ๋„ˆ๋ฌด ํ—ท๊ฐˆ๋ ค ;ใ……;

 

๋‚ด๊ฐ€ ๊ทธ๋ ค๋ณธ ERD... ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋Œ€์ถฉ ๊ทธ๋ฆฐ๊ฑฐ๋ผ ์‚๋šค๋นผ๋šคํ•˜๋‹ค ใ…Ž.ใ…Ž

 

 

3. ๋…ผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

: ๊ฐœ๋…์„ ํ‘œ๋กœ ์ „ํ™˜

 

Entity๋ฅผ table๋กœ Attribute๋ฅผ column์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค!

 

๊ทธ๋ฆฌ๊ณ  Relation์„ ๊ณ ๋ คํ•ด์„œ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค

1:1 ๊ด€๊ณ„์ผ ๋•Œ๋Š” ์˜์กด์ ์ธ ์ชฝ์ด FK๋ฅผ ๊ฐ–๊ฒŒ ํ•˜๊ณ , 

1:N ๊ด€๊ณ„์ผ ๋•Œ๋Š” N์ด FK๋ฅผ ๊ฐ–๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค

N:N ๊ด€๊ณ„์ผ ๋•Œ๋Š” (column์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์• ๋งคํ•จ) mapping table์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค

 

mapping table์„ ์ถ”๊ฐ€ํ•ด์„œ ์†์„ฑ๋“ค์„ FK๋กœ ๋ฐ›์•„์˜จ๋‹ค

 

↓↓↓ ์ด๊ฑด ์ง์ ‘ ํ•ด๋ด์•ผ ํ•˜๋Š” ๊ฑฐ๋ผ... ๋‚œ ์ผ๋‹จ ๋‚ด๊ฐ€ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์ƒ๊ฐํ•˜๋ฉด์„œ ์งœ ๋ดค๋‹ค! ๋งž๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Œ ;ใ……;

๋”๋ณด๊ธฐ

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด๋ž‘ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ผ ๊ณต๊ฐœํ•˜๋ฉด ์•ˆ ๋  ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ€๋ ธ๋‹ค ใ… 

 

Normalization ์ •๊ทœํ™”

(์ œ 3 ์ •๊ทœํ˜•๊นŒ์ง€ ์ง„ํ–‰ํ•  ์˜ˆ์ •!)

↓↓↓ ์—ฌ๊ธฐ์„œ ๋ณผ ์ˆ˜ ์žˆ๋”ฐ

https://docs.google.com/spreadsheets/d/1xlf6acYUziX9KgK9gOfLhdHtVWxSzIviVvIyhdwYeII/edit#gid=2096807931

 

denormalization - http://bit.ly/2WLMCko

final Origin author,topic,topic_tag_relation,tag,topic_type id,name,profile,title,description,created,author_id,topic_title,tag_id,id,name,title,type,price,์‹คํ—˜์šฉ ๋ฐ์ดํ„ฐ 1,kim,developer,MySQL,MySQL is ...,2011,1,MySQL,1,1,rdb,MySQL,paper,10000 2,lee,

docs.google.com

 

์ œ 1 ์ •๊ทœํ˜•- Atomic columns

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š” column์„ ํ•ด์†Œ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๊ฐ–๋Š” column์„ ๋”ฐ๋กœ ๋–ผ์–ด์„œ mapping table์„ ๋งŒ๋“ค์–ด ์ฃผ๋ฉด ๋œ๋‹ค

ํ•˜์ง€๋งŒ ๊ตณ์ด ๊ทธ ๊ฐ’ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉด mapping table์„ ๋งŒ๋“ค์–ด ์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค

 

์ œ 2 ์ •๊ทœํ˜•-No partial dependencies

์ค‘๋ณตํ‚ค๋ฅผ ์—†์• ์ฃผ์–ด์•ผ ํ•œ๋‹ค

์ข…์†๋˜๋Š” ์†์„ฑ์„ ๋”ฐ๋กœ ๋–ผ์–ด์ฃผ๊ณ  table 1: ์ข…์†ํ•˜๋Š” ์†์„ฑ+ ์ข…์†๋˜๋Š” ์†์„ฑ(์ค‘๋ณต), table 2: ์ข…์†ํ•˜๋Š” ์†์„ฑ+ ์ข…์†๋˜๋Š” ์†์„ฑ(์ค‘๋ณต) ์ด๋Ÿฐ ์‹์œผ๋กœ ๋‚˜๋ˆ ์ฃผ๋ฉด ์ค‘๋ณต๋˜๋Š” column์„ ์‚ญ์ œํ•ด์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค

 

์ œ 3 ์ •๊ทœํ˜•-No transitive dependencies

์ดํ–‰์  ์ข…์†์„ฑ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ๋Ÿฌํ•œ ์†์„ฑ๋“ค์„ ๋”ฐ๋กœ ๋นผ์„œ table์„ ๋งŒ๋“ค์–ด์ค€๋‹ค

 

 

 

4. ๋ฌผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

: DB ์ œํ’ˆ ๊ฒฐ์ •, ์ฝ”๋“œ ์งœ๊ธฐ

 

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” DB์˜ ์–ด๋–ค ์ฟผ๋ฆฌ๋ฌธ์—์„œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค (find slow query)

 

 

์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

 

→ index: ์ฝ๊ธฐ ํŽธ๋ฆฌ, ์“ฐ๊ธฐ ์„ฑ๋Šฅ ๊ฐ์†Œ

→ application: cash ์‚ฌ์šฉ

์œ„์˜ ๋ฐฉ๋ฒ•์ด ์‹คํŒจํ•œ๋‹ค๋ฉด

→ denormalization: ํ‘œ์˜ ๊ตฌ์กฐ๋ฅผ ๋‹ค์‹œ ๋ฐ”๊พธ๋Š” ๊ฒƒ

 

 

denormalization

 

์นผ๋Ÿผ์˜ ์—ญ์ •๊ทœํ™” - ์ปฌ๋Ÿผ ์ค‘๋ณต: JOIN ์ค„์ด๊ธฐ

join ๋Œ€์‹  ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์„œ ์ปฌ๋Ÿผ ์ค‘๋ณต ํ—ˆ์šฉ

 

์ปฌ๋Ÿผ์˜ ์—ญ์ •๊ทœํ™” - ํŒŒ์ƒ ์ปฌ๋Ÿผ์˜ ํ˜•์„ฑ: ๊ณ„์‚ฐ ์ž‘์—… ์ค„์ด๊ธฐ

์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์„œ ๊ณ„์‚ฐ๋œ count๋ฅผ ์ถ”๊ฐ€

 

ํ…Œ์ด๋ธ”์˜ ์—ญ์ •๊ทœํ™” - ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ table ๋ถ„๋ฆฌ

์šฉ๋Ÿ‰์ด ํฐ ์†์„ฑ์ด๋‚˜ ์‚ฌ์šฉ์„ ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋กœ ๋‚˜๋‰œ๋‹ค๋ฉด ๊ทธ ์†์„ฑ๊ณผ PK๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ table์„ ๋งŒ๋“ค๊ณ  ์›๋ž˜ table์—์„œ๋Š” ํ•ด๋‹น ์†์„ฑ๋งŒ ์ œ๊ฑฐํ•œ๋‹ค

 

ํ…Œ์ด๋ธ”์˜ ์—ญ์ •๊ทœํ™” - ํ–‰์„ ๊ธฐ์ค€์œผ๋กœ table ๋ถ„๋ฆฌ

data๊ฐ€ ๋งค์šฐ ๋งŽ์œผ๋ฉด ์–ด๋–ค ์†์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ table์„ ๋ถ„๋ฆฌํ•ด์ค€๋‹ค(id ๊ฐ™์€ ์†์„ฑ)

 

๊ด€๊ณ„์˜ ์—ญ์ •๊ทœํ™” - ์ง€๋ฆ„๊ธธ: Join์„ ์ค„์ด๊ธฐ

์นผ๋Ÿผ์˜ ์—ญ์ •๊ทœํ™”์™€ ๋น„์Šทํ•˜์ง€๋งŒ FK๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ JOIN์„ ์ค„์ธ๋‹ค๋Š” ์ ์—์„œ ๋‹ค๋ฅด๋‹ค

 


์ „์— ์—ฌ๊ธฐ๊นŒ์ง€ ์จ๋†จ๋Š”๋ฐ ์•ˆ ์˜ฌ๋ ธ๊ธธ๋ž˜.. ^^