【发布时间】:2023-03-21 21:15:02
【问题描述】:
我有一个应用程序,其中包含以下表格。
Categories - CategoryID, CategoryName, CategoryTypeID, IsActive
CategoryTypes - CategoryTypeID, CategoryTypeName, IsActive
Items - ItemID, ItemName, CategoryID, UnitID, ItemPrice, IsActive
Units - UnitID, UnitName, IsActive
我有很多表格,但我没有显示所有表格,因为如果我有一个关系船的场景,我可以为其他人做。
在上面的表格中,Item 与具有 CategoryID(ForeignKey 约束)的类别有关系
Items 也与 Units 有关系(以 UnitID 作为 Fk 约束)。
现在在我的应用程序中,如果我想删除 Items 表中引用的类别。如果没有删除 Items 表中引用的记录,我无法删除 Category。
因此,我必须删除项目,然后删除类别本身。
但问题是如果我删除项目 - 我无法删除,因为 ItemID 在另一个名为“OrderItems”和“Promotions”的表中也被引用。
这是这两个表的表结构。
OrderItems - OrderItemID, OrderID, ItemId, ItemQuantity, ... , IsActive
Promotions - PromotionID, ItemID,... IsActive
现在实际问题出现了 - 如果我想删除一个类别,我不能删除,除非我删除一个项目。
如果我想删除一个项目,项目指向的所有引用表都必须删除,即 OrderItems 和 Promotions。
但作为业务逻辑,即使数据库中不存在 ItemID(在 Items 表中),我也需要 OrderItems 和 Promotions。
由于带有 OrderItems 和 Promotions 的 Items 存在外键约束,我无法删除 Items 记录。
所以,我想知道 - 我可以将外键设置为“允许空值”还是简单地删除约束并只使用普通表(认为存在关系)。
我的另一个限制是,如果我试图保持数据退出但将 IsActive 状态设置为 true 或 false(如果我想删除记录,则将 IsActive 设置为 false)。但是数据库会继续增长,我认为这不是正确的方法。
我真的很担心这个问题,因为我对我的应用程序的删除功能感到震惊。
我希望你在这里理解我的问题。
非常感谢任何帮助。
【问题讨论】:
标签: sql-server database database-design foreign-key-relationship