Соединение реляционной базы данных между двумя таблицами, имеющими неизвестное количество промежуточных таблиц

#sql #relational-database

#sql #реляционная база данных

Вопрос:

У меня есть большая база данных, в которой я хочу настроить обобщенный метод запроса для подтаблиц (или объединение между подтаблицами). Однако таблицы, которые меня интересуют, являются вложенными таблицами родительской таблицы, которая представляет собой неизвестное количество таблиц с глубиной связей из этой родительской таблицы, в зависимости от таблицы, к которой я запрашиваю.

Есть ли средство, с помощью которого вы можете заставить SQL автоматически объединять все промежуточные таблицы между двумя представляющими интерес таблицами? Или сузить запрос только до подмножества родительской таблицы?

Например, этот набор отношений: Folder_Table->System_Table->Items_Table->Items_Class->Items_attributes->Items_Methods->Method_Data->Method_History

Я хочу иметь возможность в общем виде выполнять поиск или объединения в любой из вложенных таблиц, где результаты относятся только к одной папке Folder_table, без необходимости выполнять серию явных соединений с уровнями X таблиц в глубину … что значительно увеличило бы сложность построения интерфейсов общих запросов во время выполнения.

Ответ №1:

Нет, не существует.

То, что вы просите, — это знаменитая функция «выяснить, что я хочу сделать, и сделать это», которая была бы золотой панацеей языков программирования или баз данных.

SQL является явным. Вам нужно указать путь, явно перечислив таблицы для объединения и способы их объединения.

Теперь, не могли бы вы создать такую функцию для вашего конкретного случая? Конечно. Вы бы встроили в него знания либо о ваших конкретных структурах таблиц, либо о способе получения информации, необходимой для автоматического нахождения пути между таблицей A и таблицей B. Однако такой встроенной функции, которая уже существует, просто ждет, когда вы ее используете, не существует. Итак, если вы хотите такую функцию, вам придется написать ее самостоятельно.

Дополнительные вопросы:

  • Что, если между A и B существует несколько путей?

Комментарии:

1. В свою защиту скажу, что я не думаю, что это попадает в категорию «золотой панацеи». Я просто смотрю из парадигмы современного языка программирования, которая ожидает, что интерпретируемый язык, такой как SQL, будет иметь самоанализ. С помощью самоанализа он должен быть в состоянии понять цепочку взаимосвязей между A и B, не вызывая их явно … возможно, за исключением сложных ситуаций, связанных с несколькими параллельными циклами (но, честно говоря, не понимаю, почему это не могло быть решено).