Dav*_*dia 2 sql postgresql database-design many-to-many foreign-keys
假设我有以下表格:
问题,选择,答案
每个问题都有很多选择(选择具有question_id外键。)
Answers表具有两个外键question_id和choice_id,并且这些约束可以防止引用不存在的question或的答案choice,但我也想防止无效的选择。
我如何表达一个约束(也许不是正确的词),该约束仅允许答案choice_id是给定的有效选择question_id?例如,如果我有2个问题,每个问题有2个选择:
我想允许像(question_id= 1,choice_id= 1(或2))之类的答案并阻止像(question_id= 1,choice_id= 4)之类的答案,因为这不是问题的有效选择。
您所需要做的就是从answer到的FK约束choice - choice指向该行的行以返回相应的一个问题。
如果您坚持要answer.question_id多余的一列(在某些情况下这很有意义)仍然只有跨越多列的单个多列FK约束。这要求首先UNIQUE在表上匹配多列(或PK)约束choice(否则通常也多余):
ALTER TABLE choice ADD CONSTRAINT choice_uni UNIQUE (question_id, choice_id);
Run Code Online (Sandbox Code Playgroud)
然后:
ALTER TABLE answer ADD constraint answer_choice_fkey
FOREIGN KEY (question_id, choice_id) REFERENCES choice(question_id, choice_id);
Run Code Online (Sandbox Code Playgroud)
所有涉及的列都是,NOT NULL或者您可能需要做更多:在这种情况下,首先要了解外键约束的不同匹配类型:
有关:
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |