2010-07-08 44 views
3

IM使用SQL Server设计数据库2005数据库设计问题 - 需要澄清

我们这边的

主要概念是导入XML从供应商

饲料

不同的供应商可以有数据

的不同表现问题是我需要设计表来存储导入的信息

某些列是固定的意味着所有的供应商产品都必须具有类似的数据来源,如名称,代码,价格,状态等

但有些产品具有可选的细节,如

一个产品有其他力量的颜色属性可能不。

将这些场景存储到数据库中的最佳方式是什么?

我应该创建一个强制性列和其他表来保存可选列的表。

或我应该先列出所有列,然后将它们放入一张表中。 (可能有很多空值)

会有上千种产品和数据库的速度是非常必要的。

我们会从不同的供应商做了很多产品比较的

我们的数据库将会像www.pricerunner.co.uk

我希望我解释一下这个概念以及

+0

类似于http://stackoverflow.com/questions/45621/how-do-you-deal-with-polymorphism-in-a-database – 2010-07-08 14:08:06

+0

这里的每个孩子都是供应商的产品 – 2010-07-08 14:12:17

回答

1

取决于你想如何访问它。正如你所说,速度很重要 - 但是你不会用那些额外的,可选的信息来做什么?你需要存储它们吗?假设你这样做,你需要多久才能访问它们?

本质上,如果你总是需要至少检查它们是否在那里,最好把它们放到一张表中。如果您仍然需要检查,不妨将它作为初始查询的一部分。

另一方面,如果您通常可以运行而无需检查这些额外的碎片,并且只需要在specilly请求时进行打扰,那么最好将它们放入不同的表格中。连接(或随后的查找)将很昂贵 - 比拖空空列更加昂贵 - 但如果非常少见,从长远来看,运行时执行的成本可能会更低。

还要记住存储和运输方面的权衡 - 存储大量空白字段需要占用一些空间,并且发回大量空白字段会占用网络带宽。

如果磁盘空间不是问题,但是带宽很高,那么应用程序会精心设计以最小化不必要的查找,然后通过严格的查询,您可以存储额外的(可选)数据,但除非请求。

所以,这一切都取决于什么对你很重要。一旦你知道你的首要设计关注的是什么,你就会知道哪些妥协,使以解决以邻为壑这些问题。平衡的行为。

1

成千上万的产品(所以几千行。)那真的不是很多,在所有的,所以你可以规范化可选的数据到几个独立的表,而不必在查询时间产生巨大影响。

我会说把你的指数在正确的位置,优化你的查询,请确保您有文件组分头行动很好,等等(只是一般普通的旧数据库的东西),你应该是好的。

+1

这是真的 - 几千条记录和时差将很难衡量。将其扩展到几百万,这会产生巨大的差异。考虑到规模也很重要。 – Ragster 2010-07-08 14:46:15