通用关系多对一或多对多?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通用关系多对一或多对多?相关的知识,希望对你有一定的参考价值。

我面临以下问题:

我想创建一个可以与不同模型(qazxsw点)相关联的后果模型(Aka:Pros and Cons模型),并包含以下信息:

Generic Relationship Django

对象(Of属性)可能会产生许多后果,但后果只属于一个后果,因此它应该是多对一关系。

Consequences : Boolean (Positive or Negative) Of : Model_Primary_Key Reason : Text Author : User_Primary_Key Users_likes : List<Users>

问题是我不知道后果模型和其他模型之间的关系是多对一还是多对多。

通常当你有一对多时,有多个的部分包含另一个的外键,但是如果我这样做,外键将是Author和Of,而set将是复合主键,但是如果我在这里,用户不能有每个对象的结果,它应该是可能的。

所以我找到的唯一解决方案是将id作为主键添加到结果,所以最后它的工作方式就像是多对多的关系,因为最终工作就像Entity relational diagram一样。

那么在我的实体关系图的最后,我应该如何表示这种关系?作为一对多或多对多?

答案

您可以使用djangos隐式Associative entity作为主键,而不是添加AutoField约束来克服您描述的障碍。

unique_together

这样,一个from django.db import models from django.contrib.auth.models import User from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType class Consequence(models.Model): # implicit AutoField content_type = models.ForeignKey(ContentType) object_id = models.PositiveIntegerField() content_object = GenericForeignKey('content_type', 'object_id') author = models.ForeignKey(User) is_positive_consequence = models.BooleanField() reason = models.CharField(max_length=200) class ConsequenceLike(models.Model): # implicit AutoField parent = models.ForeignKey(Consequence) user = models.ForeignKey(User) 可以创建许多指向同一对象的User实例,因为没有唯一约束。

这为您以后过滤提供了很大的灵活性:

Consequence

以上是关于通用关系多对一或多对多?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate多对一,多对多的表映射关系

hibernate 关联关系(多对多对多一对一)的配置

表关系(一对一 ,多对多)

连接空间连接与关联

django ManyToManyField多对多关系

多对多 - “无法确定一对一关系的子/依赖方”