Qual é a chave da relação resultante de uma junção externa completa? Se não há chave, como se diz que a álgebra relacional é fechada sob seus operadores e o resultado de cada operador também é uma relação?
relate perguntas
-
Posso automatizar a instrução "on" das consultas MySQL?
-
Qual padrão devo seguir ao nomear tabelas e exibições?
-
Qual é a diferença entre um INNER JOIN e um OUTER JOIN?
-
Como é a saída de uma instrução JOIN?
-
Como estruturar um modelo para representar de forma adequada e eficiente dados em forma de árvore em bancos de dados relacionais?
Resposta curta
Fechamento em álgebra relacional não tem nada a ver com o conceito de chave. Uma variável relacional mantém uma relação desde que essa relação tenha as seguintes propriedades:
Os operadores básicos da álgebra relacional são de fato fechados e, portanto, quando aplicados em relações sempre produzem relações. As chaves são irrelevantes, pois, por definição, cada relação não possui tuplas duplicadas. Qualquer operação que resulte em tuplas duplicadas (por exemplo, a projeção de um único atributo sobre a relação) por definição elimina essas tuplas duplicadas ao fornecer o resultado. Como você sabe, o SQL não implementa isso corretamente.
Resposta longa
Para realmente entender a resposta curta e entender as nuances adicionais que a "junção externa" lança na equação, precisamos nos aprofundar nos fundamentos da álgebra relacional na álgebra numérica.
álgebra numérica
Álgebra é "a parte da matemática em que letras e outros símbolos gerais são usados para representar números e quantidades em fórmulas e equações", conforme definido pelo Google. Uma propriedade algébrica é a operação , o que significa que existem ações que funcionam para alterar os números. Para números, são adição, subtração, multiplicação, divisão, elevação a uma potência e extração de uma raiz. Existem muitas outras propriedades algébricas, como a propriedade associativa, que afirma que você pode agrupar números de qualquer maneira sem alterar o resultado das operações. Essas propriedades dão à álgebra seu poder único, pois com essas propriedades podemos usar letras para representar números, manipulá-los por meio de operadores definidos em equações e sabera transformação será absolutamente correta, independentemente do número real eventualmente substituído pelas letras.
O fechamento é outra das propriedades algébricas que afirma que, se um operador que trabalha com números sempre produz números, os números são fechados sob essa operação. Números reais que sabemos são fechados sob adição, por exemplo. Adicione quaisquer dois números reais e o resultado será sempre um número real. Os números reais não são fechados na operação de raiz quadrada, pois a raiz quadrada de -1 não é um número real. Tudo isso vem diretamente do glossário de propriedade do Math Forum @ Drexel.
álgebra relacional
Chris Date diz que Ted Codd era um gênio. A genialidade única de Codd foi a percepção de que as relações matemáticas, combinadas com a teoria dos conjuntos e a lógica, seriam muito práticas quando aplicadas ao gerenciamento de dados. A Practical Database Foundation Series de Fabian Pascal fornece uma excelente explicação de por que isso acontece, e revisarei brevemente algumas de suas percepções.
Um dos principais problemas de banco de dados da década de 1960 era aquele em que um programa tinha que ser escrito para cada "pergunta" que você gostaria de fazer ao DBMS gerenciando os dados. Codd mostrou que, tomando o conceito de relação e adaptando-o para bancos de dados, um modelo lógico de entrada e saída de dados poderia ser desenvolvido completamente distinto de como os dados são armazenados fisicamente. Parte desse modelo lógico era o conjunto de operadores que se aplicariam às relações - a álgebra relacional. Assim como a álgebra numérica nos permite explorar as propriedades algébricas para manipular equações massivamente complexas em que as letras representam qualquer número potencial e garantem resultados corretos, a álgebra relacional pode fazer o mesmo com as relações.
Por que isso é importante? Porque com a álgebra, as operações e seus resultados não dependem do que as relações e seus atributos realmente significam . Então, adaptando a lógica, que como a álgebra proscreve formas válidas que podem ser usadas para avaliar um argumento como verdadeiro ou falso, independentemente do que as proposições significam , uma linguagem de consulta generalizada pode ser implementada para permitir que um usuário do SGBD pergunte um verdadeiro questão dos dados - um de complexidade arbitrária - e o DBMS pode ser programado usando as regras da álgebra relacional para dar uma resposta comprovadamente correta !
Agora, assim como na álgebra numérica, o fechamento é a propriedade essencial que dá poder à álgebra. As relações são fechadas sob os operadores básicos e, como tal, você pode aninhar arbitrariamente essas operações à vontade, em qualquer ordem, para declarar praticamente qualquer "pergunta" que possa imaginar. Uma vez criado o DBMS que implementa a álgebra relacional, não é mais necessário escrever programas únicos para encontrar a resposta para cada pergunta. O usuário do DBMS simplesmente declara a questão usando a álgebra relacional.
Junção Externa
Até agora eu tenho dito operadores básicos . Isso porque a teoria não leva em conta os dados perdidos. Cada relação, por definição, contém tuplas com um valor para cada atributo. Mas para adaptar a matemática às realidades práticas dos dados perdidos, alguma solução deve ser desenvolvida para quando o valor de um atributo é desconhecido. SQL implementou o NULL e 3VL. Codd posteriormente propôs marcas e 4VL. O operador de junção teve que ser estendido para preservar as tuplas não correspondentes, e o SQL implementou a extensão produzindo NULLs em vez de valores para os atributos das tuplas não correspondentes. A data mostra que, ao fazer essa junção externa, é:
Conclusão
Então, as relações são fechadas sob a operação de junção externa (total, esquerda ou direita)? Eu acho que depende de como esse operador é implementado . Eu diria que sim se você considerar que uma relação ainda é uma relação, mesmo com marcadores para os valores ausentes dos atributos de tuplas não correspondentes. Ou sim, se você não considerar que uma relação ainda seja uma relação, mesmo com marcadores para valores ausentes, mas pode substituir valores padrão pelos valores de atributos ausentes. Mas se você não considera que uma relação ainda seja uma relação, mesmo com marcadores para valores ausentes, e seu DBMS implementa SQL NULLs, e você não pode ou não substitui valores para os NULLs fornecidos SQL na junção externa, então não , as relações sãonão fechado sob essa junção externa. Duas relações entraram, mas uma relação não saiu.
AIUI, o modelo relacional é um ideal matemático. Nenhum fornecedor implementa em sua totalidade. Confira Dataphor se você quiser esse tipo de sistema.
Para mostrar como é fácil subverter o modelo relacional - basta fazer
Aqui na Irlanda, você encontrará centenas de O'Briens e Murphys - o resultado ainda é uma mesa, embora não seja uma relação no sentido matemático.
A resposta curta à sua pergunta "qual é a chave da relação resultante de uma junção externa completa" é que não há necessariamente uma, assim como não há uma resultante da minha consulta simples.