SQL:将复合外键的一部分设置为主键

时间:2016-03-21 14:57:54

标签: sql composite-primary-key composite-key

我遇到以下问题: 我需要创建一种账单管理系统。有账单,有关于上述账单的文章。文章可以在以后更改,但它们必须保持对已经制作的账单的方式。到目前为止,我正在做这样的事情:

CREATE TABLE contained (
    bill_id INTEGER REFERENCES bill(bill_id),
    FOREIGN KEY (article_id, revision) REFERENCES article(article_id, revision),
    PRIMARY KEY (bill_id, article_id)
    );

我使用了一个修订属性来实现它。每次文章更新时,我都会创建一个具有相同ID但具有递增版本号的新条目。 我还有第三个表引用了文章和账单表。账单上可以有多篇文章,但它不应该有多篇相同的文章(所以基本上,账单1可以有文章A rev 0和B rev 1,但它可以&#39 ; t有文章A rev 0和A rev 1)。我这样试过:

CREATE TABLE contained (
    bill_id INTEGER REFERENCES bill(bill_id),
    article_id INTEGER NOT NULL,
    revision INTEGER NOT NULL,
    FOREIGN KEY (article_id, revision) REFERENCES article(article_id, revision),
    PRIMARY KEY (bill_id, article_id)
    );

但它显然无法正常工作,因为我只能在主键中使用部分引用的复合键。有没有办法让这个工作或更容易的替代方案来解决这个困境?

编辑: 将第三个表格改为

ERROR:  there is no unique constraint matching given keys for referenced table "bill"

给了我另一个错误:

{{1}}

我也不太了解。

0 个答案:

没有答案