我正在构建一个检测表可以连接在一起的系统。例如,在两个简单表格的情况下 - 如果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