Mysql M2M关系还是2个FKs?
以下哪种结构更可取:Mysql M2M关系还是2个FKs?,mysql,sql,django,Mysql,Sql,Django,以下哪种结构更可取: # M2M class UserProfile(models.Model): ... groups = models.ManyToManyField(Group) class Group(models.Model): ... 或- 哪个更好?您也可以使用选项组合这两种变体 你所说的更好是什么意思?通常,您不需要创建中间模型(必须存储的情况除外) ManyToManyField完美地完成了他的工作,所以不要自己编写它的功能。两者本质上是相同的。当您
# M2M
class UserProfile(models.Model):
...
groups = models.ManyToManyField(Group)
class Group(models.Model):
...
或-
哪个更好?您也可以使用选项组合这两种变体 你所说的更好是什么意思?通常,您不需要创建中间模型(必须存储的情况除外)
ManyToManyField
完美地完成了他的工作,所以不要自己编写它的功能。两者本质上是相同的。当您执行M2M Django时,它会自动创建一个中介模型,这与您的GroupMember
模型非常相似。但是,它还设置了一些API挂钩,允许您直接从UserProfile
模型访问Group
模型,而不必与中间模型发生冲突
正如@San4ez所解释的那样,通过使用和可以添加相同的钩子,但这只会使事情变得更复杂。只有在需要向关系中添加其他字段时,通过
模型创建自定义的。否则,请使用默认值
长和短,#1更好,只是因为它与#2完全相同,但更简单,没有多余的代码
# 2 FKs
class UserProfile(models.Model):
...
class Group(models.Models):
...
class GroupMember(models.Model):
user = models.ForeignKey(UserProfile)
group = models.ForeignKey(Group)
groups = models.ManyToManyField(Group, through='GroupMember')