我正在构建一个系统,可以检测表何时可以连接在一起。例如,在两个简单表的情况下 - 如果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
我如何检测视图和表之间连接的可能性?
答案 0 :(得分:2)
您有两种方法,您选择哪种方法取决于您是否需要快速解决方案来更改DBMS,或者是否付出了艰苦的努力。
获取视图架构,在DBMS中创建临时表并使用现有逻辑
即使您必须创建表以匹配视图模式,我认为这是一个快速的解决方案,因为所有测试负担都转移到SQL Server。
将两个表的架构加载到DataTable并手动执行测试