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

¿Como harias esto para que se lo mas optimo?

Estas en el tema de ¿Como harias esto para que se lo mas optimo? en el foro de Bases de Datos General en Foros del Web. saludos, haber una ayudadita por aqui , tengo este dilema. tengo tres tablas usuario , producto , servicio los cuales necesitan tener una galeria de ...
  #1 (permalink)  
Antiguo 27/12/2009, 19:46
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 4 meses
Puntos: 0
¿Como harias esto para que se lo mas optimo?

saludos, haber una ayudadita por aqui , tengo este dilema.

tengo tres tablas usuario , producto , servicio

los cuales necesitan tener una galeria de imagenes cada tabla, es decir

usuario - GaleriaUsuario - ImagenUsuario
producto - GaleriaProducto - ImagenProducto
servicio - GaleriaServicio - ImagenServicio

como vemos arriba , necesitaria como 9 tablas para dicho requerimiento, lo otro que se me occurre es esto :


usuario,producto ,servicio - Galeria - Imagen

en la propuesta de arriba , solo tengo 5

tendria una galeria que estara enlazada con usuario,producto ,servicio


lo que siempre me he preguntado es ¿que es mas eficiente, tener todo en una tabla con el fin de tener menos tablas en memoria? o tener varias galerias para que la informacion este distribuida y realizar busquedas mas rapidas , ya que la informacion estara partida segun el tipo de galeria que se quiera consultar.


gracias de ante mano :D
  #2 (permalink)  
Antiguo 30/12/2009, 04:37
Avatar de GabrielAngelos  
Fecha de Ingreso: septiembre-2008
Ubicación: Tacna
Mensajes: 36
Antigüedad: 15 años, 7 meses
Puntos: 0
Información Respuesta: ¿Como harias esto para que se lo mas optimo?

Hola altairon espero responder bien tu pregunta, quizás sea algo extenso, espero comprendas pero es bajo una óptica holística, una de las bases de la ingeniería de sistemas. :P

Primero vamos a definir los conceptos de las 3 e's (eficacia, eficiencia y efectividad) en resumen:

Eficacia: Simplemente lograr la meta así consumas todos los recursos que tengas

Eficiencia: Hacer bien las cosas nada más así llegues o no llegues a la meta propuesta.

Efectividad: Sinergia de eficacia y eficiencia, algo así como ser las dos cosas al mismo tiempo (por si acaso es mucho más que ser las dos cosas al mismo tiempo pero por cuestiones prácticas mejor definirlo asi), ahi está es como el cubo horádrico de diablo 2 si es que haz jugado no sé, donde metes una poción de mana y otra de vida y mas una joya sin daños creo y te sale una poción de rejuvenecimiento creo jaja no recuerdo :P.

Trasladando estos conceptos a tu pregunta mas o menos quedaría así (o algo así :P)

Eficacia: Deja cada tabla con su respectiva galeria :P, quizás sea más rápido pero el mantenimiento de cada tabla sería más complicado a futuro.

Eficiencia: Normaliza las tablas lo más que puedes porque asi dice la teoría porque por algo es, si no, un auditor viene y te acusa de mal DBA y aquí en foros del web te vamos a mirar mal jaja (no mentira). Quizás sea más lento, pero es seguro.

Efectividad: Si tu servidor de BD es rapido, normaliza lo mas que puedas para que el servidor de BD pueda tolerar consultas que usualmente en tablas normalizadas son de filtrado lo que agrega mas consumo de servidor, indexa los campos importantes de los que te basas para hacer consultas, y si es lento, entonces bueno separalos y deja a cada tabla con su respectiva galeria, luego cuando proceses los datos procurarías hacerlo en el servidor de lógica de negocio o el que haga las veces de él. Y si está en un servidor, bueno entonces bla bla bla bla.... :P

Como habrás notado, surgen varias tomas de decisiones en función a la información que tienes a la mano, en este caso yo la estoy suponiendo porque no se nada de tu plataforma tecnológica, y quizás existan muchas más variables que estén involucradas y redefinan la decisión que vayas a tomar.

