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.
FOREIGN KEY
em outra tabela, ela pode ficar bem bagunçada, mas YMMV.UNIQUE CONSTRAINT
esNOT NULL
- bem, suas entradas da tabela de códigos estãoFOREIGN KEY
nas tabelas que as usam / se referem a elas - para que os conceitos sejam relacionados, mas não os mesmos. A chave substituta da tabela de códigos é o campo que aparece na tabela "filho" - certamente menos legível, masINT
não é muito grande - não há muito espaço necessário, o que é uma vantagem das chaves substitutas.Existe uma terceira abordagem que tem algumas das vantagens de suas duas opções - coloque um código real na tabela de códigos. Com isso, quero dizer uma sequência curta de caracteres que captura a essência de todo o valor e é única. Para o seu exemplo, pode ser
O Código é transportado para tabelas transacionais como uma chave estrangeira. É curto, inteligível e um pouco independente dos dados "reais". Alterações incrementais no nome a não sugerem uma alteração no código. No entanto, se os republicanos se decidirem em massa , uma mudança de código pode ser necessária, com os problemas decorrentes que uma identificação substituta não teria.
Este estilo foi denominado uma codificação de abreviação. Eu posso recomendar a escrita de Celko sobre isso. O Google books contém vários exemplos. Procure por "codificação Celko".
Outros exemplos: codificações de 2 ou 3 letras para países, codificação de 3 letras (GBP, USD, EUR) para códigos de moeda. Curto, auto-explicativo e sem alteração (e existe um ISO para eles).
fonte