Existe algum mecanismo de banco de dados que intuirá a condição de junção com base nas chaves estrangeiras existentes?

11

Parece estranho para mim que, quando defini uma chave estrangeira, o mecanismo não pode usar essas informações para descobrir automaticamente as expressões JOIN corretas, mas exige que eu digite novamente as mesmas cláusulas. Existem bancos de dados, talvez algum tipo de projeto de pesquisa, que inspecionem as chaves estrangeiras existentes?

TML
fonte

Respostas:

4

Não conheço ninguém que use chaves estrangeiras (e isso pode ser confuso se você tiver mais de uma chave estrangeira na mesma tabela)

Mas o Oracle baseará as junções fora do nome das colunas se você não especificar um tipo de junção específico nem uma condição de junção, ou se você usarNATURAL JOIN

Joe
fonte
Por que seria confuso se você tiver mais de uma chave estrangeira na mesma tabela. Se você está olhando para ele a partir do "pai" perspectiva tabela ainda deve ser clara quanto ao que recorde na criança que você está interessado.
Beth Whitezel
@ Bitoff, você pode ter mais de um relacionamento entre as duas tabelas e, portanto, não uma chave composta, mas na verdade mais de uma chave estrangeira para a tabela filho. Por exemplo, em um trabalho anterior, tínhamos um banco de dados de organizações e nessa tabela existem dois links para minha tabela de pessoas - chefe do departamento e o contato principal (geralmente a secretária). Havia uma chave estrangeira na direção oposta, já que os funcionários são designados para um departamento, até que tivemos que quebrá-la para apoiar os relacionamentos muitos-para-muitos.
Joe
Eu sei que nenhum dos RDBMSs comuns faz isso - como a pergunta indica, eu a coloco para ver se alguém já ouviu falar de algo novo nesta área.
TML
1
-1 Isso não está certo sobre o comportamento do Oracle e nem sua resposta à qual você vincula. Como apontado por Gary (o terceiro comentário à sua resposta), " natural joinnunca foi o padrão". Aliás, Tom Kyte está certo quando chama natural join um bug que está esperando para acontecer
Jack diz que tente topanswers.xyz
4

Ele iria ser muito legal se eu pudesse escrever este

from calendar join table1

e os dbms saberiam que precisam avaliar isso.

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

Muito legal. Mas nem toda junção é uma junção equitativa .

FWIW, NATURAL JOINestá no padrão SQL. Mas tenho certeza de que não o usei nos últimos 25 anos.

Se você escrever as mesmas cláusulas de junção repetidas vezes, talvez precise de mais visualizações.

Mike Sherrill 'Recolha de Gatos'
fonte
3

Existem utilitários de preenchimento automático para o seu editor de escolha para sugerir automaticamente as instruções de junção apropriadas, se a digitação for o problema. Solicitação SQL da RedGate para lidar com o SQL Server no SSMS e no Visual Studio. Acredito que o TOAD da Quest lidará com Oracle e alguns dos outros RDMSs mais populares.

Eric Humphrey - lotes de ajuda
fonte
Nenhuma "preocupação" real, apenas me perguntando se isso é algo que alguém está procurando abordar.
TML
@TML Duvido que alguém esteja preocupado com isso, pois isso realmente está no domínio da lógica do aplicativo (onde lógica do aplicativo é o que não pertence à execução de um servidor de banco de dados, o que é pago)
jcolebrand