sql - SQL。从表中删除数据,但保持关系
问题描述
我在 PostgreSQL 工作
我有两张桌子。第一个是产品,第二个是收据。使用外键(收据表中的产品)引用它们。我需要从产品表中删除产品行,但要保留参考。我想让它成为一个“虚拟表”(产品),在从主产品表中删除信息后,收据表将引用该表。
但我不知道该怎么做......有人可以告诉我或告诉我如何做到这一点。
解决方案
您不能与不存在的行建立外键关系。所以,做一个软删除。也就是说,向products
表中添加一列,例如is_deleted
.
然后实际上不要删除该行。只需将列设置为true
.
查看活动产品可能会有所帮助:
create view v_products as
select p.*
from products p
where not is_deleted;
编辑:
如果要更改原始表中的行,可以使用cascading
触发器上的选项。用于on delete cascade
删除行receipts
或on delete set null
将引用值设置为NULL
。我不喜欢这些,因为您丢失了原始数据。
推荐阅读
- angular6 - Angular 6 在库服务中注入窗口令牌
- azure - 如果我更改我的 web 应用程序用于身份验证的 Active Directory 应用程序,注册用户会发生什么情况?
- c# - For循环计数器总是在C#递归函数中重置
- highcharts - 如何增加实时更新样条图中的点数?
- ios - NSPredicate 检查核心数据关系中前 5 个对象的属性
- python - Pyspark 分布式矩阵求和非空值
- c# - CefSharp 检查其是否已初始化
- docusignapi - 将 DocuSign 集成到 SPA 中的选项
- python - Python 多处理抛出不能腌制 _thread.RLock 对象
- android - Android 在什么情况下需要用户干预才能发送短信?