SQL Server动态列问题
我使用表GadgetData
来存储我的应用程序中的小工具的属性。 小工具基本上是一种自定义控件,它具有80%的属性,如高度,宽度,颜色,类型等常见的属性。每种小工具类型都有一些独特的属性集。 所有这些数据都必须存储在数据库中。 目前我只存储通用属性。 我应该使用什么样的设计方法来存储这些数据在哪些列是动态的。
(注意:小工具类型的数量可能会增长到100以上,并且)
选项3是一个非常规范化的选项,但如果您必须跨多种类型进行查询,则会返回并咬你 - 如果添加新类型,每个SELECT
都会有另一个连接。 维护噩梦。
选项2(稀疏表)将有很多NULL值并占用额外的空间。 如果未来添加其他类型,表格定义也需要更新。 不是很糟糕,但仍然很痛苦。
我在生产中使用选项1(使用xml
类型而不是text
)。 它允许我序列化从我的公共类型派生的任何类型,提取公共属性并在XmlProperties
列中保留唯一属性。 这可以在应用程序或数据库中完成(例如存储过程)。
您的选择:
笔记:
如果你想保持你的数据库'关系',但不害怕使用ORM工具,那么我会使用一个。 在这种情况下,您可以根据需要(几乎)存储数据,但只要正确映射它们就能正确处理数据。 看到:
如果您需要纯SQL解决方案,那么根据您的RDBMS,我可能会使用XML列来存储特定于小工具类型的所有数据:您可以进行验证,并使用新属性轻松扩展。 然后,您可以将所有内容放在一张表中,快速搜索所有常见属性,并且还可以轻松搜索一个小工具的类型属性
如果所有类型的小工具都有许多可以存储在一张表中的常用强制属性,并且只有几个可选属性,那么您最好使用第一种方法:因此,您将使用最好的关系模式,并通过XML简化您的生活。 不要忘记使用XML Schema集合将XML列链接到它:您将拥有完整的索引和XQuery功能。
如果小工具类型具有非常不同的描述,并且在5个或更多不同属性集中只有1-3个常用列,请使用第3种方法。
但关于100种类型的小工具的情况,我会使用第一种方法:它具有良好的性能以及易于支持和进一步开发的灵活性。
链接地址: http://www.djcxy.com/p/68625.html上一篇: SQL Server Dynamic Columns Problem
下一篇: Qt msvc2015 32 bit binaries with msvc 2017 32 bit compiler