首页 > 解决方案 > SQL。从表中删除数据,但保持关系

问题描述

我在 PostgreSQL 工作

我有两张桌子。第一个是产品,第二个是收据。使用外键(收据表中的产品)引用它们。我需要从产品表中删除产品行,但要保留参考。我想让它成为一个“虚拟表”(产品),在从主产品表中删除信息后,收据表将引用该表。

但我不知道该怎么做......有人可以告诉我或告诉我如何做到这一点。

标签: sqlpostgresql

解决方案


您不能与不存在的行建立外键关系。所以,做一个软删除。也就是说,向products表中添加一列,例如is_deleted.

然后实际上不要删除该行。只需将列设置为true.

查看活动产品可能会有所帮助:

create view v_products as
    select p.*
    from products p
    where not is_deleted;

编辑:

如果要更改原始表中的行,可以使用cascading触发器上的选项。用于on delete cascade删除行receiptson delete set null将引用值设置为NULL。我不喜欢这些,因为您丢失了原始数据。


推荐阅读