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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top