2

我使用表格GadgetData来存储应用程序中小工具的属性。小工具基本上是一种自定义控件,具有 80% 的常见属性,如高度、宽度、颜色、类型等。每种小工具类型都有一些属性集是它们独有的。所有这些数据都必须存储在数据库中。目前我只存储常见的属性。我应该使用什么设计方法来存储这些列是动态的数据。

  1. 创建具有作为 Columns 的公共属性的表,并添加额外的 Text 类型的列,以 XML 格式存储每个小工具类型的所有唯一属性。
  2. 创建一个表,其中包含所有小工具类型中的所有可能列。
  3. 为每种类型的小工具创建单独的表。
  4. 你还有什么更好的推荐方式吗?

(注意:小工具类型的数量甚至可能超过 100 和 )

4

4 回答 4

3

选项 3 是一个非常规范化的选项,但如果您必须跨多种类型进行查询,它会回来咬你——SELECT如果添加了新类型,每个都会有另一个连接。维护的噩梦。

选项 2(稀疏表)会有很多 NULL 值并占用额外空间。如果将来添加另一种类型,表定义也需要更新。没那么糟糕,但仍然很痛苦。

我在生产中使用选项 1(使用xml类型而不是text)。它允许我序列化从我的通用类型派生的任何类型,提取通用属性并将唯一的属性留在XmlProperties列中。这可以在应用程序或数据库(例如存储过程)中完成。

于 2009-05-26T06:52:05.647 回答
1

您的选择:

  1. 好一个。甚至可以强制模式等
  2. 你不能让那些列不为空,所以你会在那里失去一些数据完整性
  3. 只要您不允许搜索超过一种类型的小工具,就足够了,但选项 1 更好
  4. 我会使用 ORM

笔记:

如果你想让你的数据库保持“关系”,但又不怕使用 ORM 工具,那么我会使用一个。在这种情况下,您可以(几乎)根据需要存储数据,但只要您正确映射它们,就可以正确处理它们。看:

如果您需要纯 SQL 解决方案,那么根据您的 RDBMS,我可能会使用 XML 列来存储特定于小工具类型的所有数据:您可以进行验证,使用新属性轻松扩展。然后您可以在一张表中拥有所有内容,快速搜索所有常见属性,还可以轻松搜索一个小工具的类型属性

于 2009-05-26T07:01:58.967 回答
1

如果所有类型的小工具都有许多可以存储在一个表中的公共强制属性和几个可选属性,那么您最好使用第一种方法:这样您将使用最好的关系模式并使用 XML 简化您的生活。并且不要忘记使用将 XML 列链接到它的 XML Schema 集合:您将拥有完整的索引和 XQuery 功能。

如果小工具类型有非常不同的描述,并且在 5 个或更多不同的属性集中只有 1-3 个公共列,请使用第三种方法。


但是对于 100 多种小工具的情况,我会使用第一种方法:它具有良好的性能和易于支持和进一步开发的灵活性支持。

于 2009-12-17T08:12:54.747 回答
0

根据“小工具”的不同程度,我不喜欢选项 2,会有很多空值浮动,如果您有一个列对于一个小工具是强制性的,但对于另一个小工具却没有使用,这可能会变得很糟糕。

如果小工具的数量不经常更改,我只会选择选项 3,因为它每次都需要更改数据库。

未提及的选项是将小工具存储在包含小工具唯一值的子表中。但这需要大量工作才能返回小工具详细信息或多次数据库调用。

离开选项 1,除了我将使用 SQL 服务器 XML 类型而不是文本之外,您可以在存储过程中使用 XQuery。

于 2009-05-26T06:38:24.567 回答