空外键

时间:2009-12-17 03:33:24

标签: mysql database

新手程序员在这里。

我有3个表,即产品,类别和子类别。我用这种方式配置了他们的关系:

产品到类别:多对多
产品到子类别:一对一
分类的子类别:多对一

我添加了一个subcategory_id列,它是产品表中的外键(用于映射产品和子类别表)。如果产品具有子类别,则此方法有效。现在的问题是我的产品没有子类别。假设是subcategory_id列将为null,但不允许。这有解决方法吗?我也认为关系配置与此有关。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

只要subcategory_id可以为空,您应该能够添加一个外键,该外键将在列不为空的所有情况下强制执行关系的完整性。这是一个相当常见的用例。

答案 1 :(得分:1)

  

产品到子类别:一对一

不应该这样 产品到子类别:多对一

为什么不能制作subategory_id列default null

答案 2 :(得分:0)

产品到类别:多对多

产品到子类别:一对一

分类的子类别:多对一

这没有意义。如果产品和子类别是一对一的,那么它们是同一个实体。或者他们是0/1?

无论如何,无论哪种方式,如果它们是一对一或一对零或一,那么每个产品都来自不同的子类别,并且每个子类别最多只有一个产品分配给它。如果这是真的那么不可能是产品是一对多的类别和子类别是一对多的类别。

想一想。如果单个产品可以有多个分类,但产品只有一个子类别,则子类别可以有许多类别,这与您的类别和子类别的基数相反:一对多

通常,Products Categories和SubCategories的关系如下:

分类到SubCategory一对多(每个类别有多个子类别 - 每个子类别只有一个类别)

子类别到产品:一对多,许多产品可以在每个子类别中。但每件产品最多只有一个子类别。

你确定那不是你的结构吗? ......