我正在構建一個檢測表可以連接在一起的系統。例如,在兩個簡單表格的情況下 - 如果Table A
有一個主鍵鏈接到Table B
中的外鍵,那麼系統會檢測到兩個表格之間可以進行連接。到目前爲止,這在C#中完美運行,只需遍歷所有外鍵並檢查哪些表具有引用相應FK的主鍵。檢測連接是否可能
但是,事情現在變得複雜了。我添加了虛擬表格的概念,形式爲View
。因此,可以使用連接表創建視圖,然後可以使用同一視圖與其他表進行連接。這樣做的目的是爲了能夠簡化可能連接3個或更多表的情況。從而允許用戶以簡單的方式將3個或更多的表連接在一起,這要感謝使用視圖。
我的問題是,意見似乎不存儲概念,如主鍵和外鍵。因此,我將如何去檢測特定表和視圖之間是否可以進行連接?例如,我可以有以下幾種觀點:
CREATE VIEW [View A]
AS
SELECT Children.Child_ID,
Social_Workers.Social_ID
FROM Children
INNER JOIN Social_Workers
ON Children.Social_ID = Social_Workers.Social_ID
接下來,我決定加入這一觀點與表像這樣:
SELECT [View A].Child_ID,
Sponsors.User_ID
FROM [View A]
INNER JOIN Sponsors
ON [View A].Child_ID = Sponsors.Child_ID
我怎麼會去檢測的加盟可能性視圖和表之間?
「可能」是有點誤導 - 它總是有可能加盟他們有任何列上的兩個表。 – Argeman 2013-03-07 11:35:08
@Argeman - 我的意思是 - 如果在兩個表格之間檢測到關係:) – 2013-03-07 11:36:57
我同意@Argeman以及更多,注意有一系列使用中的系統*(EAV任何人?)*加入但沒有外鍵。根據你的問題,我懷疑除了得到VIEW的定義並解析它之外別無他法。實質上,這也是優化器所做的,用實際的底層SQL語句替換視圖。也許如果你告訴我們你的用例,我們可以給你其他的選擇。 – 2013-03-07 11:41:41