В настоящее время я занят созданием Python ORM, который получает всю свою информацию от RDBMS посредством самоанализа (я бы пошел с XRecord, если бы я был доволен этим в других отношениях) - то есть конечный пользователь только говорит, какие таблицы / views, чтобы посмотреть, и ORM делает все остальное автоматически (если он делает , вы на самом деле что-то пишете, и вы не ищете странных вещей и опасных приключений, это ошибка).
Основная часть этого - обнаружение отношений, при условии, что в базе данных есть все соответствующие ограничения, и у вас вообще нет соглашений об именах - я хочу, чтобы эта ORM работала с базой данных, созданной любым сумасшедшим администратором баз данных, который имеет свои взгляды на то, как должны называться столбцы и таблицы. И я застрял во многих отношениях.
Сначала могут быть составные ключи . Тогда могут быть отношения MTM с тремя или более таблицами . Тогда промежуточная таблица MTM может иметь свои собственные данные , кроме ключей - некоторые данные, общие для всех таблиц, которые она связывает вместе.
Мне нужен метод программного обнаружения, что таблица X является промежуточной таблицей, связывающей таблицы A и B, и что любые неключевые данные, которые она имеет, должны принадлежать как A, так и B (и если я изменяю общий атрибут) изнутри A, это должно повлиять на тот же атрибут в B). Существуют ли общие алгоритмы для этого? Или, по крайней мере, делать предположения, которые являются правильными в 80% случаев (при условии, что администратор базы данных в здравом уме)?