我目前正忙于制作一个 Python ORM,它通过自省从 RDBMS 获取其所有信息(如果我在其他方面对它感到满意,我会选择 XRecord)——意思是,最终用户只告诉哪些表/视图看一下,ORM 会自动完成其他所有事情(如果它让你真正写了一些东西,而你不是在寻找奇怪的东西和危险的冒险,那就是一个错误)。
其中的主要部分是检测关系,前提是数据库具有所有相关的约束并且您根本没有命名约定——我希望能够让这个 ORM 与任何疯狂的 DBA 制作的数据库一起工作,该数据库有他自己的关于列和表应该命名的视图。我被困在多对多的关系中。
首先,可以有复合键。然后,可以存在与三个或更多表的 MTM 关系。然后,一个 MTM 中间表可能除了键之外还有自己的数据——一些数据对于它绑定在一起的所有表都是通用的。
我想要的是一种以编程方式检测表 X 是绑定表 A 和 B 的中间表的方法,并且它拥有的任何非键数据都必须属于 A 和 B(如果我从 A 中更改公共属性,它应该影响 B) 中的相同属性。有没有通用的算法来做到这一点?或者至少在 80% 的情况下做出正确的猜测(前提是 DBA 是理智的)?