AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 104641
Accepted
John
John
Asked: 2015-06-20 23:58:28 +0800 CST2015-06-20 23:58:28 +0800 CST 2015-06-20 23:58:28 +0800 CST

A chave da relação resultante de uma junção externa completa

  • 772

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?

join relational-theory
  • 2 2 respostas
  • 193 Views

2 respostas

  • Voted
  1. Best Answer
    Todd Everett
    2015-08-21T13:59:00+08:002015-08-21T13:59:00+08:00

    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:

    • As tuplas não são ordenadas - a ordem não contém nenhum significado implícito
    • Tuplas são distintas - não há duplicatas
    • Os atributos não são ordenados - a ordem não contém nenhum significado implícito
    • Os atributos são de valor único - apenas um de qualquer tipo que seja

    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, é:

    uma espécie de casamento forçado: obriga as mesas a uma espécie de união — sim, quero dizer união, não união — mesmo quando as mesas em questão não cumprem os requisitos usuais para união (ver Capítulo 6). Ele faz isso, de fato, preenchendo uma ou ambas as tabelas com nulos antes de fazer a união, tornando-as, afinal, conformes com os requisitos usuais. Mas não há razão para que esse preenchimento não seja feito com valores adequados em vez de nulos. (Data, CJ (2011-12-16). SQL e teoria relacional: como escrever código SQL preciso (Locais do Kindle 2601-2602). O'Reilly Media. Edição Kindle.)

    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.

    • 5
  2. Vérace
    2015-06-21T06:30:32+08:002015-06-21T06:30:32+08:00

    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

    SELECT Surname 
    FROM Telephone_Directory; 
    

    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.

    • 1

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?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve