相關匿名外鍵
連接表相關的我的其他問題:
數據設計
比方說,我有一個標籤表:
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