Pregunta

He tabla llamada 'Diccionario' con las columnas de la siguiente manera:

  • bigint ID
  • tipo VARCHAR (200)
  • PUNTO varchar (200)

La tabla es utilizada por varias tablas como simple diccionario / de búsqueda.
Por ejemplo, que almacena los países, títulos, listas de tipos de negocios.

TIPO Columna de guarda información sobre el tipo de diccionario, la es la cadena de valor diccionario.

Todo funciona bien, pero tengo problemas para establecer relaciones entre diccionario y foreigin tablas.
Cuando estoy usando 'relación de clave externa' no puedo hacerlo dependía de la columna 'Type".

(Tenga en cuenta mismo elemento con el mismo tipo - por ejemplo, 'países' se pueden vincular a varias tablas, cuando el artículo con otro tipo puede estar vinculado a diferentes)

Actualmente estoy usando proveedores del servicio universal para manejar eso, pero me gustaría cambiar a mecanismo de relación estándar.
Cualquier consejos sobre cómo conseguir eso?

¿Fue útil?

Solución

A mi me parece que usted podría considerar un diseño alternativo

Dictionary table
ID (pk)
DICTIONARY_TYPE_ID (fk to dictionaryType) 
ITEM

DictionaryType table
ID (pk)
DESCRIPTION

y luego hacer una parada de ID DictionaryType tabla en los lugares donde se encuentra actualmente desea hacer referencia Tipo de su diseño original

Otros consejos

Desde el contexto de la pregunta, yo supongo que tendrá que hacer una de dos cosas:

  • Haga su Type la columna de la clave primaria
  • o tener las claves externas dependen del campo ID aquí.

Las claves externas necesitan para hacer referencia a una clave principal, y parece que su columna <=> no es una PK.

lo que tenemos aquí es un diseño db EAV que es malo para una serie de razones que son su problema. no hay una solución para esto en el sentido real. puede intentar utilizar sql_variant como un tipo de columna para el artículo y tratar de tener una relación PK-FK en eso.

que hay otra forma se podría tratar de hacer esto con el tipo de datos XML y esquemas como yo describo aquí . Sin embargo, usted tiene que probar esto para ver si se aplica a su problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top