2010-02-26 34 views
2

我正在为客户设计一个系统,他可以为他销售的各种产品创建数据表单。 他将使用的字段数不会超过600-700(最坏的情况)。看起来他可能会在400 - 500(最大)的范围内。一个包含许多字段或多个(数百个)字段的表的mysql表?

我脑子里想的2种方法用于创建数据库(使用元数据):

一)每个产品创建一个表,该表将只持有这个产品,这将导致数百表的字段必要但只有每个产品

b)中使用一个单一的表与所有速效表单字段(从电流300至最大700)的任何范围,致使一个表,将有许多领域的neccessary字段其中只有约10%用于每个产品入口(产品应该通常不超过50-80字段)

哪种解决方案最好?请记住,表格的维护(创建,更新和更改)将使用元数据完成,因此我不需要手动更改表格。

谢谢!

/**** UPDATE *****/

只是一个更新,甚至在此之后很长一段时间(和聚集更多的经验,配发),我需要一提的是normalizing你的数据库是一个可怕的想法。更重要的是,几乎总是没有规范化的数据库(总是从我的经验来看)表明了一个有缺陷的应用程序设计。

回答

2

您的关键决定因素是是否需要normalization。即使您只是使用应用程序添加数据,您仍然需要迎合异常情况,例如如果某人的电话号码发生更改,会发生什么情况,并在应用程序的整个生命周期中插入多行?哪一行包含正确的电话号码?作为一个例子,你可能会发现你的数据中会有repeating groups,就像一个人有几个电话号码一样;而不是有三个名为“Phone1”,“Phone2”,“Phone3”的列,您可以将该数据分解到自己的表中。

规范化还存在其他问题,例如传递或非关键依赖关系。这些概念将有希望引导您进入数据库表格设计,而无需使用modification anomalies,正如您应该希望的那样!

4

我将有3个表:

  • 产品

    • ID
    • 其他任何你需要
    • ID
    • 字段名
    • 其他任何你可能需要
  • product_field

    • ID
    • PRODUCT_ID
    • FIELD_ID
    • 字段值
+0

你好pulegium, 我也想过类似的东西,但有一个问题:字段的类型可以是从布尔到文本的任何东西。在这种设计中,没有办法为ecah字段设置正确的字段类型(理论上我可以使用TEXT,因为它可以容纳我需要的任何值,但我希望为每个字段指定正确的字段类型然后) – mspir 2010-02-26 10:26:14

+0

,除非我有更多的field_value字段具有不同的字段类型......(field_value_int,field_value_text,field_value_decimal等)......但是,这个doesent感觉非常正确......? :) – mspir 2010-02-26 10:42:34

+1

向'field'表中添加一个'field_type'列。这仍然会让您不得不将所有内容都作为文本存储在数据库中,但可以根据需要为字段定义自己的验证规则。这会给你pulegium设计的所有灵活性,再加上你不仅仅限于你的数据库引擎支持的类型,而且还可以有,例如,,'must_be_multiple_of_five_percent'验证(用于折扣),'week_day_name'验证等。 – 2010-02-26 11:05:12

1

Pulegiums解决方案是一个很好的路要走。

您不希望使用每个产品一个表的解决方案,因为插入或删除产品时不应更改数据库的结构。只应插入或删除一个或多个表的行,而不是表本身。

1

尽管可能有必要,但对于像我的产品列表那样简单的产品,可能有许多领域听起来像您可能有一个有缺陷的设计。

您需要分析潜在的表结构,以确保每个字段包含不超过一条信息(例如,单个字段中的“2个锤子,500个钉子”是不好的),并且每条信息都没有它属于多个字段(例如,有phone1,phone2,phone3字段不好)。这些情况都表明您应该将这些信息移出到一个单独的相关表中,并使用外键将其连接回原始表。正如pulegium所证明的,这项技术可以快速将事物分解为三张桌子,总共只有十几个字段。

相关问题