协助查询SQL Server 2012中的实体属性值模型(“动态属性”)

时间:2012-11-18 12:56:06

标签: sql tsql sql-server-2012 entity-attribute-value sql-tuning

我需要帮助从包含特定对象的一个​​表(即Products)的模型和其动态属性的一个表进行查询。

假设我可以存储Chocolate属性,例如PriceColorWeight以及Car等属性,例如{{ 1}},EngineGears

在我的示例中,我有一个名为Products的表,其中包含以下列:

Color

我有另一个名为 Id (Int), Name (NVarchar) 的表,其中包含以下列:

dynamicAttributes

我从客户端获取属性代码列表和值列表。

我可以为每个属性获取值类型(aka boolean,string,int)。

从我的应用中查询此模型的最佳选择是什么?

仅限动态sqls?使用Pivot关键字?

1 个答案:

答案 0 :(得分:1)

正如其他人所说,做很多PIVOT查询效率很低,编写和调试使用PIVOT的SQL查询很费力。

另一种方法是以数据库存储的方式从数据库中取回数据,即以多行的形式获取数据。然后在数据库访问层中编写代码,将行按摩到单个对象实例中,每个数据库行向对象添加一个属性。这在Martin Fowler的“企业应用程序架构模式”中被称为Table Module pattern

如果您花费一些时间以可重用的方式编写DBAL代码,您可以使应用程序中的后续代码轻松读取并保存存储在EAV表中的对象。

但是,我赞同其他评论者。 I'm generally against using the EAV design。编写代码以补偿EAV打破数据库约定的方式需要做大量的工作。我认为你有更好的时间与你的时间有关!

有关替代方案,请参阅: