Чи існують двигуни бази даних, які інтуїтивують умову приєднання на основі наявних закордонних ключів?


11

Мені здається дивним, що коли я визначив зовнішній ключ, двигун не може використовувати цю інформацію для автоматичного з'ясування правильних виразів JOIN, а натомість вимагає від мене повторно ввести ті самі пропозиції. Чи є бази даних, можливо, якийсь дослідницький проект, який перевірятиме існуючі закордонні ключі?

Відповіді:


4

Мені невідомо про те, що використовують зовнішні ключі (і це може бути безладно, якщо у вас є більше одного іноземного ключа до тієї ж таблиці)

Але Oracle буде базувати з'єднання імен стовпців, якщо не вказати конкретний тип приєднання, ані умови приєднання, або якщо ви використовуєтеNATURAL JOIN


Чому б це було безладно, якщо у вас є один зовнішній ключ до одного столу. Якщо ви дивитесь на це з точки зору "батьківської" таблиці, все одно повинно бути зрозуміло, який запис у дитини, яка вас цікавить.
Бет Вайтзел,

@Bitoff у вас може бути більше одного зв’язку між двома таблицями, і тому не складений ключ, а насправді більше ніж один зовнішній ключ дочірньої таблиці. Наприклад, у попередній роботі у нас була база даних організацій, і в цій таблиці є два посилання на мій стіл людей - керівник відділу, і первинний контакт (зазвичай, секретар). Існував зовнішній ключ у зворотному напрямку, оскільки співробітники призначаються до департаменту, поки нам не довелося його розбити, щоб підтримувати багато-багато-багато стосунків.
Джо

Я знаю, що жоден із поширених RDBMS не робить цього - як йдеться в запитанні, я ставив це питання, щоб побачити, чи хтось чув про щось нове в цій області.
TML

1
-1 Це неправильно щодо поведінки Oracle, і не було вашої відповіді, на яку ви посилаєтесь. Як вказував Гарі (третій коментар до вашої відповіді), " natural joinніколи не був за замовчуванням". До речі, Том Кіт, безумовно, має рацію, коли дзвонить natural join у помилку, що чекає,
Джек каже спробувати topanswers.xyz

4

Було б дуже здорово, якби я міг це написати

from calendar join table1

і dbms знає, що для цього потрібно це оцінити.

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. Я вважаю, що КЕСТ КОРОБ буде працювати з Oracle та деякими іншими більш популярними RDMS.


Немає справжнього «занепокоєння», просто цікаво, чи це хтось, на що звертається.
TML

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