我有一个由 40 个属性描述的对象,创建一个包含 40 列的表是个好主意吗?我认为我不能将这些属性分解到另一个表中(例如 table_properties_1 和其他)。
专业人士,你怎么看?
更新:
报价表将包含更多字段...
一个表中的几十列没有任何问题。根据属性类型,它在空间方面可能比单独的属性表更有效,并且如果您想要在结果集的一行中同时查询多个属性,查询几乎总是更快,即您想要返回:
Thing Prop1 Prop2 Prop3
----- ----- ----- -----
T1 T1P1 T1P2 T1P3
T2 T2P1 T2P2 T2P3
Run Code Online (Sandbox Code Playgroud)
代替:
Thing Property Value
----- -------- -----
T1 P1 T1P1
T1 P2 T1P2
...
Run Code Online (Sandbox Code Playgroud)
因为您不必对属性表进行许多连接(或者更糟的是,子查询)来转置数据。当然,如果您经常需要这种转置格式的数据,那么此建议会被颠倒,因为否则您将需要以另一种方式转置(使用多个联合)。即使您的数据库具有高效的转置功能,也要确保数据处于您在大多数时间最可能需要的排列中。
大多数 DB 允许每行多列,并且对于宽表的效率通常并不比在薄表中的效率低多少(除非您一直“选择 *”和/或有错误的索引选择)。
对上述内容的大量警告是,您应该小心不要通过非规范化为自己制造噩梦。如果我们知道预期的专栏内容是什么,我们只能就此问题提供建议。