2009-12-17 65 views
4

新手程序員在這裏。無效的外鍵

我有3個表,即產品,類別和子類別。我配置了它們之間的關係是這樣的:

產品類別:許多一對多
產品給子類別:一比一
子類別分類:多對一一個

我添加了一個subcategory_id列,它是產品表中的外鍵(用於映射產品和子類別表)。這適用於產品有子類別的情況。現在的問題是我有沒有子類別的產品。假設subcategory_id列將爲空,但不允許。有沒有解決方法?我也認爲關係配置與此有關。有什麼想法嗎?

+0

添加一個默認子類別並將其分配給沒有子類別的產品 – 2009-12-17 03:37:16

+4

@ Pandiya Chendur - 如果您已將該建議作爲適當的響應,我會降低它的評價。在這些情況下生成無意義的記錄是不好的做法。魔法值永遠是。他們不僅延續了一個有缺陷的數據模型,而且必須通過隨後的編程活動來處理,並在被遺忘時導致錯誤的結果。 – APC 2009-12-17 05:05:42

回答

4

只要subcategory_id可以爲空,您應該能夠添加一個外鍵,該外鍵在列不爲空的所有情況下強制執行關係的完整性。這是一個相當常見的用例。

+0

謝謝你的快速回答先生。 「你應該可以添加一個外鍵,在列不爲空的所有情況下,這個外鍵將強制關係的完整性」 - 請在這方面給我更多啓發,但是我沒有很好地理解它。 – 2009-12-17 03:39:39

+1

Ed,他意味着只要該字段不爲空,該字段的值就會作爲另一個表/記錄的有效外鍵強制執行。 – Anthony 2009-12-17 03:51:55

0

產品類別:許多一對多

產品給子類別:一比一

子類別分類:多對一一個

這是沒有意義的。如果產品和子類是一對一的,那麼它們是同一個實體。或者他們是1比0/1?無論如何,無論如何,如果他們是一對一或一到零或一個,那麼每個產品都來自不同的子類別,並且每個子類別最多隻有一個產品分配給它。如果這是真的,那麼產品與類別是一對多並且子類別與類別是一對多的情況並非如此。

想一想。如果一個產品可能有很多Categorys,但是一個產品只有一個子類別,那麼子類別可以有很多類別,這與您對類別和子類別的基數有相反之處:一對多

通常情況下,產品類別和子類別的關係如下:

類別到子類別一對多(每個類別的許多subcategries - 每個子類只有一個類別)

次類別產品:一對多,許多產品可以在每個子類別中。但是每個產品最多隻有一個子類別。

你確定這不是你的結構嗎? ...

+0

如果一個產品可能有多個類別但只有一個子類別,我可以問一個關於什麼是關係映射的建議嗎?此外,該類別可能有許多子類別。 – 2009-12-17 03:57:33

+0

然後,通過產品(其中可能有很多)到達的類別與產品子類別中的類別實體不同 - 只能有一個產品子類別,因此每個子類別都會唯一確定類別。因此,這不是一組一致的關係。 – 2009-12-17 04:06:23

+0

這就好像說實體A是多對一個實體B一樣,這對實體C來說是一個實體,實體C是一個實體A的實體。這表示邏輯上不一致的一組關係。 – 2009-12-17 04:07:40

1

產品給子類別:一比一

難道不該 產品到子目錄:多對一一個

爲什麼是不可能的使subcategory_id列default null