Database 数据库表设计有很多属性

Database 数据库表设计有很多属性,database,database-design,data-structures,Database,Database Design,Data Structures,我想知道在这种情况下db的设计应该是什么样子 我想到的是每个实体的表格,如: Engine EngineDesign ElectricalSystem Drivetrain etc. 但在我看来,它有很多桌子。我的想法是正确的还是过度的 那传动系统呢?今天我们有8个档位,但只要制造商提供不同的产品,档位就可以改变 应该是这样的: 表(列) 或 表(行) 我的第一反应是使用属性表和Cars表(我假设是Cars?) 编辑:请参阅下面的注释@HLGEM解释为什么在本例中实体属性值表

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

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

Engine  
EngineDesign  
ElectricalSystem  
Drivetrain  
etc.
但在我看来,它有很多桌子。我的想法是正确的还是过度的

那传动系统呢?今天我们有8个档位,但只要制造商提供不同的产品,档位就可以改变

应该是这样的:
表(列)

表(行)


我的第一反应是使用属性表和Cars表(我假设是Cars?)


编辑:请参阅下面的注释@HLGEM解释为什么在本例中实体属性值表不是一个好主意。

不能通过计算表来判断数据库设计的合理性。没有“太多表”的标准形式,也没有“不够表”的标准形式。也没有“列太多”的标准形式,也没有“列不够”的标准形式

就目前情况而言,为每个变速箱传动比设置一列可能仍然会使您达到5NF。这是因为它没有多个值来自同一个域的列,这是一个问题。它有多个列,这些列的值来自同一个域,并且具有相同的含义,这是一个问题

显然,8档和1档有不同的含义。事实上,你可以认为它们是从不同的领域中提取出来的。我猜0.67不是1档的有效值,4.85不是8档的有效值

当它们存储在不同的列中时

  • 很容易实施约束,即每行都有8个变速箱传动比的值,以及
  • 对每个传动比的有效值范围的限制非常简单。(但对于只有5档或6档的后期设计,必须考虑空值,这会引发规范化问题。)
当它们存储为行时

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

是我忽略了什么,还是这四个都是一样的?如果它们实际上不完全相同,如何识别发动机?(事实上,即使它们是相同的,您如何识别发动机?通过发动机类型的值?)是我忽略了这四辆车都只是在内饰上有所不同。:-)我对发动机类型、孔径、冲程等的关系感兴趣。;传动系-第1、第2、第3、第4等,以及如何将这些属性放入表格中。如果可以将网页设计“镜像”到数据库,或者有更好的方法。图片只是结果的一个示例,值并不重要。看看它,因为只有1列(1辆车)。让我问你,一旦你有了这些信息,你想做什么?您是将其作为一个组阅读还是查询indivudual项目?如果您不打算查询某些内容,而只是显示信息,则可以将其放入notes字段中。我认为查询将非常精细。对于产品或汽车,将根据排量、速度、油耗等或用户的选择进行比较。他/她想要一辆带有这个引擎和那个尺寸的红色汽车。是的,图片是关于汽车的,但我看到价格比较网站正在使用类似的东西,因为它们必须比较很多产品属性。最糟糕的解决方案是稍后查询。@HLGEM你能解释一下原因吗,或者给我指一篇文章以便我更好地了解吗?我发现类似的解决方案在以后(添加或删除属性时)更加灵活。EAV表的性能非常差,只能作为最后手段使用。它们非常难以查询,尤其是当您不知道自己拥有多少属性,并且由于每个人都在访问而成为争用点时。例如,要找到所有十个属性,您必须加入同一个表十次。如果你有20个属性,那么是20次。他知道他想要什么字段,所以他不应该使用EAV。如果您确实需要EAV信息,因为您无法知道自己拥有哪些属性,那么您应该使用nosql数据库,而不是关系数据库。
DrivetrainId | 1st | 2nd | 3rd | etc.
DrivetrainId | Gears
1            | 1st
2            | 2nd
3            | 3rd
etc.
Attributes
AttributeId | AttributeCategory | AttributeDesc

Cars    
CarId | AttributeId | AttributeValue