我有一个用于保存各种表单的数据库。我有一张表格:
CREATE SEQUENCE seq_formtype;
CREATE TABLE formtype (
id_ft integer NOT NULL DEFAULT nextval('seq_formtype'),
name text
);
我有一个表格中包含不同输入字段的表格:
CREATE SEQUENCE seq_formstruct;
CREATE TABLE formstruct (
id_fs integer NOT NULL DEFAULT nextval('seq_formstruct'),
id_ft integer NOT NULL,
name text,
id_fstype text NOT NULL
);
最后,我有一张表格,其中存储了每个试验表格的结果。
CREATE TABLE results (
id_trial integer NOT NULL,
id_fs integer NOT NULL,
res_value text
);
当我添加结果时,我想检查是否已插入来自formtruct的所有输入 - 这意味着formstruct where formtype = typ_trialu
(伪代码)中的每个条目都会有结果中的条目。
现在我甚至不确定如何检查或从哪里开始。我的想法是创建一个触发器,在插入结果后检查一致性(即插入所有inputfield结果后)。
答案 0 :(得分:1)
可以在插入语句后使用触发器完成。
CREATE TRIGGER check_form_types_trigger
AFTER INSERT ON results
FOR EACH STATEMENT
EXECUTE PROCEDURE check_form_types_function();
而且,在check_form_types_function
(应该是plpgsql)中,如果您的数据(整体上)不一致,您可以raise an exception。
但是,另一方面,如果你这样做,你实际上无法将部分数据插入results
;您只能使用单个插入语句插入整个数据。如果你真的关心一致性,你应该在每次更新后进行检查。删除语句。
备注强>:
fs
,ft
,fstype
等名称很糟糕,请考虑重命名您的列。SERIAL
s(而不仅仅是手动设置序列)