相关匿名外键
连接表相关的我的其他问题:
数据设计
比方说,我有一个标签表:
tblTags
-------------
TagID (int)
Name (string)
个
和两个内容表:
tblBlogs
-------------
Anchor (GUID, Primary Key)
BlogTitle (string)
+ More custom fields
tblTutorials
-------------
Anchor (GUID, Primary Key)
TutorialTitle (string)
+ More custom fields
将会有更多的表与锚为好,它不只是2
然后标签与上述实体相关联:
tblTagAnchors
-------------
TagID (int, Foreign Key)
Anchor (GUID, Foreign Key)
我的问题是,一旦我建立了具有特定标记的博客和教程的关联,是否有任何方法来编写查询以返回具有特定标记的博客或教程?无需为博客和教程分别查询?
主要用途是用于搜索,东西线沿线的(伪):
select from tblBlogs and tblTutorials where the GUID exists in tblTagAnchors where tagID = 5
for each record returned
if record from Blog
response.write("<a href=blogView.aspx?ID=" + recID)
else if record from Tutorial
response.write("<a href=tutorialView.aspx?ID=" + recID)
next
我使用SQL Server 2008 Express和ASP.net 4(C#),如果它使太大的区别Linq to SQL,但基于设计的答案是我所需要的,除非用于演示,否则不需要任何代码。
是否有多个查询做到这一点的唯一方法?
我同意@JStead的回答。你有两个表,所以你需要两个查询(在你的例子中),Union会将它们合并成一个结果集。但是,他关于“有条件的外键使我想要关闭”的评论对我来说有点令人困惑,因为您的设计是处理多对多表格设计的经典方式。一个标签可以在许多博客(或教程)中,一个博客(或教程)可以有很多标签。因此,你需要一个多对多的表(tblTagAnchors)来跟踪它们 - 我不确定你会有什么其他选择。它也不违反数据库设计规范化。 – Jim 2011-04-18 12:18:07
当我开始工作时,我会概述我的设计,但我的问题不在于拥有关联表。无论如何,你都会有一张关联表。我的查询说明的主要问题是您有一个外键关系,这取决于网站的类型。 – JStead 2011-04-18 12:29:48
基于联合的查询将比基于左外部联接的查询更高效。 – 2011-04-18 14:15:34