我有三个表:产品、库存产品、已售产品。
产品和“库存产品”是不同的表,因为同一产品的不同批次库存有不同的序列号。以下是这些表中的重要行:
产品:
产品 |
---|
ID |
指定 |
库存产品:
库存产品 |
---|
ID |
数量 |
批次序列号 |
销售产品:
销售产品 |
---|
ID |
批次序列号 |
数量 |
SoldProducts 中的 BatchSerialNumber 引用 StockedProducts 中的同一列。
我的问题是,当库存批次用完时,我想删除它的记录,同时保留其销售的所有记录。
我如何使用外键来管理它?
外键的全部目的是维护子记录对其父记录的引用完整性。它应该防止有人剥夺孩子所依赖的父母。
如果您想删除此类关系中的父级而不是子级,那么要么是业务逻辑有缺陷,要么存在数据库设计问题。否则的话,这样做就是荒谬的。
StockedProduct
您的表格似乎有一Quantity
列。因此,从其中删除一行似乎没有意义,而是应该保留在Quantity 0
重新进货之前,或者如果从未补充过,也没关系。但序列化产品已存在,并且其销售依赖于该父行。否则,如果您确实想删除
StockedProducts
(这对我来说仍然是有缺陷的业务逻辑),那么您需要通过删除 的外键依赖性来重新设计数据库SoldProducts
。