私は現在、イントロスペクションを介して RDBMS からすべての情報を取得する Python ORM の作成に忙しくしています (他の点で満足している場合は XRecord を使用します)。 ORM は他のすべてを自動的に実行します (実際に何かを作成する必要があり、奇妙なものや危険な冒険を探していない場合、それはバグです)。
データベースに関連するすべての制約があり、命名規則がまったくない場合、その主な部分は関係を検出することです。このORMを、狂ったDBAが作成したデータベースで動作させたいと思っています。列とテーブルにどのような名前を付ける必要があるかについての見解。そして、私は多対多の関係で立ち往生しています。
まず、複合キーが存在する可能性があります。次に、 3 つ以上のテーブルとの MTM 関係が存在する可能性があります。次に、MTM 中間テーブルは、キーとは別の独自のデータ(それが結合するすべてのテーブルに共通のデータ) を持つ場合があります。
私が欲しいのは、テーブル X がテーブル A と B を結びつける中間テーブルであり、テーブル X にある非キー データが A と B の両方に属している必要があることをプログラムで検出する方法です (そして、A 内から共通の属性を変更した場合) 、Bの同じ属性に影響するはずです)。それを行うための一般的なアルゴリズムはありますか? または、少なくとも 80% のケースで正しいと推測するには (DBA が正気であれば) ?