【发布时间】:2021-09-02 06:57:01
【问题描述】:
我希望我的 Django 项目中所有模型类(表)的所有 ID 字段都是唯一的。唯一我的意思是在所有表中都是唯一的,而不仅仅是一张表。 由于性能和存储问题,我不想使用 UUID,实际上我不需要我的 Id 字段是那种唯一的,我只希望它们可能是 30 个表中的 5 或 6 位唯一数字。 我的数据库是 Postgres。
为什么我需要它: 假设有 3 个表:news、article 和 tag。我想为新闻或文章分配多个标签。所以我将 tag_id 和 news_id 或 article_id 存储在另一个名为 typetag 的表中。 因此新闻和文章不能具有与 django 自动递增主键生成的相似 ID。 我该如何解决这个问题?
【问题讨论】:
-
您的模型具有一对一字段的额外模型?还是使用The contenttypes framework? (老实说,您不需要 pk 唯一的表)
-
这种方法可能来自文章或新闻项目,它不适用于来自标签的其他方式,因为您不知道该 id 指的是什么,文章或新闻物品。您应该简单地存储相关项目的类型,例如
type: 'news', id: 42。这是一个适当的多态关系,然后这个问题就变得没有意义了。 -
最好改一下数据模型,让表之间有规律的外键关系。
-
这能回答你的问题吗? Django models dependencies and transfer ownership 注意:我不在那里讨论 contenttypes 框架,但它也是一个可行的选择。
-
是的,我可以通过更改设计来解决问题,但是您建议的方法是(我认为)反对规范化(为例如标签和新闻之间的每个关系制作一个额外的表格)@LaurenzAlbe跨度>
标签: python django postgresql database-design