我正在为客户设计一个系统,他可以为他自己销售的各种产品创建数据表格。 他将使用的字段数量不会超过600-700(最差情况)。看起来他可能会在400 - 500(最大)的范围内。
我有两种方法可以创建数据库(使用元数据):
a)为每个产品创建一个表格,该表格仅包含此产品所需的字段,这将导致数百个表格,但每个产品只有必要的字段
或
b)使用一个包含所有可用表单字段的表(从当前300到最大700的任何范围),从而产生一个具有多个字段的表,其中每个产品条目仅使用约10%(a产品通常不应超过50-80个字段)
哪种解决方案最好?请记住,表格的维护(创建,更新和更改)将使用元数据完成,因此我不需要手动更改表格。
谢谢!
/ ****更新***** /
只是更新,即使经过这么长时间(并收集了额外的经验),我还需要提一下而不是normalizing您的数据库是一个糟糕的想法。更重要的是,一个非标准化的数据库几乎总是(总是从我的经验来看)表明应用程序设计存在缺陷。
答案 0 :(得分:4)
我会有3张桌子:
产品
字段
product_field
答案 1 :(得分:2)
您的关键决定因素是是否需要normalization。即使您只是使用应用程序添加数据,您仍然需要满足异常,例如如果某人的电话号码发生变化,并且他们在应用程序的生命周期内插入了多行,会发生什么?哪一行包含正确的电话号码?
例如,您可能会发现数据中包含repeating groups,例如一个有多个电话号码的人;而不是有三个名为“Phone1”,“Phone2”,“Phone3”的列,您可以将这些数据分解到自己的表中。
规范化还存在其他问题,例如传递或非关键依赖关系。希望这些概念能够引导您进入没有modification anomalies的数据库表设计,正如您所希望的那样!
答案 2 :(得分:1)
Pulegiums解决方案是一个很好的方法。
您不希望使用one-table-for-each-product解决方案,因为在插入或删除产品时不必更改数据库的结构。只应插入或删除一个或多个表的行,而不是表本身。
答案 3 :(得分:1)
虽然可能有必要,但是对于像产品列表这样简单的东西而言,有很多字段听起来像是你可能有一个有缺陷的设计。
您需要分析您的潜在表结构,以确保每个字段包含的信息不超过一条(例如,单个字段中的“2个锤子,500个钉子”是坏的)并且每条信息都不再存在比它所属的一个字段(例如,phone1
,phone2
,phone3
字段不好。这两种情况中的任何一种都表明您应该将该信息移出到一个单独的相关表中,并使用外键将其连接回原始表。正如pulegium已经证明的那样,这种技术可以迅速将事情分解为三个表,总共只有十几个字段。