Ao trabalhar com o modelo relacional, temos 2 grupos de operações que podemos utilizar.
A primeira é chamada de álgebra relacional , e é uma linguagem de procedimento .
É nisso que o SQL se baseia e, como tal, é muito importante aprender - já que o SQL é o padrão de fato para trabalhar com bancos de dados relacionais.
O segundo é chamado de cálculo relacional e em vez de ser procedural, é uma linguagem declarativa . É uma diferença fundamental em como interagimos com bancos de dados, porque você não diz ao software de banco de dados o que fazer , basta dizer o que você quer , e deixe-o resolver os detalhes de como fazê-lo.
Esta é uma distinção comum entre linguagens de programação. No frontend moderno, dizemos que a interação com o DOM no React é declarativa. Usar o JavaScript vanilla para modificar o DOM é procedimental.
Linguagens como Datalog, QBE e QUEL têm como base o cálculo relacional. Não vou falar sobre isso porque acho que é uma maneira muito mais de nicho de fazer as coisas em comparação com a abordagem mais prática seguida pelo SQL, mas você pode dar uma olhada se quiser.
Dada esta introdução, vamos continuar com a álgebra relacional .
Temos 2 tipos de operações:
- operações primárias
- unir operações
Operações primárias em álgebra relacional
As operações primárias são:
- união para obter dados de duas tabelas, gerando uma soma das tuplas, desde que as duas tabelas tenham as mesmas colunas e tipos de atributo (domínio).
- diferença para obter os dados contidos na primeira tabela, mas não na segunda tabela, gerando uma diferença das tuplas, desde que as duas tabelas tenham as mesmas colunas e tipos de atributo (domínio).
- produto cartesiano para obter dados de duas tabelas e gerar uma única tabela que combina os dados delas, com base em um valor de atributo.
- selecionar para extrair apenas algumas das tuplas (linhas) contidas em uma tabela com base em determinados critérios.
- projeto para gerar uma nova tabela contendo apenas um ou mais atributos (colunas) de uma tabela existente
- renomear usado para renomear um atributo, usado para evitar conflitos quando várias tabelas têm o mesmo nome para dados diferentes
Juntar operações em álgebra relacional
As junções são provavelmente as operações mais poderosas que você pode realizar com álgebra relacional. Eles se baseiam em operações primárias e permitem correlacionar dados contidos em diferentes relações (tabelas).
Nota:em breve falarei sobre joins na prática em um SGBD, isso é principalmente teoria.
Temos 2 versões principais de junção:junção natural e junção theta . Todas as outras versões são extraídas dessas 2.
União Natural
União natural correlaciona duas relações (tabelas) e cria uma nova tabela com base nos mesmos valores de um atributo.
Precisamos de duas relações com o mesmo nome de atributo (coluna), primeiro. Então, se os valores nos atributos da relação A forem incompatíveis nos atributos da relação B, a linha não faz parte do resultado, é ignorada.
Exemplo:
Relação A
ID do funcionário | Nome |
---|---|
1 | Marcar |
2 | Tony |
3 | Rick |
Relação B
Nome do gerente | ID do funcionário |
---|---|
Todd | 1 |
Alberto | 2 |
Podemos realizar uma junção natural para obter o nome do chefe para cada funcionário:
ID do funcionário | Nome | Nome do gerente |
---|---|---|
1 | Marcar | Todd |
2 | Tony | Alberto |
Como as relações têm o nome do atributo Employee ID em comum, ele está presente apenas uma vez no resultado, não 2 vezes.
O funcionário nº 3 presente na relação A, Rick, não está incluído nesta tabela, pois não há entrada correspondente na relação B.
Teta-join
Uma junção teta permite realizar uma junção com base em qualquer critério para comparar duas colunas em duas relações diferentes, não apenas igualdade como a junção natural.
Ele realiza um produto cartesiano de duas tabelas e filtra os resultados com base na seleção que desejamos fazer.
Equi-join
O equi-join é um theta join, onde a seleção é baseada na igualdade entre os valores dos atributos nas duas tabelas diferentes.
A diferença com a junção natural é que podemos escolher quais nomes de atributos (colunas) queremos comparar.
Falaremos muito mais sobre joins mais tarde, quando o SQL for introduzido, para que possamos usá-los na prática.