As tabelas de pesquisa (ou tabelas de código , como algumas pessoas as chamam) geralmente são uma coleção dos possíveis valores que podem ser fornecidos para uma determinada coluna.
Por exemplo, suponha que tenhamos uma tabela de pesquisa chamada party
(destinada a armazenar informações sobre partidos políticos) com duas colunas:
party_code_idn
, que contém valores numéricos gerados pelo sistema e (sem significado no domínio comercial ) funciona como substituto da chave real.party_code
, é a chave real ou "natural" da tabela porque mantém valores que possuem conotações no domínio comercial .
E digamos que essa tabela retenha os dados a seguir:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
A party_code
coluna, que mantém os valores 'Republicano' e 'Democrata', sendo a chave real da tabela, é configurada com uma restrição ÚNICA, mas eu opcionalmente adicionei party_code_idn
e defini-a como a PK da tabela (embora, logicamente falando , party_code
pode funcionar como a PRIMARY KEY [PK]).
Questão
Quais são as práticas recomendadas para apontar para valores de pesquisa de tabelas de transação ? Devo estabelecer referências à CHAVE ESTRANGEIRA (FK): (a) diretamente ao valor natural e significativo ou (b) aos valores substitutos?
Opção (a) , por exemplo,
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
possui as seguintes propriedades 1 :
- Legível para o usuário final (+)
- Fácil de importar e exportar entre sistemas (+)
- Difícil alterar o valor, pois precisa de modificação em todas as tabelas de referência (-)
- Adicionar novo valor não é caro (=)
Eu acho que é quase como " passar por valor ", desenhar uma analogia da chamada de função no jargão de programação de aplicativos.
A opção (b) , por exemplo,
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
tem as propriedades abaixo:
- Não legível para o usuário final (-)
- Difícil importar-exportar , pois precisamos desmarcá-lo (-)
- Valores fáceis de alterar, pois armazenamos apenas referências nas tabelas de transações (+)
- Adicionar novo valor não é caro (=)
É muito semelhante a " passagem por referência ", se comparado à chamada de função na linguagem de programação de aplicativos.
A importação-exportação também pode ser feita de uma maneira diferente, ou seja, apenas preenchendo a tabela de consulta novamente e, em seguida, re-semeando a coluna substituta. Espero estar acertando, isso é algo que acabei de ouvir como uma possibilidade.
1. Nota que +
, -
e =
indicam o benefício dessas propriedades.
Questão
Muito importante: existe uma diferença entre uma tabela de pesquisa (ou código ) e uma referência FK se apenas usarmos a última abordagem? Eu acho que eles funcionam da mesma forma.