gpt4 book ai didi

sql - 您可以/如何在不破坏 RI 的情况下添加引用圈?

转载 作者:行者123 更新时间:2023-11-29 11:44:06 25 4
gpt4 key购买 nike

为此,我主要对 pgsql 感兴趣,但我想知道在任何 RDBMS 中是否有一种方法可以执行插入操作,无需禁用和重新启用任何 FOREIGN KEY 或 NOT NULL约束,在两个相互引用的表上。 (你可能会认为这是一只鸡,它以某种方式从自己的蛋中诞生。)

举一个实际的例子,如果你有一个多项选择测验系统,有表“question”和“answer”,其中question.correct_answer指的是answer.id,而answer.question指的是question.id,是吗可以同时添加问题及其答案吗?

(郑重声明,我知道您可以在事务 block 中进行禁用和重新启用,另一种解决方案是不使用 correct_answer 列,而是将 answer.correct 作为 bool 值,并使用检查约束以确保每个问题只有一个正确答案。但我对这里的替代解决方案不感兴趣。)

最佳答案

我认为您已经回答了您自己的问题 - 您必须创建一个交易 block 。在 PostgreSQL 中这应该有效:

BEGIN;
SET CONSTRAINTS ALL DEFERRED;
INSERT INTO questions (questionid, answerid, question)
VALUES (1, 100, 'How long are Abraham Lincoln\'s legs?');
INSERT INTO answers (answerid, questionid, answer)
VALUES (100, 1, 'Long enough to reach the ground.');
COMMIT;

它必须在事务 block 中,因为如果任一 INSERT 语句失败,数据库将处于无效状态(不满足表约束)。

关于sql - 您可以/如何在不破坏 RI 的情况下添加引用圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/179582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com