我在写某种资源管理系统。根据条件T-SQL ORDER BY
资源是定义的一个实例。定义是元数据,基本上它包含属性。
这是一般我的DB:
TypeDefinition
id name
===============
1 CPU
PropertyDefinition
id name typeDefinitionId valueType
================================================
1 frequency 1 int
2 status 1 string
TypeInstance
id name typeDefinitionId
=================================
1 CPU#1 1
2 CPU#2 1
PropertyInstanceValue
id propertyDefinitionId typeInstanceId valueType intValue StringValue FloatValue
========================================================================================
1 1 1 int 10
2 2 1 string Pending
3 1 2 int 20
4 2 2 string Approved
需要量:
为了根据特定属性值的所有资源。
例如:根据其所有资源状态→>含义CPU#2将出现在CPU#1之前,因为“已批准”在“待定”之前。
如果我们根据频率订购,CPU#1将前CPU#2,因为10是前20.
所以我需要根据不同的列(的intValue/stringValue的每个时间整理出现/ FloatValue/etc),具体取决于属性的valueType。
有什么建议吗?
限制:
PIVOT目前我们已经想到的唯一选择,但由于数据库是巨大的,我需要查询的是尽可能快它不是真的有可能。
非常感谢,
Michal。
后,你被卡住 –
我们知道你的代码到目前为止,让看起来你有[EAV](http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model)设置的特别令人讨厌的形式。你也有一个非规范化问题,可能会反过来咬你(因为'valueType'在'PropertyInstanceValue'中被复制)。你不会需要数据透视(并且它会始终对_columns_进行排序?),只要您为一列写入数据,就可以使用连接和一些相关的结果表来完成此操作。但是,您是否仅对状态的_alphabetic_顺序或其他标准感兴趣? –