我需要帮助从包含特定对象的一个表(即Products)的模型和其动态属性的一个表进行查询。
假设我可以存储Chocolate
属性,例如Price
,Color
,Weight
以及Car
等属性,例如{{ 1}},Engine
,Gears
。
在我的示例中,我有一个名为Products的表,其中包含以下列:
Color
我有另一个名为 Id (Int),
Name (NVarchar)
的表,其中包含以下列:
dynamicAttributes
我从客户端获取属性代码列表和值列表。
我可以为每个属性获取值类型(aka boolean,string,int)。
从我的应用中查询此模型的最佳选择是什么?
仅限动态sqls?使用Pivot关键字?
答案 0 :(得分:1)
正如其他人所说,做很多PIVOT查询效率很低,编写和调试使用PIVOT的SQL查询很费力。
另一种方法是以数据库存储的方式从数据库中取回数据,即以多行的形式获取数据。然后在数据库访问层中编写代码,将行按摩到单个对象实例中,每个数据库行向对象添加一个属性。这在Martin Fowler的“企业应用程序架构模式”中被称为Table Module pattern。
如果您花费一些时间以可重用的方式编写DBAL代码,您可以使应用程序中的后续代码轻松读取并保存存储在EAV表中的对象。
但是,我赞同其他评论者。 I'm generally against using the EAV design。编写代码以补偿EAV打破数据库约定的方式需要做大量的工作。我认为你有更好的时间与你的时间有关!
有关替代方案,请参阅: