首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server业务逻辑:删除引用的数据

SQL Server业务逻辑:删除引用的数据
EN

Stack Overflow用户
提问于 2010-09-23 01:21:26
回答 3查看 195关注 0票数 3

我很好奇其他人是如何处理这件事的。

设想一个只包含产品、采购订单和采购订单行的系统。采购订单是采购订单行的父子关系中的父项。采购订单行,参考单个产品。

在您删除由采购订单行引用的产品之前,此操作将一直正常运行。突然,Line知道它卖出了30%的something...but,它不知道是什么。

什么是预测像这样的引用数据被删除的好方法呢?我认为,如果任何采购订单行都引用了某个产品,但该sounds...clunky除外,那么您就不允许删除该产品。我想您可能会在数据库中保留多年的采购订单,实质上是将您想要删除的产品焊接到数据库中。

EN

回答 3

Stack Overflow用户

发布于 2010-09-23 01:42:04

除非同时删除父实体或依赖行,否则不应删除父实体或依赖行。虽然将旧记录作为有效选择显示给用户是“笨拙”的,但让您的数据库继续有意义并不是“笨拙”。

为了解决UI中的笨拙问题,有些人创建了一个非活动列,当项目不再活动时,该列被设置为True,以便可以将其排除在用户界面的下拉列表之外。

如果在显示字段(例如,只读字段)中使用该值,则可以以不同的方式(例如,删除线)设置非活动值的样式,以反映其不再活动的状态。

我在所有实体表中都有StartDate和ExpiryDate列,在这些实体表中,实体可能会变为非活动状态,或者实体将在未来某个时间(例如,促销折扣)变为活动状态。

票数 4
EN

Stack Overflow用户

发布于 2010-09-23 01:24:15

强制执行referential integrity。这基本上意味着在表之间创建外键,并确保没有任何东西“消失”

您还可以使用此选项在删除父项时删除引用的项(级联删除)。

例如,您可以这样创建一个SQL Server表,即如果删除一个PurchaseOrder,它的子PurchaseOrderLines也会被删除。

Here is a good article就是这样的。

保留这些数据似乎并不笨拙(至少对我来说是这样)。如果您删除了它,那么您的采购订单就不再具有您创建它时的意义,这是一件坏事。如果你担心那里有旧数据,你可以创建一个存档或仓库数据库,其中包含超过一年的数据或其他东西。

票数 3
EN

Stack Overflow用户

发布于 2010-09-23 01:35:29

对于这样的数据,其中部分数据必须保存一段未知的时间,而其他部分则不需要,您需要采取不同的方法。

您的Purchase Order Lines (POL)表需要包含product表的所有列。将行项目添加到采购订单后,将所有产品数据复制到POL中。这包括名称、价格等。如果产品有选项,则必须创建相应的PurchaseOrderLineOptions表。

这是确保您可以在任何时候按需重新创建采购订单的唯一真正方法。它还意味着,任何人都可以随时更改产品的定价、名称、描述和其他信息,而不会影响以前的订单。

是的,你最终会在你的行项表中得到很多重复的信息。

首先,您可以将产品id保留在POL表中以备参考,但您不能依赖产品表与付费产品有任何关系……

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3771892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档