数据库表设计有很多属性

时间:2011-10-20 14:19:33

标签: database database-design data-structures

我想知道在这种情况下db设计应该是什么样子。

enter image description here

我想到的是每个实体的表格,如:

Engine  
EngineDesign  
ElectricalSystem  
Drivetrain  
etc.

但它看起来像很多桌子。我的想法是好还是过分?

动力传动系统怎么样?今天我们有8个齿轮,但只要制造商提供不同的东西,它就可以改变。

应该是这样的:
表(列)

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

或者

表(行)

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

2 个答案:

答案 0 :(得分:2)

您无法通过计算表来判断数据库设计的完整性。没有“太多表格”的正常形式,或“没有足够的表格”正常形式。也没有“太多列”的正常形式,或“没有足够的列”正常形式。

现在,每个传动齿轮比有一列可能仍然可以达到5NF。那是因为它没有多个列,其值来自同一个域,这是一个问题。它有多个列,其值来自同一个域,具有相同的含义,这是一个问题。

显然,第8档和第1档具有不同的含义。实际上,您可能会认为它们来自不同的域。我的猜测是0.67不是1档的有效值,而4.85不是8号的有效值。

当这些存储在不同的列中时,

  • 很容易强制执行约束,即每行都有8个传动齿轮比中的每一个的值,
  • 对每个齿轮比的有效值范围的约束非常简单。 (但是你必须为只有5或6档的后期设计提供NULL,这会引发标准化问题。)

当它们存储为行时,

  • 更难 - 或许不可能 - 强制执行约束,即每辆车都有8个传动齿轮比中的每一个的值,
  • 对每个齿轮比的有效值范围的约束更复杂。 (特别是当您以后适应只有5或6档的设计时。)

答案 1 :(得分:-1)

我的第一直觉是使用属性表和汽车表做某事(我假设汽车?)

Attributes
AttributeId | AttributeCategory | AttributeDesc

Cars    
CarId | AttributeId | AttributeValue

编辑:请参阅以下评论@ HLGEM的解释为什么在此示例中实体 - 属性 - 值表不是一个好主意。