MySQL

MySQL) Instargram - ์œ ๋‹ˆํฌ์™€ ์ด์ค‘์œ ๋‹ˆํฌ : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋™์ผ ์ธ๋ฌผ์„ ์ค‘๋ณต ํŒ”๋กœ์šฐ ํ•˜๋ฉด ์˜ค๋ฅ˜ ๋œจ๊ฒŒ ํ•˜๊ธฐ

567Rabbit 2024. 5. 20. 10:35

1. ์œ ๋‹ˆํฌ

 

- ๋‹จ์ผ ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค

 

 

username์€ ๊ทธ ์ž์ฒด๋กœ UQ(unique) ํ•ด์•ผํ•œ๋‹ค.

 

 

username์— UQ๋ฅผ ์ฒดํฌํ•˜๋ฉด, ๋™์ผํ•œ username์€ ์กด์žฌํ•  ์ˆ˜ ์—†๊ณ ,

 

๊ฐ™์€ username์œผ๋กœ ํšŒ์›๊ฐ€์ž…ํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€๋ฅผ ๋„์›Œ ๋‹ค๋ฅธ username์œผ๋กœ ๊ฐ€์ž…ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

2. ์ด์ค‘์œ ๋‹ˆํฌ

 

- ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ ์กฐํ•ฉ์˜ ๊ฐ’์ด ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

ํŒ”๋กœ์šฐ์™€ ํŒ”๋กœ์ž‰ํ•˜๋Š” ์‚ฌ๋žŒ์€ ์—ฌ๋Ÿฌ๋ช…์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด 'abcd' ๋ผ๋Š” ์‚ฌ๋žŒ์€ 'ef'์™€ 'gh'๋ผ๋Š” ์‚ฌ๋žŒ์„ ๋™์‹œ์— ํŒ”๋กœ์šฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

followerId   followeeId

   'abcd'            'ef'

   'abcd'            'gh'

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ followerId๋Š” ๊ทธ ์ž์ฒด๋กœ๋Š” ์ค‘๋ณต๋˜์–ด๋„ ์ƒ๊ด€์—†๋‹ค.

 

์˜ˆ์ œ๋กœ๋Š” ๋‚˜ํƒ€๋‚ด์ง€ ์•Š์•˜์ง€๋งŒ, followeeId ์ปฌ๋Ÿผ๋„ ๊ทธ ์ž์ฒด๋กœ๋Š” ์ค‘๋ณต๋˜์–ด๋„ ์ƒ๊ด€ ์—†๋‹ค.

 

 

๊ทธ๋Ÿฌ๋‚˜ ์•„๋ž˜์™€ ๊ฐ™์ด ์ค‘๋ณต๋˜์–ด ๊ฐ™์€ ์‚ฌ๋žŒ์„  ๋˜ ํŒ”๋กœ์šฐํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

insert into follow
(followerId, followeeId)
values
(101, 1) ;

insert into follow
(followerId, followeeId)
values
(101, 1) ;

 

๊ฐ™์€์‚ฌ๋žŒ์ด ๊ฐ™์€์‚ฌ๋žŒ์„ ๋‘๋ฒˆ ์ด์ƒ ํŒ”๋กœ์šฐ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ฏ€๋กœ

 

(followerId, followeeId) ๋‘ ๊ฐ’์ด ๋™์‹œ์— ๊ฐ™์€๊ฐ’์ด ๋œ๋‹ค๋ฉด ์•ˆ๋œ๋‹ค.

 

 

๋”ฐ๋ผ์„œ ์ด์ค‘์œ ๋‹ˆํฌ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์— ์œ„์น˜ํ•œ Index๋กœ ์ด๋™ํ•ด์„œ,

 

 

 

 

์ธ๋ฑ์Šค ์ด๋ฆ„์€ ์ž์œ ๋กญ๊ฒŒ ์„ค์ •ํ•˜๊ณ , Type์„ UNIQUE๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค์Œ,

 

Index Columns์—์„œ ์ค‘๋ณต๋˜์ง€ ์•Š๊ฒŒ ํ•  ์ปฌ๋Ÿผ์„ ์ฒดํฌํ•ด์ค€๋‹ค.

 

 

 

 

 

 

APPLY ํ•˜์—ฌ ์ ์šฉํ•˜๋ฉด ์ด์ค‘์œ ๋‹ˆํฌ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.