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')