Tengo un problema y me gustaría saber posibles soluciones.
Tengo que rediseñar un sistema de mailing, el mailing puede ser creado a partir de diferentes objectos (mailing por producto, por tiendas, por proveedor...)
Tengo varias opciones y no se realmente cual puede ser la mejor
1- Crear una tabla con el mailing para cada objeto (mailing_product, mailing_shop, mailing_provider): Este es el método mas seguro pero realmente estoy creando tablas con el mismo contenido... al menos puedo usar los foreign keys...
2- Crear una columna para cada objecto en la tabla con lo cual solo rellenaria la columna necesaria: Este es el que me ahorra mas trabajo pero el problema puede residir cuando haya muchos objectos que se vinculan al mailing, puedo usar los foreign keys
3-Crear un código especial para cada objeto y 2 columnas, en 1 columna el código para el tipo de objeto y en la segunda columna el id del objeto: Me ahorra espacio en todos los sentidos pero me cargo la posibilidad de los foreign keys, aunque si podria crear alguna función para que ejerciera de foregin key...
Aquí podeis ver en una imagen a lo que me refiero
En el concepto 1 creo una columna en la tabla para cada objecto que podría ser referenciado por la tabla mailing
En el Concepto 2 creo un campo object donde digo que objecto y luego un campo idobject donde digo el id de ese objecto
En el Concepto 3 creo una tabla de relación para cada relación de objecto.
Vosotros, cual opinais es el mejor concepto?
Os dejo este link con una imagen explicandolo un poco mejor Concepto Diseño Base de datos
¿Por qué no explicas mejor el negocio? Es decir, explicas el problema y ya la gente te dará su propio diseño. Al intentar explicar tu que harías, la verdad es que no queda muy claro.
El negocio es una empresa e-learning para farmaceuticas en el extranjero, actualmente ellos ya tienen una plataforma funcionando, plataforma que quiere ser migrada a Symfony 2 y de paso, rediseñar la base de datos.
El "problema" que me encuentro es que muchas veces hay objetos que tienes relaciones (claves foraneas) con muchos otros objetos, en el ejemplo que os he comentado, uno de los problemas es al crear un mailing (mail automatico para todos los clientes).
El ejemplo del mailing lo encontramos en muchos sitios, y la explicación es:
Cuando queremos crear un mailing, podemos hacerlo partiendo de varios objetos (mailing para todos los usuarios de un modulo, de una oferta, de un grupo, de un pais, con una categoria especifica....) entonces, al crear el mailing debo definir a partir de que objeto creo dicho mailing.
Actualmente lo que tienen es un codigo, por ejemplo:
mailing a usuarios de un modulo: 1861
mailing a usuarios de una oferta: 1891
mailing a usuarios de una categoria:1621
y así consecutivamente
Luego, otro campo, es el id del objeto en question.
De esta manera, sabiendo el id del objeto y el tipo del objeto (código) se crea el mailing.
El problema de hacerlo de esta manera, es que no puedo asignar una clave foranea para poder eliminar mailings que hacen referencia a objetos... lo bueno es que los tengo todos en una tabla...
Este ejemplo nos pasa con muchisimas relaciones entre objetos, donde un objeto es relacionado con varios objetos y usan este "código" para dichas relaciones usando solo una tabla.
Entonces mi pregunta es ¿como lo haceis vosotros? ¿Una sola tabla con muchos objetos diferenciados por el tipo de objeto?¿Una tabla para cada relación?¿Una tabla intermedia que hace de puente?
Dicho así la verdad que no se ni que quieres ni por donde empezar.. Vamos que tu descripción es tan abstracta que no creo que nadie te pueda decir nada concluyente..
Cuando Miguel te ha dicho que explicaras el problema, imagino que se referiría a que describas los elementos que quieres almacenar en la base de datos y sus relaciones. Por ejemplo:
Desarrollar una base de datos para un centro de enseñanza que contenga información sobre alumnos (dni, nombre, apellidos, etc), asigaturas en las que están matriculados (nombre asignatura) y cada nota que tengan en dichas asignaturas.. Y ya pensaríamos como organizar las tablas y sus relaciones.
Imagino que los tiros van por que tienes información que o bien pones en tablas distintas sin duplicación o metes todas en una misma tabla con información no introducida. Típico ejemplo de una base de datos de vehículos donde hay coches, motos y camiones.. Los metes todos en una tabla vehículos? o haces una tabla con cada uno? La respuesta es, depende de la información que quieras guardar de cada tipo de vehículo...
Tengo que rediseñar un sistema de mailing, el mailing puede ser creado a partir de diferentes objectos (mailing por producto, por tiendas, por proveedor...)
Tengo varias opciones y no se realmente cual puede ser la mejor
1- Crear una tabla con el mailing para cada objeto (mailing_product, mailing_shop, mailing_provider): Este es el método mas seguro pero realmente estoy creando tablas con el mismo contenido... al menos puedo usar los foreign keys...
2- Crear una columna para cada objecto en la tabla con lo cual solo rellenaria la columna necesaria: Este es el que me ahorra mas trabajo pero el problema puede residir cuando haya muchos objectos que se vinculan al mailing, puedo usar los foreign keys
3-Crear un código especial para cada objeto y 2 columnas, en 1 columna el código para el tipo de objeto y en la segunda columna el id del objeto: Me ahorra espacio en todos los sentidos pero me cargo la posibilidad de los foreign keys, aunque si podria crear alguna función para que ejerciera de foregin key...
Aquí podeis ver en una imagen a lo que me refiero
En el concepto 1 creo una columna en la tabla para cada objecto que podría ser referenciado por la tabla mailing
En el Concepto 2 creo un campo object donde digo que objecto y luego un campo idobject donde digo el id de ese objecto
En el Concepto 3 creo una tabla de relación para cada relación de objecto.
Vosotros, cual opinais es el mejor concepto?
Os dejo este link con una imagen explicandolo un poco mejor
Concepto Diseño Base de datos
07/08/2015 16:30
12/08/2015 07:05
El negocio es una empresa e-learning para farmaceuticas en el extranjero, actualmente ellos ya tienen una plataforma funcionando, plataforma que quiere ser migrada a Symfony 2 y de paso, rediseñar la base de datos.
El "problema" que me encuentro es que muchas veces hay objetos que tienes relaciones (claves foraneas) con muchos otros objetos, en el ejemplo que os he comentado, uno de los problemas es al crear un mailing (mail automatico para todos los clientes).
El ejemplo del mailing lo encontramos en muchos sitios, y la explicación es:
Cuando queremos crear un mailing, podemos hacerlo partiendo de varios objetos (mailing para todos los usuarios de un modulo, de una oferta, de un grupo, de un pais, con una categoria especifica....) entonces, al crear el mailing debo definir a partir de que objeto creo dicho mailing.
Actualmente lo que tienen es un codigo, por ejemplo:
mailing a usuarios de un modulo: 1861
mailing a usuarios de una oferta: 1891
mailing a usuarios de una categoria:1621
y así consecutivamente
Luego, otro campo, es el id del objeto en question.
De esta manera, sabiendo el id del objeto y el tipo del objeto (código) se crea el mailing.
El problema de hacerlo de esta manera, es que no puedo asignar una clave foranea para poder eliminar mailings que hacen referencia a objetos... lo bueno es que los tengo todos en una tabla...
Este ejemplo nos pasa con muchisimas relaciones entre objetos, donde un objeto es relacionado con varios objetos y usan este "código" para dichas relaciones usando solo una tabla.
Entonces mi pregunta es ¿como lo haceis vosotros? ¿Una sola tabla con muchos objetos diferenciados por el tipo de objeto?¿Una tabla para cada relación?¿Una tabla intermedia que hace de puente?
Espero ahora este un poco mas claro ^_^
31/08/2015 19:07
Cuando Miguel te ha dicho que explicaras el problema, imagino que se referiría a que describas los elementos que quieres almacenar en la base de datos y sus relaciones. Por ejemplo:
Desarrollar una base de datos para un centro de enseñanza que contenga información sobre alumnos (dni, nombre, apellidos, etc), asigaturas en las que están matriculados (nombre asignatura) y cada nota que tengan en dichas asignaturas.. Y ya pensaríamos como organizar las tablas y sus relaciones.
Imagino que los tiros van por que tienes información que o bien pones en tablas distintas sin duplicación o metes todas en una misma tabla con información no introducida. Típico ejemplo de una base de datos de vehículos donde hay coches, motos y camiones.. Los metes todos en una tabla vehículos? o haces una tabla con cada uno? La respuesta es, depende de la información que quieras guardar de cada tipo de vehículo...