Bases de Datos - Cómo planteo esta base de datos? Voy bien?

 
Vista:
sin imagen de perfil

Cómo planteo esta base de datos? Voy bien?

Publicado por Jorge (2 intervenciones) el 01/08/2015 03:35:55
Hola amigos!

A ver si me podéis ayudar a elegir qué tablas necesito para cierta aplicación, o cómo plantear las relaciones. Os lo explico con un ejemplo.

Imaginad que quiero hacer una aplicación que relacione tiendas, proveedores y productos, que guarda los gustos de los clientes, etc.

Así, planteo las tablas Productos, Tiendas, Proveedores y Clientes. También una tabla con los Tipos, como podrían ser: de limpieza, de alimentación, de bricolaje, de parafarmacia, etc.

Tiendas {id_tienda, nombredelatienda, direccion}
Proveedores {id_proveedor, nombredelproveedor, direccion}
Productos {id_producto, nombredelproducto, descripcion}
Clientes {id_cliente, nombre, telefono}
Tipos {id_tipo, nombredeltipo, descripcion}

Mi duda surge de lo siguiente. Los tipos los veo comunes a todas las tablas anteriores, es decir, hay tiendas de limpieza, hay proveedores de limpieza, hay productos de limpieza y hay clientes que compran productos de limpieza, no? Lo mismo para el resto de "Tipos". Además, hay tiendas y proveedores de alimentación y a la vez de limpieza y de parafarmacia a la vez.

Visto así, se me ocurrió crear una tabla que relacionara de qué tipo es cada item, teniendo en cuenta que una tienda puede ser de varios tipos a la vez, y un proveedor, y un cliente, etc. La tabla que se me ocurre tiene las columnas siguientes:

Dequetipoes {id_dequetipoes, tabla, identificador, id_tipo}
0000000001, Tiendas, 000000003, 000000091
0000000002, Tiendas, 000000004, 000000014
0000000003, Tiendas, 000000005, 000000023
0000000004, Proveedores, 000000001, 000000004
0000000005, Proveedores, 000000002, 000000012
0000000006, Productos, 000000006, 000000019
0000000007, Clientes, 000000008, 000000016
.......

En esa tabla añado de qué tipos es un producto, un proveedor, una tienda, etc, etc, guardando en cada lína de qué tabla se trata (productos, tiendas, proveedores..) y el identificador correspondiente (id_producto, id_tienda, id_proveedor... según corresponda). Me permite asignar varios tipos a un mismo item además.

Lo veis muy raro o incorrecto? Otras opciones que se me ocurren son, crear una tabla para tipos de productos, otra para tipos de tiendas, otras para tipos de proveedores... pero me suena muy repetitivo, no creeis?

Qué alternativa me proponéis? O lo veis correcto?

Mil gracias!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Cómo planteo esta base de datos? Voy bien?

Publicado por Jorge (2 intervenciones) el 01/08/2015 12:50:04
Otro ejemplo similar, que no se si está bien planteado.

Imaginad que tengo estas entidades:

USUARIOS {id_usuario, nombre, email}
ARTICULOS {id_articulo, id_usuario, titulo, contenido}
DIRECCIONES {id_direccion, id_usuario, calle, ciudad, piso, puerta, escalera, codigo postal}
MENSAJES {id_mensaje, id_usuario, mensaje, dirigido_a, fecha}

Si quisiera dar permiso a algunos usuarios para que puedan editar algunos campos de algunas de esas tablas, por ejemplo, que los autores de sus artículos puedan editarlos, o cada usuario editar su dirección, o algún moderador editar ciertos mensajes o ciertos artículos.... podría plantear esta tabla PERMISOS? o se os ocurre otro modo?

PERMISOS {id_permiso, id_usuario, tabla, identificador}

De ese modo, podría poner que el usuario id_usuario = 00000123 puede editar el campo de la tabla MENSAJES que tiene identificador id_mensaje = 0003455, y que puede editar también de la tabla DIRECCIONES el campo con id_direccion = 034123, etc, etc.

Qué tal lo veis? Un abrazo y muchas gracias por molestaros!!!! Buen verano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cómo planteo esta base de datos? Voy bien?

Publicado por pepeluis76 (2 intervenciones) el 11/08/2015 23:32:41
tipo (o permiso, etc.) tienen una relación 1 a muchos con el resto de las tablas tablas. Por ejemplo, puede haber muchos usuarios con el mismo tipo, muchos mensajes del mismo tipo (etc.)

La solución sería hacer lo que se llama propagación de clave 1 a muchos, es decir, poner en la tabla de usuarios (o la que sea) un nuevo atributo llamado idtipo (que es una clave foránea a la tabla tipo).
Igual con el resto de la tablas, nuevo atributo que vaya a la tabla tipo.

Otra cosa es la semántica, tipos en algo muy genérico, yo haría una jerarquía de tipos y uniría directamente los hijos de éste árbol jerárquico con las tablas implicadas (en lugar de con la raíz del árbol jerŕquico)

Espero no haberte liadoooo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar