Django或类似框架支持复合主键吗
我正在为我的工程公司写一个网页应用(警告:我只是业余编程爱好者),原本打算使用Django这个框架,但遇到了一些问题。我想用的模型自然需要多列的主键。根据这个链接,我不能使用Django,至少在目前发布的版本中是这样。有没有人能帮我想个办法,不管是换个其他的网页框架(只要是基于Python的)还是建议我对模型做些修改,让它能适应Django的限制?我其实更希望能通过修改模型来解决这个问题,因为我想借此机会学习Django。
举个例子:
第一张表有两个字段,part_number和part_revision,这两个字段应该组成一个主键。一个零件编号(P/N)可以有多个版本,但P/N加上版本号是唯一的。
第二张表的主键是part_number、part_revision和dimension_number。一个特定版本的P/N可以有多个尺寸,但每个尺寸都是唯一的。此外,在这种情况下,P/N加上版本号应该是第一张表的外键。
4 个回答
我强烈建议使用替代键。并不是因为这样做很“Django风格”。假设你使用一个复合键,其中包含了零件编号。如果过一段时间,你的公司决定更改这个字段的格式(也就是它的值)呢?或者说,任何字段都可能会改变。你肯定不想处理更改主键的麻烦。我不知道你觉得使用由“真实”值组成的复合键有什么好处,但我认为这根本不值得。使用没有实际意义的、自增的键(这样一来,复合键可能就没什么用了)。
为什么不加一个普通的主键,然后指定 part_number
和 part_revision
这两个字段为 unique_together
呢?
这实际上是用 Django 的方式来实现 Mitch Wheat 所说的内容。
一种解决方法是创建一个替代键(就是一个自动增加的列)作为主键列,然后在你的领域组合键上放一个唯一索引。
这样,外键就会指向这个替代的主键列。