mysql - Django 中的抽象基类与泛型关系

标签 mysql django database-design django-models abstract-class

在django中使用通用外键的抽象基类和通用关系的优缺点是什么?

抽象基类意味着具有子类的单个抽象类。这是一个例子:

class CommonInfo(models.Model):
    ...
    class Meta:
        abstract = True
        ordering = ['name']

class Student(CommonInfo):
    ...
    class Meta(CommonInfo.Meta):
        db_table = 'student_info'

通用关系是在单个表上使用带有对象 ID 的通用外键的实体。这是一个例子:

class TaggedItem(models.Model):
    tag = models.SlugField()
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

什么情况和/或何时应该使用一种解决方案或另一种解决方案的标准?

最佳答案

经过一些研究,我认为抽象基类范式更符合自然关系数据库架构。通用关系更像是 hack 并且绕过了参照完整性。

抽象基类是必经之路。

关于mysql - Django 中的抽象基类与泛型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19368405/

相关文章:

php - MySQL:在一条语句中选择项目的类别和(可选)子类别

python - 如何返回表中最受欢迎的项目,但每个项目都是唯一的?

django - 为什么 Django/PostgreSQL 在删除具有该主键的对象后不重用主键值?

database-design - web2py中的多对多关系

mongodb - WiredTiger 的 NoPadding 等价物是什么?

python - 在 Pandas to_sql 中指定模式

mysql - 复杂的 MySQL 查询 - 查找每个 user_id 的重复项?

javascript - window.history.back() 显示 "Document Expired"页面,有什么办法吗?

database-design - 带有回退计划的企业设置中的 RavenDB 设置

PHP fputcsv 输出双记录