Nota:
Tanto el eficaz como el eficiente siempre se niegan a conocer información de sus lados opuestos (por decirlo asi) en cambio una peculiaridad de la efectividad y que se distingue de las demás es que para lograrla se necesita conocer toda la información involucrada en algo y sinergizarla (horadrizarla por decir) y ser altamente inteligente y ágil, en otras palabras debes saber no sólo de normalización, sino la arquitectura de tu plataforma tecnológica y su capacidad, y hatsa quizás mucho más conocimiento del que tengas que relacionar u horadrizar; a veces normalizar demanda demanda un tiempo que tu cliente no puede esperar y que lograrías satisfacerlo si hicieras una base de datos como sea; para que cuando ya empiece a dar errores la base de datos, la tengas que correjir con quien sabe cuantos registros agregados... entonces que prefieres hacer, el primero o el segundo, o la sinergia de ambos? ya eso con experiencia podrás definir este tercer camino.

Bueno eso es todo, ahora respondiendo tu pregunta de manera reduccionista que es la base de los científicos y como verás no voy a considerar ninguna otra variable que no sea sólo lo de la base de datos, pues respetando las formas normales lo más óptimo es que normalices lo más que puedas sin mucha obligación claro, yo lo haría así:

Tabla Usuario(Aqui va todos los campos asociados al usuario)

Tabla ProductosyServicios (Aqui va lo que tienen en comun productos y servicios como nombre y precio)

Tabla Productos (Aqui va lo que no tiene en comun con servicio como stock, marca)

Tabla Servicios (Aqui va lo que no tiene en comun con producto como disponibilidad, tiempo de duracion de servicio)

Tabla Galeria (Aqui vienen las llaves de usuario y productoyservicio)

Tabla Imagenes (Aqui viene la llave de galeria y las distintas imagenes correspondientes).

Quedaria algo asi ojala no se descuadre

Usuario----------------------------Galeria ---------Imagenes
Producto------ ProductoyServicio ________|
Servicio___________|

Eso es todo :P

Saludos
  #3 (permalink)  
Antiguo 30/12/2009, 08:27
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: ¿Como harias esto para que se lo mas optimo?

Saludos GabrielAngelos, gracias por contestar mi pregunta, crei que se habian olvidaddo XD, bueno , me impreciona tu respuesta , aver abalizando lo que dices, solo intriga tu concepto por Eficiencia , creí que era "llegar a la meta consumiendo la menor cantidad de recursos" , en fin, ahora entiendo que esta pregunta depende de varios factores, aveces cuando veo algunos sistemas, veo que ni siquiera usan nada de normalizacion ya que realmente no se requiere y lo que importa es que tenga la mayor velocidad posible teniendo como costo la escalabilidad. incluso, se puede ver algo filosófico esto XD; por ejemplo:

en la solucion que tu propones , es muy buena , pero si quisiera realizar un listado de todos los productos , se tendría que realizar un inner join para vincular la tabla ProductoyServicio y
Producto, tomaria mas tiempo si lo tubeira todo en una tabla Productos con todos los campos propios de productos, PERO , si quisiera realizar una consulta generica de todos los productos y servicios disponibles, con los detalles basicos , el modelo que planteas seria geneial , ya que solo se realizaria la consulta en la tabla ProductoyServicio , y la verdad es como llegar a la sinergia de ambos XD , pero creo que tiendo mas a tu modelo, me convemce mas lo que dices, aveces a que saber si apostamos por la velocidad o por la escalabilidad , es un nunca acabar. XD
  #4 (permalink)  
Antiguo 30/12/2009, 16:23
Avatar de GabrielAngelos  
Fecha de Ingreso: septiembre-2008
Ubicación: Tacna
Mensajes: 36
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: ¿Como harias esto para que se lo mas optimo?

JAja menos mal que no te aburriste con lo que te puse altairon y hasta se te ve interesado, es chevere cuando la gente entiende los sistemas en general no solo lo informatico sino en cuanto a tecnologia, la sociedad, la psiquis de la sociedad y etc etc etc.

El concepto de si algo es bueno o malo o buenomalo lo define siempre gente que tiene poder, que puede venir de ser poderoso por la experiencia o los años que estuvo trabajando y que se adjudica autoridad para ello, o por un grupo de personas que creen en alguien o algo que tiene poder, en sí mismo tu tienes poder tambien y eres libre de definir que es bueno o malo (lo que se llamaría ética) pero también en parte debes regirte por lo que la sociedad en su conjunto cree que es bueno o malo (lo que se llamaría moral).

Ahora que tu le digas a Edgar F. Cod, padre de la normalización, científico computacional y que trabajó en IBM que vas a relacionar cada tabla con su respectiva galería, jajajajajaa no sé como lo tomaría, resucitaría para morirse de nuevo creo, y así la gente te puede argumentar esto para que siempre tomes la decisión más eficiente y siempre nombrándote a Edgar f. Cod y que si quieres normalizar la tabla de esa manera como propones entonces eres un hereje computacional, hasta incluso te demostrarían que estás mal cuando tengas que dar mantenimiento a 1000 registros por cada tabla en el futuro.

