Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

¿un elemento UNIQUE en 4 tablas a la vez?

Estas en el tema de ¿un elemento UNIQUE en 4 tablas a la vez? en el foro de Mysql en Foros del Web. Hola buenas, resulta que tengo una base de datos con 4 tablas que almacenan productos, de tipo: categoria1{ ID (PRIMARY) CODIGO NOMBRE ... } categoria2{ ...
  #1 (permalink)  
Antiguo 18/03/2007, 18:28
 
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
  #2 (permalink)  
Antiguo 18/03/2007, 23:10
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: ¿un elemento UNIQUE en 4 tablas a la vez?

Hola

bueno, pues creo entender que tienes varias categorias para los diferentes productos, yo sugeriria que hagas una tabla categoria que tenga un codigo unico, y luego hagas una tabla subcategoria que tenga el codigo de la categoria a la que pertenece y el codigo de la subcategoria, y asi se diferenciara normalmente y en la tabla del producto solo iria el id de la subcategoria, y para saber la categoria pues se haria una consulta a las 3 tablas, espero os sirva, suerte.
  #3 (permalink)  
Antiguo 19/03/2007, 02:03
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Re: ¿un elemento UNIQUE en 4 tablas a la vez?

No entiendo muy bien lo que dices... Necesito un campo CODIGO unico para cada producto (como si fuese un código de barras) y hay 4 categorias diferentes. Y si un producto es de una categoria, tiene unas determinadas caracteristicas diferentes a otro de otra categoria, cada categoría por tanto tiene campos diferentes... ¿Puedes hacer un esquemita como hice yo arriba?

Yo creo, pensandolo un poco, que mejor que esto no lo puedo hacer:

Productos{
ID (PRIMARY AUTOINCREMENT)
CODIGO (UNIQUE)
CATEGORIAID (1,2,3, 4)
}

categoria1{
PRODUCTOID (PRIMARY)
caracteristicas categoria1
...
}

categoria2{
PRODUCTOID (PRIMARY)
caracteristicas categoria2
...
}

categoria3{
PRODUCTOID (PRIMARY)
caracteristicas categoria3
...
}

Y tendría que usar en todos los scripts 4 ifs del tipo:
If CATEGORIAID==1 -> buscar detalle de producto en tabla categoria1
If CATEGORIAID==2 -> buscar detalle de producto en tabla categoria2
If CATEGORIAID==3 -> buscar detalle de producto en tabla categoria3
If CATEGORIAID==4 -> buscar detalle deproducto en tabla categoria4

Es lo mejor que se me ocurre, no veo mejor forma...
¿Cómo lo véis?

Graciass

Última edición por apañero; 19/03/2007 a las 06:07
  #4 (permalink)  
Antiguo 20/03/2007, 08:12
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: ¿un elemento UNIQUE en 4 tablas a la vez?

Hola

Bueno, pues como yo lo haria es primero hacer la tabla Categoria en
la cual se almacenarian las 4 categorias que dices, y luego ese id
de cada categoria se le asigna a un producto, pongo el campo
caracteristicas en ambas partes puesto que tanto la categoria como
el producto pueden tener caracteristicas propias

Categoria
(CATEGORIAID(PRIMARY), NOMBRE,CARACTERISTICAS)

Producto
(ID PRIMARY AUTOINCREMENT, CODIGO(UNIQUE),CATEGORIAID(ID DE LA TABLA CATEGORIA),NOMBRE,CARACTERISTICAS,PRECIO)


Ahora, si tal vez la idea es manejar algo como ventas para clientes,
el precio iria en la tabla productos, y como muchos clientes pueden pedir
muchos productos, entonces se haria una tabla detalleproducto por ej, en la que iria el id del cliente, el iddel producto, y la cantidad de cada producto que escoja, espero que sea eso lo que necesites

Suerte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:05.