阻止记录更新

时间:2016-09-20 09:58:01

标签: postgresql

我有以下表格

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布尔值?

这可以在数据库级别上防止这种情况吗?

1 个答案:

答案 0 :(得分:0)

您可以在BEFORE UPDATE tbl_order_items上创建FOR EACH ROW触发器,该订单会在归档订单NEW.order_id时引发错误。

这是最优雅和规范化的解决方案,但它要求只要更新tbl_order_items中的行,就会运行触发器。