Django或类似的复合主键

Mat*_*rdo 14 python django web-applications django-models

我正在为我的工程公司编写一个Web应用程序(警告:我只是一个爱好的程序员)并计划使用Django直到我遇到这个问题.我想要使​​用的模型自然具有多列主键.根据http://code.djangoproject.com/ticket/373,我不能使用Django,至少不是发布版本.任何人都可以帮助我解决方法,无论是通过另一个Web框架(仅限基于Python)还是建议对模型进行更改,以便它能够与Django的局限性一起使用?我真的希望有后者,因为我希望以此为契机学习Django.

示例:表1将part_number和part_revision作为应包含主键的两个字段.AP/N可以存在多个版本,但P/N + rev是唯一的.

表2将part_number,part_revision和dimension_number作为其主键.特定转速下的AP/N可以有多个维度,但每个维度都是唯一的.此外,在这种情况下,P/N + rev应该是表1的ForeignKey.

Dom*_*ger 23

为什么不加一个正常的主键,然后指定part_numberpart_revision作为unique_together

这基本上是Djangoish(Djangonic?)做Mitch Wheat所说的方式.


Mit*_*eat 19

解决方法是创建代理键(自动增量列)作为主键列,并在域组合键上放置唯一索引.

然后,外键将引用代理主键列.


sha*_*nyu 14

我强烈建议使用代理键.不是因为它是"Djangoesque".假设您使用包含part_number的复合键.如果一段时间后贵公司决定更改该字段的格式(以及价值),该怎么办?或者一般来说,任何领域?您不希望处理更改主键.我不知道你在使用由"真实"值组成的复合键时看到了什么好处,但我认为这不值得麻烦.使用无意义的自动增量密钥(这应该会使复合密钥无效).

  • 这应该被修改很多.关于为什么代理人更好主意的好文章是:http://www.agiledata.org/essays/keys.html (5认同)