Dicionário relações de tabela (MS SQL 2005)
-
21-08-2019 - |
Pergunta
Eu tenho tabela chamada 'Dicionário' com colunas como a seguir:
- ID bigint
- tipo VARCHAR (200)
- ITEM varchar (200)
Table é usado por várias tabelas como simples dicionário / pesquisa.
Por exemplo, ele armazena países, títulos, listas tipo de negócio.
TYPE coluna mantém informações sobre o tipo de dicionário, ITEM é dicionário de valor da cadeia.
Tudo funciona bem, mas Eu tenho problema de configurar relação entre dicionário e foreigin tabelas.
Quando eu estou usando 'Foreign Key relacionamento' Eu não posso fazer isso dependia da coluna 'TYPE".
(Por favor, note mesmo item com o mesmo tipo - por exemplo, 'países' pode ser ligado a várias tabelas, quando o item com outro tipo pode ser ligado a diferentes)
Atualmente estou usando PSU para gerenciar isso, mas eu gostaria de mudar para o mecanismo de relacionamento padrão.
Algum conselho como conseguir isso?
Solução
Parece-me que você poderia considerar um projeto alternativo
Dictionary table
ID (pk)
DICTIONARY_TYPE_ID (fk to dictionaryType)
ITEM
DictionaryType table
ID (pk)
DESCRIPTION
e, em seguida, fazer links para o ID de DictionaryType mesa em lugares onde você atualmente deseja referenciar Tipo campo do seu design original
Outras dicas
A partir do contexto da pergunta, eu estou supondo que você terá que fazer uma de duas coisas:
- Faça sua coluna
Type
a chave primária - ou ter as chaves estrangeiras dependem do campo
ID
aqui.
As chaves estrangeiras precisam para se referir a uma chave primária, e parece que a sua coluna Type
não é um PK.
O que você tem aqui é um design db EAV que é ruim para várias razões sendo um deles o seu problema. não há solução para este, no sentido real. você pode tentar usar sql_variant como um tipo de coluna para o item e tentar a um relacionamento PK-FK sobre isso.
não há outra maneira você poderia tentar fazer isso com o tipo de dados XML e esquemas como eu descrever aqui . no entanto, você vai ter que testar isso para ver se ele se aplica ao seu problema.