关注者表是多对多关系吗?



我有两个模型。一个模型是用户表,其中包含id, username, email等字段,我还有另一个表,用于显示关注者和关注者关系。 显示以下模型:

class Following(models.Model):
target = models.ForeignKey('User', related_name='followers', on_delete=models.CASCADE, null=True)
follower = models.ForeignKey('User', related_name='targets', on_delete=models.CASCADE, null=True)
def __str__(self):
return '{} is followed by {}'.format(self.target, self.follower)

我假设用户和关注之间的关系是一对多的关系(一个用户可以有很多关注者,也可以关注很多(。这是对的吗?或者应该是多对多的关系。如果是这样,为什么?我已经看到这个表架构的许多实例既是多对多,也是一对多。

用户类:

class User(AbstractBaseUser):
username    = models.CharField(max_length=15, unique=True)
email       = models.EmailField(max_length=100, unique=True)
date_joined = models.DateTimeField(auto_now_add=True,
null=True) 
active      = models.BooleanField(default=True)
staff       = models.BooleanField(default=False)
admin       = models.BooleanField(default=False)

使用谓词[px]和约束[cx.y]。


[p1]用户 (用户 ID( 存在。

[c1.1]用户由用户 ID 标识。

用户
{用户 ID} -- p1  KEY {UserID} -- c1.1

[p2]Follower (FollowerID( 跟随作者 (AuthorID(。

[c2.1]关注者是用户。

[c2.2]作者是用户。

[c2.3]对于每个关注者,该关注者可以关注多个作者。

[c2.4]对于每位作者,该作者可以由一个以上的关注者关注。

[c2.5]对于作者和追随者的每种组合,该作者和追随者的组合最多可以发生一次。

[c2.6]作者不得跟随自己。

以下 {AuthorID, FollowerID} -- p2 KEY {AuthorID, FollowerID} -- c2.5, c2.3, c2.4 外键 {追随者 ID} 引用用户 {用户 ID} -- c2.1 外键 {作者ID} 引用用户 {用户ID} -- c2.2 检查作者ID != 关注者ID -- c2.6

底线,多对多。您可以随时调整它以反映您的特定需求,专注于以自然语言表达的概念/逻辑设计 - 谓词和约束。

最新更新