c# - 判断两个表是否相关的函数

标签 c# .net sql logic

假设我在内存中有 5 个表模式作为数据表,另一个数据表是其他 5 个表之间的引用约束的模式。

5 个模式表是相关的,表 A 包含与 B 中的外键相关的主键列。B 还包含与 C 中的外键列相关的主键列,C 到 D,但假设 A ,B,C,D与E没有直接或间接的关系。

什么样的函数会接受两个数据表并返回一个 bool 值,指示这些表是否相关或“链接”。

我正在努力实现的目标

假设我在拖放式界面中向用户展示 5 个表格中的所有列。我希望用户能够以图形方式构建查询,但我需要根据是否可以在同一选择语句中返回某些列来启用/禁用它们。

最佳答案

您说您有第六张表,其中包含其他表之间的约束。

假设您可以有效地使用此信息,并且只是试图映射直接关系,您可能会这样做:

  • 编译所有表的列表,这些表可能包含可能从其他表引用的主键
  • 遍历每个这样的表 X
    • 编译 X 可能相关的表的列表 L
    • 对于表 X 中的每个主键 K,遍历 L 中的每个表,搜索对 K 的任何引用。
    • 一旦遇到对任何 K 的引用,立即中断并跳到 L 中的下一个表
    • 以某种方式存储有关关系的信息(例如,每个表 X 的 L 表列表)

我知道这是非常高级和抽象的,但我希望它有意义..

这可能需要一些时间来运行,具体取决于表的数量和它们之间关系的复杂性,但我看不出有更好的选择。

您可以将有关“禁止”关系的信息存储在例如带有键和每个表的列表的字典中;像这样(对于单向关系,避免重复注册信息):

{TableA => {TableB, TableC}, 
 TableB => {TableC, TableD}, 
 TableC => {}, 
 etc..}

关于c# - 判断两个表是否相关的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954305/

相关文章:

c# - 通过 COM 互操作调用线程

c# - 包装类似log4net的第三方记录器时要考虑的设计原则

c# - 影响相对文件路径的环境 PATH 变量

c# - 我可以覆盖我无法继承的类的属性吗?

java - 如何从用户输入中转义撇号

c# - 检查javascript的完整性,用户代码=服务器代码

c# - 为什么 !0 是 Microsoft 中间语言 (MSIL) 中的一种类型?

c# - ASP.NET Gridview 列大小调整

sql - Parenthesis() 和 SQL 查询性能

SQL 动态 ASC 和 DESC