๐Ÿ—„ Database

Dayยท2022๋…„ 4์›” 6์ผ
0
post-thumbnail

๐Ÿ—„ Database

์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์— ์ €์žฅ๋œ ์ •๋ณด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ชจ์•„ ๋†“์€ ์ง‘ํ•ฉ

๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋Š” ์Šคํ”„๋ ˆ๋“œ ์‹œํŠธ ์ฒ˜๋Ÿผ ์ƒ๊น€

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(DBMS, Database Management System)์œผ๋กœ ์ œ์–ดํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

๋ฐ์ดํ„ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ, ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ด€๋œ ๋‹ค๋ฅธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ‹€์–ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ ํ˜น์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋” ์งง๊ฒŒ DB ๋ผ๊ณ  ๋ถ€๋ฆ„.

์ฒด๊ณ„์ ์œผ๋กœ, ์˜ค๋žœ๊ธฐ๊ฐ„ ์ €์žฅ, ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด์„œ DB ๋ฅผ ์“ด๋‹ค.

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

Database์—๋Š” ํฌ๊ฒŒ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)์™€
"NoSQL"๋กœ ๋ช…์นญ๋˜๋Š” ๋น„๊ด€๊ณ„ํ˜•(Non-relational) database๊ฐ€ ์žˆ๋‹ค.

๊ด€๊ณ„๋ž€ ํ‘œ๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๋งํ•จ.

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” 2์ฐจ์› ํ…Œ์ด๋ธ”(table)๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ row๋Š” ์–ธ์ œ๋‚˜ ์ €๋งŒ์˜ ๊ณ ์œ  ํ‚ค(Primary Key,PK)๊ฐ€ ์žˆ๋‹ค.

๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ๋งํ•จ. ์—ฌ๊ธฐ์„œ๋Š” id ๊ฐ’

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ฐ๊ฐ ํ…Œ์ด๋ธ”๋“ค์ด ์„œ๋กœ ์ƒํ˜ธ๊ด€๋ จ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

์ด ํ…Œ์ด๋ธ”์˜ ์—ฐ๊ฒฐ์—๋Š”
One to One(์ผ๋Œ€์ผ), One to Many(์ผ๋Œ€๋‹ค), Many to Many(๋‹ค๋Œ€๋‹ค) ๊ด€๊ณ„ ๋ผ๊ณ  ๋ถ€๋ฆ„.

  • One to One (1:1) ๊ด€๊ณ„ : ํ…Œ์ด๋ธ” A์˜ row์™€ ํ…Œ์ด๋ธ” B์˜ row๊ฐ€ ์ •ํ™•ํžˆ ์ผ๋Œ€์ผ ๋งค์นญ์ด ๋˜๋Š” ๊ด€๊ณ„

  • One to Many(1:N) ๊ด€๊ณ„ : ํ…Œ์ด๋ธ” A์˜ ๋กœ์šฐ๊ฐ€ ํ…Œ์ด๋ธ” B์˜ ์—ฌ๋Ÿฌ ๋กœ์šฐ์™€ ์—ฐ๊ฒฐ์ด ๋˜๋Š” ๊ด€๊ณ„
  • Many to Many(N:N) ๊ด€๊ณ„ : ํ…Œ์ด๋ธ” A์˜ ์—ฌ๋Ÿฌ row๊ฐ€ ํ…Œ์ด๋ธ”B ์˜ ์—ฌ๋Ÿฌ row ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๊ด€๊ณ„

๐Ÿ‘‰ ์–ด๋–ป๊ฒŒ ํ…Œ์ด๋ธ”๊ณผ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜๋Š”๊ฐ€?

Foreignkey(์™ธ๋ถ€ํ‚ค,FK) ๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ์ฃผ๋กœ ์—ฐ๊ฒฐ

profiles ํ…Œ์ด๋ธ”์˜ user_id ์ปฌ๋Ÿผ์€
users ํ…Œ์ด๋ธ”์— ๊ฑธ๋ ค์žˆ๋Š” ์™ธ๋ถ€ํ‚ค๋ผ๊ณ  ์ง€์ •ํ•จ.

