假设我在内存中有 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/