在问题(另一个表)的一组备选方案(表)中,如果用户无法选择,则其中一个备选方案可以是默认值
因此,如果我有一个布尔列来设置默认情况下要选择的一组备选项中的默认备用项,那么如何告诉数据库(我使用MariaDB )允许在一组指向questions
表中特定问题的备选方案中,只有一个备选设置为true?
示例:
create table `alternatives` (
`id` serial,
`question_id` bigint unsigned not null,
`title` serial,
`default_choice` boolean
);
insert into `alternatives` values (1, 1, "option a", false); <- ok
insert into `alternatives` values (2, 1, "option b", false); <- ok
insert into `alternatives` values (3, 1, "option c", false); <- ok
insert into `alternatives` values (4, 1, "option d", false); <- ok
insert into `alternatives` values (5, 1, "user didn't choose", TRUE); <- ok
insert into `alternatives` values (6, 1, "none of the above", true); <-- SHOULD RAISE ERROR
答案 0 :(得分:1)
这样的东西应该有用(如果找到任何具有真值的记录,它会引发异常):
delimiter //
CREATE TRIGGER check_true BEFORE INSERT ON alternatives
FOR EACH ROW
BEGIN
IF EXISTS (SELECT * FROM alternatives
WHERE
(question_id=NEW.question_id)
AND (default_choice = true)
AND (NEW.default_choice = true) THEN
SIGNAL SQLSTATE '45000'; -- code for unhandled user-defined exception
END IF;
END;//
答案 1 :(得分:0)
架构设计是倒退的。
Question
表应该说明默认值是什么,而不是Alternatives
表。这将阻止多种选择。请注意,Alternatives
表中不再需要'boolean'列。