必须Django ManyToManyField关联表有一个代理键吗?

时间:2009-10-22 14:22:11

标签: django database-design django-models surrogate-key natural-key

我正在将现有的数据库结构映射到Django模型中。我有一个多对多结构,其中关联表是自然键控的:

CREATE TABLE foo (id INTEGER PRIMARY KEY);
CREATE TABLE bar (id INTEGER PRIMARY KEY);
CREATE TABLE foo2bar (foo_id INTEGER REFERENCES foo(id),
                      bar_id INTEGER REFERENCES bar(id),
                      PRIMARY KEY (foo_id, bar_id)
                      );

有没有办法让Django的ORM映射这个?我必须更改foo2bar才能使用代理键吗? E.g。

CREATE TABLE foo2bar (id INTEGER PRIMARY KEY,
                      foo_id INTEGER REFERENCES foo(id),
                      bar_id INTEGER REFERENCES bar(id)
                      );
CREATE UNIQUE INDEX ix_foo2bar_uniq ON foo2bar (foo_id, bar_id);

1 个答案:

答案 0 :(得分:1)

我不认为Django - 只要1.1 - 允许你想要的复合主键。

请参阅:http://code.djangoproject.com/ticket/373

所以,我会说,除非1.2(2010年3月?)实现上述故障单的修复,否则您将不得不修改数据库表。