Y es que Edgar F. Cod y sus postulados tenían razón, pero como te dije, fue científicio, los científicos separan, seccionan el conocimiento humano porque creen que es mejor así, y seguramente Edgar F. Cod no le pidieron normalizar los datos en un servidor lento y entregarlo con un software de galeria en 3 días o menos, o sea no mezcló ese conocimiento con el mundo empresarial que se mueve muy pero muy rápido.

De ahí que si mezclas la teoría de normalización, con el mundo real, y lo rapidez en resultados que demandan los clientes, pues nace "nuevo conocimiento", hasta podría ser "nueva teoría", "nuevas reglas", "nuevos estándares" y como siempre aceptado y/o aborrecido por otras personas.

Si me muestras la tabla como la mostraste si fuera defensor de la normalización te diría que pongas las tablas como te las propuse porque es eso ser responsable, le dicen ser "profesional", además nadie criticaría la estructura pues es pura teoria de normalización, y es más, cumple con los requisitos de una buena base de datos, o sea cero redundancia de datos, cero campos null, y otras cosas más con ceros.

Por ejemplo a veces las personas guardan los datos del precio total de una factura de venta, eso es totalmente innecesario ya que el cálculo del precio total se puede obtener calculando desde php o hacer un select donde agregues un nuevo campo que sume los subtotales, pero yo pienso holísticamente que eso no estaría tan mal si tienes un servidor de bse de datos lento pero con harto espacio de disco duro, entonces que de malo tendría guardar más datos si tengo harto espacio de disco duro???, en cambio no guardar el total y hacer que sume los subtotales seria si tengo poco disco duro y harta velocidad de procesador.

Pero si me dices que tienes un servidor lento, o que tienes que presentar el software para 2 días, es cuando nace unan nueva decisión que sería y estoy de acuerdo inicialmente cada tabla con su galeria, pero con la firme promesa de tratar de que ese servidor sea rápido y algún día normalizarlo con tal de presentar resultados en el momento, o sino dejárle la repsonsabilidad del proyecto a otra persona jaja o incluso no aceptar el proyecto en 2 días :P para ahorrarte dolores de cabeza, esa podría ser una decisión efectiva.

Al final de cuentas la decisión efectiva se basa en el contexto o entorno real, y el entorno real tiene muchas variables que definen datos y que a su vez define información, tienes que tratar, practicar dominar todo ello para que mejoren la calidad de tus decisiones, es tan fuerte esto que quizás si sabes que a tu jefe o cliente responde a estímulos fuertes como una voz alzada pero cuidando de no insultarlo u ofenderlo o asustándolo de que si no contrata un buen servidor, se puede ir en picada la empresa, o sea amparandote en conocimientos psicológicos, sociológios o antropológicos, te puedas ganar unos días más para testear tu base de datos o tener tiempo de normalizarlo completamente si es que la plataforma tecnológica lo acepta.

Saludos :D, y ojalá no me haya salido del tema, más que respuesta parece desfogar la frustración creo jajajajajajaja :P
  #5 (permalink)  
Antiguo 30/12/2009, 22:11
 
Fecha de Ingreso: diciembre-2009
Mensajes: 15
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: ¿Como harias esto para que se lo mas optimo?

SALUDOS COMPATRIOTA, SOY de LIMA , me impresiona tu mensaje, que manera de expresar las ideas, muchas de las cuales tienen mucho sentido, otras si que te desvías un poco, pero esto parece ya un poco filosófico, jajajajaja, Edgar F. Cod fue un ser humano, y como humano comete errores, jejejejeje, pero creo que talvez encontre una solucion para este dilema:

en un futuro las maquinas cmabian, los prcesadores tambein, ya tenermosprcesadores de doble nucleo o triple, la memorias estan baratas y las tenemos en ambundacia, creo que al final toda va a tender a tenener una buena escalabilidad , ya que en un futuro muy cercana estos procesos adicionales que conlleva la normalizacion no se aprecuiaran tanto como una vez lo hicieron en el pasado, bueno, esta es una dieda mia , jejejejje , pero GabrielAngelos , debes estudiar FILOSÓFIA, jajajajajaj, gracias por tu tiempo en responder.
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 02:34.