SQL - Cardinalidade

O que é Cardinalidade ?

Cardinalidade é a informação de quantas vezes a coluna A da tabela B encontra correspondência com a coluna C da Tabela D.

Note que o conceito de correspondência depende de um operador. Posso ter os valores das colunas iguais, a coluna A ser maior que a coluna C, menor, diferente. Portanto a cardinalidade irá depender da operação que está sendo efetuada entre as duas tabelas. Normalmente mencionamos a cardinalidade com o operador igual mas isto não é regra.

Explicando de outra forma, pegando uma coluna qualquer de uma tabela A que esteja associada a outra tabela B num, join por exemplo, quantas colunas da tabela A encontram correspondência na tabela B . Podemos ter :

0 - o número 0(zero), ou seja, não há correspondência. Fazendo um exemplo com a vida real seria como saber quantos gostam de carne numa familia vegetariana.

1 - para cada coluna da tabela A temos 1 coluna da tabela B. Um caso real seria quantas esposas um marido tem.

n - Para cada coluna da tabela A temos muitas correspondências na tabela B. Num caso real seria quantos filhos tem um casal

Note que a cardinalidade pode ser fixa ou não. Por exemplo, se eu pegar as vendas feitas para um cliente. Se ele nunca comprou não é cliente portanto a cardinalidade zero esta eliminada. Posso ter cliente que comprou uma vez, outros 2, outros 3 e assim por diante. Então a cardinalidade seria de 1 para n porque é o pior caso.

Técnicamente a única coisa que a gente precisa para conectar uma tabela a outra é que as colunas sejam compatíveis, ou seja, se, por exemplo, na tabela A e B tenho datas que elas estejam no mesmo idioma, se for caractere que tenham o mesmo conjunto de caracteres (coalesce). Em regra geral os campos devem ser do mesmo tipo.

Cardinalidade 0

Tecnicamente é um erro fazer o join entre 2 tabelas que não tenham qualquer correspondência, por esse motivo raramente verá esta cardinalidade em qualquer união possível.

Cardinalidade 1 para 1

A cardinalidade 1 para 1 ocorre quando um item da TAB A só se associa a um item da TAB B.

É o caso tipico, por exemplo, de uma nota fiscal e a pessoa que efetuou a compra. Pela natureza da transação a Nota Fiscal é atribuída apenas a um cliente, o comprador.

Normalmente a cardinalidade 1 para 1 está associada a chaves primárias das tabelas e a colunas que possuam valores exclusivos, ou sejam, não se repetem nas tabelas.

Cardinalidade 1 para n ou n para 1

A cardinalidade 1 para n ocorre quando um item da TAB A só se associa a mais de um item da TAB B.

Um exemplo bem comum desta 'correspondencia' entre colunas é o da tabela de funcionários com a tabela filhos.
Sabemos que uma pessoa pode não ter filhos, ter 1 ou mais filhos. Quando o funcionário tem mais de um filho ele tem uma cardinalidade 1 para n e dizemos que a cardinalidade da relação é um para n porque é a ocorrência mais comum da cardinalidade nesse relacionamento de tabelas.

Cardinalidade n para n

A cardinalidade n para n ocorre quando um item da TAB A só se associa a mais de um item da TAB B e um item da TAB B se associa a mais de um item da TAB A.

Explicando na teoria a coisa fica meio obscura. Vamos analisar um exemplo prático

O relacionamento da tabela de Filme com a tabela do Ator é de n para n porque um filme tem diversos atores.

O relacionamento da tabela Ator com a tabela Filme é de n para n porque um ator pode ter realizado diversos filmes.

Note que a tabela 'Carreira do Ator' não passa de um mero link entre as tabelas Filme e Ator e sua função é apenas 'amarrar' as duas tabelas externas.

E o que a Cardinalidade afeta o resultado da querie ?

Afeta diretamente no número de linhas retornadas pela querie.

Se a cardinalidade é de 1 para 1 teremos o número máximo de linhas retornadas pela querie igual o número de linhas da menor tabela associada. Se uma tem 100 registros e outra tem 5 o resultado retornado será de apenas 5 registros.

Já numa querie de 1 para n teremos o número de registros retornados, no máximo, o número de linhas da maior tabela multiplicado pela cardinalidade entre as tabelas. Portanto se uma tabela tem 5 registros e outra tem 1000 poderemos ter como retorno 5000 registros se a cardinalidade for de 1 para 5, ou seja, cada coluna da TAB A encontrou 5 colunas na TAB B ou vice-versa.

Na cardinalidade n para n teremos como resultado, no máximo, o número de colunas das duas tabelas multiplicados. Novamente dependem da cardinalidade entre as colunas.