Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/03/2007, 18:28
apañero
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
¿un elemento UNIQUE en 4 tablas a la vez?

Hola buenas, resulta que tengo una base de datos con 4 tablas que almacenan productos, de tipo:

categoria1{
ID (PRIMARY)
CODIGO
NOMBRE
...
}

categoria2{
ID (PRIMARY)
CODIGO
NOMBRE
...
}

categoria3{
ID (PRIMARY)
CODIGO
NOMBRE
...
}

categoria4{
ID (PRIMARY)
CODIGO
NOMBRE
...
}

Y el campo CODIGO de cada tabla, debe ser único, o sea que no puede haber un mismo código en dos sitios, son códigos únicos repartidos en 4 tablas, mientras que las ID indentifican cada campo dentro de cada tabla y sí pueden ser iguales entre tablas.

Causas de este diseño:
-No puedo juntar las 4 tablas en una, puesto que cada una tiene diferentes campos y creo que así quedan bien, separadas.
Problemas:
-El CODIGO identifica al único producto, y para buscar un producto tengo que buscarlo en las 4 tablas.
-Para modificar el campo CODIGO, tengo que mirar en las 4 tablas para verificar que no se está repitiendo, puesto que debe ser un valor único.
-Para referenciar los productos en los scripts de administracion de la BD, uso el campo ID dentro de cada tabla para referenciar a cada producto puesto que tengo un script por categoria, pero para los scripts de usuario, como veo mucho mejor usar un sólo script de visualización, debo usar el CODIGO para referenciar cada producto (buscarlo en 4 tablas).
-Peligro de modificar un CODIGO: Si un día modifico un CODIGO y algún pedido guardado contenia ese CODIGO, se pierde la referencia, debería de cambiar el CODIGO también en el pedido guardado... También debiera comprobar que no hay pedidos activos con ese CODIGO que se va a cambiar...

Si así está bien ¿se podría decir a ese campo CODIGO que sea de un tipo UNIQUE pero enlazado a las 4 tablas? UNIQUE EN 4 TABLAS, algo así. No sé si existe algo de eso al definir las tablas puesto que no domino el lenguaje.

Tal vez debiera restructurar todo, haciendo más tablas, se me ocurre algo como:

Productos{
ID (AUTOINCREMENT)
CODIGO (PRIMARY UNIQUE)
CATEGORIAID
}

CATEGORIAS{
ID (PRIMARY)
NOMBRE (categoria1, categoria2, categoria3, categoria4)
}

categoria1{
CODIGO (PRIMARY)
NOMBRE
PRECIO
...
}

categoria2{
CODIGO (PRIMARY)
NOMBRE
PRECIO
...
}

categoria3{
CODIGO (PRIMARY)
NOMBRE
PRECIO
...
}

categoria4{
CODIGO (PRIMARY)
NOMBRE
PRECIO
...
}

Pero así duplico las consultas, para meter debo meter el producto en 2 tablas, las búsquedas serían parecido de complicadas (mirar categoría de producto e irse a buscar sus datos a dicha categoria...)... no me acaba de convencer del todo.

Otra opción es la opción burra, de meter todo en una tabla, haciendo campos que sólo usan determinados registros, nadie va a usar todos los campos, así que tendrían que ser los propios scripts quienes decidan qué coger de cada producto según su categoría....

No sé! Dejo de pensar y confío en vuestros conocimientos XD

Muchas gracias!!
saludos

Última edición por apañero; 18/03/2007 a las 18:55