我很好奇其他人是如何处理这件事的。
设想一个只包含产品、采购订单和采购订单行的系统。采购订单是采购订单行的父子关系中的父项。采购订单行,参考单个产品。
在您删除由采购订单行引用的产品之前,此操作将一直正常运行。突然,Line知道它卖出了30%的something...but,它不知道是什么。
什么是预测像这样的引用数据被删除的好方法呢?我认为,如果任何采购订单行都引用了某个产品,但该sounds...clunky除外,那么您就不允许删除该产品。我想您可能会在数据库中保留多年的采购订单,实质上是将您想要删除的产品焊接到数据库中。
发布于 2010-09-23 01:42:04
除非同时删除父实体或依赖行,否则不应删除父实体或依赖行。虽然将旧记录作为有效选择显示给用户是“笨拙”的,但让您的数据库继续有意义并不是“笨拙”。
为了解决UI中的笨拙问题,有些人创建了一个非活动列,当项目不再活动时,该列被设置为True,以便可以将其排除在用户界面的下拉列表之外。
如果在显示字段(例如,只读字段)中使用该值,则可以以不同的方式(例如,删除线)设置非活动值的样式,以反映其不再活动的状态。
我在所有实体表中都有StartDate和ExpiryDate列,在这些实体表中,实体可能会变为非活动状态,或者实体将在未来某个时间(例如,促销折扣)变为活动状态。
发布于 2010-09-23 01:24:15
强制执行referential integrity。这基本上意味着在表之间创建外键,并确保没有任何东西“消失”
您还可以使用此选项在删除父项时删除引用的项(级联删除)。
例如,您可以这样创建一个SQL Server表,即如果删除一个PurchaseOrder,它的子PurchaseOrderLines也会被删除。
Here is a good article就是这样的。
保留这些数据似乎并不笨拙(至少对我来说是这样)。如果您删除了它,那么您的采购订单就不再具有您创建它时的意义,这是一件坏事。如果你担心那里有旧数据,你可以创建一个存档或仓库数据库,其中包含超过一年的数据或其他东西。
发布于 2010-09-23 01:35:29
对于这样的数据,其中部分数据必须保存一段未知的时间,而其他部分则不需要,您需要采取不同的方法。
您的Purchase Order Lines (POL)表需要包含product表的所有列。将行项目添加到采购订单后,将所有产品数据复制到POL中。这包括名称、价格等。如果产品有选项,则必须创建相应的PurchaseOrderLineOptions表。
这是确保您可以在任何时候按需重新创建采购订单的唯一真正方法。它还意味着,任何人都可以随时更改产品的定价、名称、描述和其他信息,而不会影响以前的订单。
是的,你最终会在你的行项表中得到很多重复的信息。
首先,您可以将产品id保留在POL表中以备参考,但您不能依赖产品表与付费产品有任何关系……
https://stackoverflow.com/questions/3771892
复制相似问题