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


11

Мне кажется странным, что, когда я определил внешний ключ, движок не может использовать эту информацию для автоматического определения правильных выражений JOIN, а вместо этого требует от меня повторного ввода тех же предложений. Существуют ли какие-либо базы данных, возможно, какой-то исследовательский проект, который будет проверять существующие внешние ключи?

Ответы:


4

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

Но Oracle будет основывать соединения вне имени столбцов, если вы не укажете конкретный тип соединения или условие соединения, или если вы используетеNATURAL JOIN


Почему это было бы грязно, если у вас есть более одного внешнего ключа к одной таблице. Если вы смотрите на это с точки зрения «родительской» таблицы, все равно должно быть ясно, какая запись о ребенке вас интересует.
Бет Уайтзел

@Bitoff у вас может быть несколько связей между двумя таблицами, и, следовательно, не составной ключ, а фактически более одного внешнего ключа для дочерней таблицы. Например, на предыдущей работе у нас была база данных организаций, и в этой таблице есть две ссылки на мою таблицу людей - начальник отдела и основной контакт (обычно секретарь). В противоположном направлении существовал внешний ключ, поскольку сотрудники назначались в отдел, пока нам не пришлось взломать его для поддержки отношений «многие ко многим».
Джо

Я знаю, что ни одна из обычных СУБД не делает этого - как говорится в вопросе, я поставил вопрос, чтобы узнать, слышал ли кто-нибудь что-нибудь новое в этой области.
TML

1
-1 Это неверно в отношении поведения Oracle, и на ваш ответ вы не ссылались. Как указал Гэри (третий комментарий к вашему ответу), « natural joinникогда не было по умолчанию». Кстати, Том Кайт, безусловно, прав, когда он вызывает natural join ошибку, ожидающую ее появления,
говорит Джек, попробуйте topanswers.xyz

4

Было бы очень здорово, если бы я мог написать это

from calendar join table1

и БД будут знать, что это нужно для оценки этого.

from calendar
left join table1 on (work_date between (cal_date - 13) and cal_date)

Действительно круто. Но не каждое объединение является равноправным .

FWIW, NATURAL JOINв стандарте SQL. Но я уверен, что не использовал его в последние 25 лет.

Если вы снова и снова пишете одни и те же предложения объединения, возможно, вам просто нужно больше просмотров.


3

Для выбранного редактора есть утилиты автозаполнения, которые автоматически предлагают соответствующие операторы соединения, если вам важен ввод текста. SQL-запрос RedGate для обработки SQL Server в SSMS и Visual Studio. Я полагаю, что TOAD Quest будет работать с Oracle и некоторыми другими более популярными RDMS.


Никакого реального "беспокойства", просто интересно, является ли это чем-то, что кто-то ищет в решении.
TML

@TML Я сомневаюсь, что кого-то это беспокоит, так как это, на мой взгляд, действительно относится к области логики приложения (где логика приложения - это то, что не относится к работе сервера базы данных, то, за что нам платят)
jcolebrand
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.