我有以下表格
tbl_orders
CREATE TABLE tbl_orders (
id integer NOT NULL,
customer_name character varying NOT NULL,
is_archived boolean NOT NULL
);
tbl_order_items
CREATE TABLE tbl_order_items (
id integer NOT NULL,
product_name character varying NOT NULL,
quantity integer NOT NULL,
order_id int NOT NULL
);
在我的应用程序中,我可以归档一个订单,该订单将布尔值isArchived设置为该订单记录的true。订单记录可以包含多个订单商品,当订单的布尔值isArchived设置为true时,我希望防止订单商品被更新。我是否必须在订单商品级别设置isArchived布尔值?
这可以在数据库级别上防止这种情况吗?
答案 0 :(得分:0)
您可以在BEFORE UPDATE
tbl_order_items
上创建FOR EACH ROW
触发器,该订单会在归档订单NEW.order_id
时引发错误。
这是最优雅和规范化的解决方案,但它要求只要更新tbl_order_items
中的行,就会运行触发器。