动态加入建议

时间:2011-09-18 18:02:19

标签: .net asp.net sql

我正在寻找一些建议,请在我试着解释一下时请耐心等待!

我目前的情况是根据对内容类型的操作生成新闻Feed,真正基本形式的表格可能类似于:

<userid, int, FK> | <actionType, int, FK> | <contentType, int, FK> | <objectID, int>

所以例如...... userid 2000,在对象id 2001上的contentType 1上执行了动作类型1

objectID是对象的唯一ID,相对于内容类型。随后不能通过约束强制执行,因为根据内容类型,表格将不同。

现在,以我之前给出的例子(2000,1,1,2001),为了在网站中显示这个,我需要查询对象,让我们说contenttype'1'是'用户',动作是“打耳光”,以产生这个:

卡尔打了乔治

我会加入userid字段来获取karl,但需要另一个查询来获取用户2001的详细信息..

这有意义吗?

所以我最终会遇到这样一种情况:要做一个“选择前10名”新闻提要,我至少需要11个查询(一个用于初始查询,然后是10个查询)。

我想要一个更好的方法来实现这一点,我能想到的唯一方法就是在存储过程中完成所有操作,使用大型case语句,游标和一些临时表:x

欢迎任何建议!

提前致谢, 卡尔

1 个答案:

答案 0 :(得分:0)

我看到两种可能性,可能还有其他解决方案:

1 /创建一个结合所有<contenttype>, <objectid>组合的视图,类似于

CREATE VIEW ObjectIds AS (
       SELECT <ID_OF_CONTENTTYPE_1> as ContentType, ID from <TABLE_1>, <possibly other needed columns>
 UNION SELECT <ID_OF_CONTENTTYPE_2> as ContentType, ID from <TABLE_2>, <possibly other needed columns>
 -- etc
)

然后,您可以加入此视图而不是原始表格

2 /重构事实表以使用真正的FK代替。这确实意味着您必须事先了解所有“内容类型”。