为了设计我的数据库,我有一个包含设备规格的大表(表格:"设备" ),大约有 60 列。
多个要素的值将位于预定义列表中(3或4个值)。
他们说我们不应该有很多列的大表,并且有必要将数据分成小表。所以我做了以下事情:
对于从预定义列表中获取值的功能,我创建了一个小表(2列:id& specification),其中包含一些不会更新的行(3行或4行)。那些小桌子的关系是1 .... n与"设备"表。这种规格有几种。
最后,有几个小表与 1 .... n 与"设备"表
问题:他们说我们不应该有很多列的大表,并且有必要将数据分成更小的表(就像我一样),但最后我有相同数量的列,因为小table会将外键迁移到大表(" Devices" )!
我需要你的帮助,我想了解。
非常感谢。
答案 0 :(得分:0)
一些原因:
你真的无法减少列数吗?
如果您向我们展示包含一些示例数据的表格,我们可以为您提供更好的帮助,并为您提供示例和建议。
答案 1 :(得分:0)
如果您最终得到的列数太多,那么您必须调查的事项是:有多少列的数据实际上与任何外键列相关,而不是直接与主键相关?
让我们举一个与"设备相关的例子":
device_id (PK)
device_type (FK)
vendor_name
vendor_shop_location
所以这里有4列。一个是主键,一个是外键,一个应该是外键(但它是常规列),一个与实际是外键的列相关。
最后一列应该在另一个表中,因为第三列应该是外键。
他们的意思"一个表不应该有很多列",经常 - 但不总是 - 人们将外键相关数据放在错误的表中。问问自己:那个60列表中有多少列是外键?如果你的价格非常低,你可能就是这样。如果它非常高,甚至全部,那么你有一个复杂的组件数据结构,可能是非常好的。很难从这里说出来。
答案 2 :(得分:0)
您应该问的问题是:表格设计是否反映了现实世界中主题的结构?您通过分析来发现真实世界的主题,并在设计之前进行分析。对主题的良好分析应该产生ER图,其中框表示实体,框之间的线表示关系,框的内容表示属性。
设备真的有60种不同的属性,每种属性都独立于其他属性吗?或者这些属性中的某些属性实际上是设备某个组件的属性,或者某些类似的属性。这可能会导致您进行更规范化的表格设计。如果真正规范化的设计在设备中产生60列,那就这样吧。
有些设计原则与标准化不同,并且屈服设计与标准化设计不兼容。但是在学会何时忽视它之前,你应该掌握规范化。
您可能想问的第二个问题是设备表中是否会有大量的NULLS,因为很多功能都不适用于很多设备。如果是这种情况,如果这是一个问题,那么你需要以不同的方式提出问题。