๐Ÿ”ฅ ForeignKey

may_soouuยท2020๋…„ 8์›” 27์ผ
1

Django

๋ชฉ๋ก ๋ณด๊ธฐ
4/9

์žฅ๊ณ ์—์„œ Foreignkey๋ฅผ ์ž์ฃผ ์“ด๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, foreignkey ๊ฐ€ ๋ญ”์ง€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์„œ ์„ค๋ช…๊ณผ ์˜ˆ์ œ๋ฅผ ํ•จ๊ป˜ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

1. ForeignKey

๋ฌธ๋ฒ•

class ForeignKey(to, on_delete,**options)

1:1 / 1:N / N:N ์˜ ๊ด€๊ณ„๋ฅผ ์ง€์›ํ•œ๋‹ค.
N์ธ ์ชฝ์—์„œ ๊ด€๊ณ„๋ฅผ ์„ ์–ธํ•ด์ฃผ๋ฉฐ, ๋‘ ๊ฐœ์˜ ์ธ์ž๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค.
ํ•˜๋‚˜๋Š” ๋Œ€์ƒ์ด ๋˜๋Š” ํด๋ž˜์Šค, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์‚ญ์ œ ์‹œ ์ด์Šˆ์— ๋Œ€ํ•œ ์„ค์ •์„ ํ•œ๋‹ค.

๐Ÿ” ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ ๐Ÿ”
1:1 - 1๋ช…์˜ ์œ ์ € 1๊ฐœ์˜ profile
1:N - 1๋ช…์˜ ์œ ์ €, ๊ทธ ์œ ์ €๊ฐ€ ์“ด ์—ฌ๋Ÿฌ๊ฐœ์˜ comments
N:N -ํ•˜๋‚˜์˜ ์ฑ…์— ์—ฌ๋Ÿฌ๋ช…์˜ ์ €์ž, ์—ฌ๋Ÿฌ๋ช…์˜ ์ €์ž๊ฐ€ ์“ด ์ฑ…๋“ค

1-1. on_delete ์„ค์ •

1์ธ ์ชฝ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ ๋์„ ๋•Œ, N์ชฝ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€์— ๋Œ€ํ•œ ์„ค์ •์„ ํ•œ๋‹ค.

Ex.
class Comment(models.Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
  • CASCADE : ์ด์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋ชจ๋“  N์ชฝ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ
  • PROTECT : 1์ธ ์ชฝ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธ
  • SET_NULL : null๋กœ ๊ฐ’์„ ๋Œ€์ฒดํ•˜๊ฒŒ ๋˜์–ด ํ•„๋“œ์— null=True ์˜ต์…˜์ด ์žˆ์–ด์•ผ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • SET_DEFAULT : default๋กœ ๊ฐ’์„ ๋Œ€์ฒดํ•˜๊ฒŒ ๋˜์–ด ํ•„๋“œ์— default=True ์˜ต์…˜์ด ์žˆ์–ด์•ผ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • SET : ๋Œ€์ฒดํ•  ๊ฐ’์ด๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • Do_NOTHING : ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์ง€๋งŒ db ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

1:1 ๊ด€๊ณ„

์žฅ๊ณ ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ๋Š” user ๋ชจ๋ธ๊ณผ ์ด๋ฅผ ์ปค์ŠคํŠฌํ•˜์—ฌ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” profile ๋ชจ๋ธ์„ ์—ฐ๊ฒฐํ•ด์ค„ ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ

ex.
class User(AbstracBaseUser):

class Profile(models.Modle):
   user = models.OneToOneField(user, on_delete=models.CASCADE)




๐Ÿ˜‚ ์•„๋ž˜๋Š” DBA ์ง๋ฌด์—์„œ ์ผํ•˜๋Š” ์นœ๊ตฌํ•œํ…Œ foreignkey ๋ฌผ์–ด๋ณด๋‹ˆ๊นŒ ๊ทธ๋ ค์ค€ ๊ทธ๋ฆผ,, ๊ณ ๋งˆ์›Œ,,๐Ÿ˜‚

profile
back-end ๊ฐœ๋ฐœ์ž

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