์ด๋Ÿฌ๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šคํ•œํ…Œ ,
profiles ํ…Œ์ด๋ธ”์˜ user_id์˜ ๊ฐ’์€, users ํ…Œ์ด๋ธ”์— ์žˆ๋˜ id๊ฐ’์ด๊ณ , usersํ…Œ์ด๋ธ”์˜ id ์ปฌ๋Ÿผ์— ์žˆ๋Š” ๊ฐ’๋งŒ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค.
users ํ…Œ์ด๋ธ”์— ์—†๋Š” id๊ฐ’์ด user_profile ํ…Œ์ด๋ธ”์˜ user_id์— ์ง€์ •๋˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ

์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋‚˜๋ˆ„์–ด ์ €์žฅํ•˜๋ฉด,
์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€๋„ ์•Š๊ณ ,
๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€๋„ ์•Š์•„์„œ ๋””์Šคํฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฅผ normailization(์ •๊ทœํ™”)๋ผ๊ณ  ํ•œ๋‹ค.

โ˜• ์Šคํƒ€๋ฒ…์Šค ๋ชจ๋ธ๋ง

์ง์ ‘ ์ฐธ์—ฌ๋Š” ๋ชปํ–ˆ์ง€๋งŒ, ์ž๋ฃŒ๋กœ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ


VARCHAR : ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 3์ฒœ์ž
TEXT : 3์ฒœ์ž ์ด์ƒ (DB์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์—„์ฒญ ํฌ๊ฒŒ ์žก์Œ)
INT : ์ •์ˆ˜ํ˜• ์ˆซ์ž
์†Œ์ˆ˜์  ๋‚˜์™€์„œ ํ†ตํ™”๋Š” decimal๋กœ ๊ด€๋ฆฌํ•จ

์œ„ ๊ทธ๋ฆผ์ด ๋ชจ๋ฒ”๋‹ต์•ˆ. ๋‚˜๋ˆ„๊ธฐ ๋‚˜๋ฆ„์ด๊ณ , ์ •๋‹ต์€ ์—†๋‹ค.

- categories : drink = 1 : N

- drinks : image_url = 1: N

- ์‹ ์ƒํ’ˆ ์—ฌ๋ถ€๋Š” Y/N boolean ํƒ€์ž…์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ๋Š” ์ฒ˜๋ฆฌ ์•ˆํ•จ.

- drinks : nutrituion : 1 : 1
๊ฐ๊ฐ์˜ ์˜์–‘์†Œ ํฌํ•จ ์ •๋„๋Š”, ์Œ๋ฃŒ ๊ฐ๊ฐ์ด ๋‹ค๋ฅด๋‹ค๊ณ  ํŒ๋‹จํ•จ.

- drinks : allergies : N : N
์Œ๋ฃŒ ํ•˜๋‚˜์— ์•Œ๋Ÿฌ์ง€ ์š”์†Œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ผ ์ˆ˜ ์žˆ๊ณ , ์•Œ๋Ÿฌ์ง€ ํ•˜๋‚˜์— ํ•ด๋‹น๋˜๋Š” ์Œ๋ฃŒ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ผ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”์€ PK๊ฐ’(id)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์ด๋ฅผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์—์„œ ๋Œ์–ด๊ฐ€์„œ, ์ž๊ธฐ ํ…Œ์ด๋ธ”์— ์“ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  FK(์™ธ๋ถ€ํ‚ค) ๋กœ ์„ค์ •ํ•ด๋‘  ์ถœ์ฒ˜๋ฅผ ๋ฐํžˆ๋Š” ๊ฑฐ๋ผ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ ๊ด€๊ณ„๋ฅผ ์ƒ๊ฐํ•ด์„œ ๋งŒ๋“ค์–ด ๊ฐ€๋Š” ๊ฒƒ.

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