对mySQL表中大量列的专家意见?

Expert opinions on a very large number of columns in a mySQL table?

提问人:Pekka 提问时间:10/26/2009 更新时间:7/24/2011 访问量:957

问:

我正在创建一个工具,用于在CMS中编辑网页。 该工具的主要目标是为用户提供完全的灵活性。因此,可以在其中编辑大量属性 - 如下属性(片段):

langbutton_menu_border_color_left 
langbutton_menu_border_width_left
langbutton_menu_border_style_left 
langbutton_menu_border_color_right

...你明白了。到目前为止,我有 238 个这样的属性,主要是整数和短字符串。 我现在必须为数据创建一个 mysql 表。我有多年的 Web 开发经验,甚至考虑将 238 列放入 mySQL 表中绝对是禁忌。但转念一想,我开始想,为什么不呢?

这对我来说是目前最方便的事情,因为我正在集成这个新工具的 CMS 包含一系列与单个数据库列相连的现成输入元素。存储属性的任何其他方式(例如,将它们分组以便将“边界”属性存储在一个字段中)都需要对集合进行巨大更改,我非常想避免这种情况 - 我正在一个大项目中,并且日以继夜地工作。

我将根据 XML 定义创建和更改表,这样我就可以忍受管理 238 列表。 存储效率并不重要 - 预期的页数不会超过 50-100。 除了使用主键一次加载一个页面外,我不需要对表进行任何查询。

那么,mySQL专家们,有什么反对将这种数据存储在238列中的严肃言论吗?你会期待问题、指数级的内存使用率等吗?

通常,我会将各种属性转换为完整的 CSS 字符串,并构建可以解析和处理此类字符串的类 - 这将大大减少数量。但考虑到时间限制?

PHP 的MySQL

评论

1赞 cletus 10/26/2009
为什么要将其存储在数据库中?为什么不只是一个样式表?
0赞 northpole 10/26/2009
是否有数据的某些部分可以分解为组,然后可以创建关系?
0赞 duffymo 10/26/2009
我不支持将这些东西放在数据库中的设计。这就是 CSS 的用途。
0赞 Pekka 10/26/2009
不,用户有一个界面来编辑这些属性(使用图形界面、颜色选择器、文本输入等),然后这些字段会产生生成和缓存的 CSS,但用户界面是必须的,不能单独使用样式表来解决。

答:

4赞 FrustratedWithFormsDesigner 10/26/2009 #1

这些列中有多少需要独立于其他列进行查询和更新?这些列中的任何一列是否涉及与其他表的关系,或者它们都只是数据?

我不知道您的使用计划,但在某些情况下,将所有这些数据存储为 BLOB 更有意义。如果它总是一起检索并且不参与任何查询,这就是我会做的。

评论

0赞 northpole 10/26/2009
这就是我为存储XML数据以生成PDF所做的。我存储了数百个元素,并将它们选择为一个属性,然后在客户端上循环访问。
0赞 Pekka 10/26/2009
在生产使用中,不需要独立于其他列进行查询和更新:唯一的工作是获取列,并根据说明生成页面。
0赞 Pekka 10/26/2009
将此数据存储为 BLOB(或许多分组的 BLOB)将是我首先选择的选项,但我必须为此重写比我现在所能承受的更多的代码 - 截止日期迫在眉睫。我需要知道这是否有任何真正的障碍,除了明显的障碍,即 238 列很难手动管理。:)
4赞 ts. 10/26/2009 #2

从理论上讲,mySQL 现在限制在一个表中的 4096 列(考虑到其他约束,即默认 NULL 值等,稍微少一点)。所以,你有相当大的利润。 就个人而言,在 Web 开发中,我尝试将 # 列保持在 50 <。我看到了有 100+ 列的表,它有效,但很难维护这样的表。 如果您不必搜索该列,请考虑在 php 数组上序列化并将值存储在 TEXT 中。它更快、更灵活。

1赞 Sebastiaan 11/4/2009 #3

我以前尝试过这样的方法。 很有可能没有人会在单个元素上使用所有 238 个属性。

恕我直言,您最好向用户建议可用属性。 然后,让用户通过从列表中挑选可用属性并设置其值来组合可用属性。 然后,您可以将用户输入组合到一个文本数组中,例如 [property:value,property:value],并将其粘贴到您需要设置样式的元素上的单个列中。