数据库表 MySQL 20 多列

d7p*_*p4x 3 mysql

我有一个由 40 个属性描述的对象,创建一个包含 40 列的表是个好主意吗?我认为我不能将这些属性分解到另一个表中(例如 table_properties_1 和其他)。

专业人士,你怎么看?

更新:

报价表将包含更多字段... 简单图

Dav*_*ett 7

一个表中的几十列没有任何问题。根据属性类型,它在空间方面可能比单独的属性表更有效,并且如果您想要在结果集的一行中同时查询多个属性,查询几乎总是更快,即您想要返回:

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 允许每行多列,并且对于宽表的效率通常并不比在薄表中的效率低多少(除非您一直“选择 *”和/或有错误的索引选择)。

对上述内容的大量警告是,您应该小心不要通过非规范化为自己制造噩梦。如果我们知道预期的专栏内容是什么,我们只能就此问题提供建议。