2010-10-23 115 views
1

我有幾個產品 - 工廠關係,我需要在SQL SERVER中創建表。一個產品(約8000)在所有8個工廠中生產,但很少(在8000個產品中有3-4個)產品在一個/兩個工廠中生產。SQL Server架構設計

我想用兩種方法中的任何一種來實現關係。 (我知道第一種方法更好,但第二種方法更容易設計和開發應用程序代碼)。

1 - 多對多關係,基本上創建第三個鏈接表ProductPlant。

2 - 產品表中可空的PlantID外鍵列。產品表將具有PlantId(在所有工廠中生產的產品)或PlantId(如果在工廠中生產)。

請提供您的專家意見。

回答

2

您正在繪畫自己進入一個有選擇的角落#2。

首先,您不能指定產品是在兩個工廠中生產的,而沒有在產品表中爲一個產品輸入兩行。如果你這樣做,你的應用程序開發將變得非常混亂。第二,你不能處理新工廠將被添加到企業的可能性,最初不生產產品的企業。這可能永遠不會發生。但如果它確實存在,你就會陷入困境。

第三,你不能在混合中添加新產品,最初不是在任何地方生產的。你不能用#2這樣的模式來說。第四,你將不得不在這個地方編寫像這樣的「where ProductID = CurrentProductID或ProductID爲null」的選擇標準。這對你來說可能看起來很簡單,但這對我來說肯定不會。我寧願處理額外的連接。

好的設計原則並不好,不是因爲有些大祭司這麼說。他們很好,因爲他們在各種各樣的情況下工作。

如果您擁有多對多的實用性,請使用交匯表。如果你不這樣做,你會後悔的。

1

創建一個名爲ProductPlant的表。下面是列:

  • 產品編號
  • PlantId

它從來就不是一個好主意,這意味着在某些情況下,一件事的數據,而在其他情況下,另一件事。這就造成了你不能正確讀取數據的可能性。

此外,您正在計劃爲未來做更好的準備,因爲之後,當有人來找你說,現在一個產品是在這些其他工廠生產的時候,你已經被覆蓋了。

0

國際海事組織是有更好的第三張表加入兩個。這樣就不會有人工限制產品的生產數量。如果以另一種方式進行,如果產品在多個工廠生產,則需要重複產品記錄。 (可能是今天只有一家工廠生產產品,但明天又如何?)

0

我同意其他海報創建ProductPlant表以識別具有特定工廠(或工廠,如果需求更改),但我會進一步說,你只需要填寫該表的例外情況,而不是全部8000個產品。我會在產品上添加一個標誌(或者計算的字段?),稱爲IsAllPlants。對於沒有設置該標誌的用戶,將填充ProductPlant表。然後通過PlantID查詢產品將如此簡單: SELECT * FROM Product WHERE IsAllPlants!= 0或ProductID IN(選擇產品ID來自ProductPlant其中PlantID = @PIDENTID)