#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, не вызывая их явно … возможно, за исключением сложных ситуаций, связанных с несколькими параллельными циклами (но, честно говоря, не понимаю, почему это не могло быть решено).