2011-10-20 45 views
0

我想知道在這種情況下數據庫設計應該如何。具有很多屬性的數據庫表設計

enter image description here

什麼在我腦海中是像每一個實體的表:

Engine 
EngineDesign 
ElectricalSystem 
Drivetrain 
etc. 

但在我看來是一個很大的表。我的想法是好還是過度?

那麼Drivetrain呢?今天我們有8個齒輪,但只要製造商有不同的東西,它就可以改變。

它應該是這樣的:
表(列)

DrivetrainId | 1st | 2nd | 3rd | etc. 

或者

表(行)

DrivetrainId | Gears 
1   | 1st 
2   | 2nd 
3   | 3rd 
etc. 
+0

難道我忽略的東西,或者是那些相同的所有四個?如果它們不是完全相同的,你如何識別引擎? (事實上​​,即使它們*是*相同的,你如何識別一個引擎?由引擎類型的值?) –

+0

我忽視了所有四種車輛僅在飾件上有所不同。 :-)我對ENGINE - Type,Bore,Stroke等關係感興趣。 DRIVETRAIN - 第一,第二,第三,第四等等,以及如何將這些屬性放入表格中。如果可以將網頁設計「反映」到數據庫,或者有更好的方法。圖片只是結果的一個例子,值並不重要。看看它,因爲只有1列(1輛車)。 – nubm

+1

讓我問你一旦擁有它,你想用這個信息嗎?你會把它作爲一個小組閱讀還是查詢單個項目?如果您不打算查詢它們,只是顯示信息,則可能會將某些事物放入備註字段中。 – HLGEM

回答

2

您不能通過計算表來判斷數據庫設計的健全性。不存在「太多表格」正常形式,或者「沒有足夠表格」的正常形式。也沒有「正常形式太多列」或「正常形式不足」這樣的事情。

因爲它現在代表今天,每個變速器齒輪比有一列可能仍然會讓你到5NF。這是因爲它沒有多個列的值來自同一個域,這是一個問題。它有多個列,其值來自相同的域,並且具有相同的含義這是一個問題。

顯然,8檔和1檔有不同的含義。事實上,你可能會認爲它們來自不同的領域。我的猜測是0.67對於1檔不是有效值,而4.85對於8檔不是有效值。上的有效的值的範圍

當這些被存儲在不同的列中,

  • 很容易執行,每行有針對每個8傳動齒輪比的值的約束,和
  • 約束對於每個傳動比來說非常簡單。 (但你必須適應只有5個或6個擋位後設計空值,並且提出了規範化的問題。)

當它們存儲爲行,

  • 它很難 - 也許是不可能的 - 爲了執行每個車輛對於每個傳動比都具有值的限制,並且對於每個傳動比的有效值範圍的約束更加複雜。 (特別是當你以後容納只有5或6檔的設計時。)
+0

真的很好。 – nubm

-1

我的第一本能會做一個屬性的東西桌子和一個汽車桌(我假設汽車?)

Attributes 
AttributeId | AttributeCategory | AttributeDesc 

Cars  
CarId | AttributeId | AttributeValue 
+0

是的,圖片是關於汽車的,但我看到價格比較網站正在使用類似的東西,因爲它們必須比較很多產品屬性。 – nubm

+0

以後查詢最糟糕的解決方案。 – HLGEM

+1

@HLGEM你能解釋一下爲什麼,或者在一篇文章中指出我能更好地學習?我發現類似的解決方案稍後更加靈活(添加或刪除屬性時)。 – saritonin

相關問題