【发布时间】:2011-10-19 05:12:15
【问题描述】:
我知道,如果我使用 Django 的 ORM,每个表都必须有一个主键列。不知何故,如果你有一个链接到表的 many_to_many 表(我们称它们为作者和书籍),你会得到类似的东西:
id author_id book_id
1 1 1
2 1 2
3 2 3
etc.
我遇到了一本书,其中建议避免使用“id”列并改为创建复合主键。这适用于 django 吗?
【问题讨论】:
-
我对支持/反对的论点感兴趣。文章在哪里?
-
对于链接表,不需要直接访问。只需使用 Django 的 ManyToManyField 并使用 'through' 参数指定链接表。见:docs.djangoproject.com/en/dev/topics/db/models/…
-
@Sonny:我写了article,意思是book。它的标题是 Bill Karwin 编写的 SQL 反模式:避免数据库编程的陷阱。他指出,如果您必须对(在上面的示例中)
author_id和book_id施加复合唯一约束。如果这样做,复合键将具有与id列相同的属性。所以它变得多余。这篇文章很长,里面有更多的论据,但我认为这是它的精髓,如果我没记错的话,就是这样。 :-) -
这很好,但他的建议不适用于 django,因为 django 不支持复合主键。事实上,我认为复合 pk 通常是一个坏主意,因为它将您的密钥与您的数据联系起来,使您的 pk 更宽,并且具有各种其他小的负面因素......所有这些都是为了避免冗余的唯一性。如果我以后真的有动力,我可能会查找一些关于从不使用复合 pk 的原因的文章
标签: mysql django primary-key compound-key