1

我正在设计一个数据库,我想在其中完成这种情况:我有一个 Category 表和 Products 表。我想让没有分配现有类别的产品无法添加(我相信我是使用 Products 表上的 FK 做到的)。我想在类别上强制删除,以删除分配给该类别的所有子项(产品)。我不想删除一个类别,如果/当所有属于它的产品都被删除时。

目前,我想出的是: http ://codepad.org/eSGqtyOs

我不确定,有人说类别表上的 FK 会阻止我添加没有产品的类别(catch 22 ..),如果我在产品表中添加 On delete CASCADE,它会自动删除一个类别,一次该类别中的最后一个产品被删除...

请帮助解决这个问题。

另外,请不要试图说服我不再“出售”旧类别/产品 - 我有我的理由,我知道我对这个系统的要求。

4

1 回答 1

3

根据您的要求,您不需要类别中的 FK(参考产品)。事实上,按照您制作这些 FK 循环的方式,您将无法插入任何数据,因为存在先有鸡还是先有蛋的问题。

需要产品中的 FK(引用类别)。

我想让没有分配现有类别的产品无法添加(我相信我是使用 Products 表上的 FK 做到的)。

这是正确的。

我想在类别上强制删除,以删除分配给该类别的所有子项(产品)。

ON DELETE CASCADE 应该注意这一点。

我不想删除一个类别,如果/当所有属于它的产品都被删除时。

FK 允许没有孩子的父母。

因此,在您的情况下,产品引用类别的 FK 将允许在没有任何产品的情况下存在类别。

于 2012-11-04T02:18:32.763 回答