none
Tabla categoria y producto

    Question

  • Que tal foro, tengo una duda que me esta matando dede hace ya horas =( . El tema es que tengo una Tabla Categoria y una tabla Producto:

    Producto : IdProducto,Nombre,IdCategoria

    Categoria: IdCategoria,Nombre,Descripcion, IdCategoriaPadre.

    PDT: No son todas las columnas, puse solo las necesarias.

    Como pueden apreciar es una relacion de 1 a muchos(una categoria puede tener muchso productos).Tambien se puede ver que Categoria se une a si misma. Pero el problema me va con los TAMAÑOS. Segun mi profesor xD, Tamaño es tambien una categoria pero por ejemplo:

    Tengo un producto qe se llama gaseosaX y esta en la categoria Gaseosas, y tiene un tamaño regular.

    Supuestamente(o al menos asi pienso io), ese registro(gaseosaX) tiene que unirse con la "categoria hijo" mas bajo(hoja) -espero me entiendan-. Vale recalcar que la categoria Gaseosas tiene como hijos a GRANDE , MEDIANO y PEQUEÑO(tamaños) y  que tambien hay una categoria Panes, el cual tiene como hijos a las categorias GRANDE y JUMBO(ambos tamaños, asi se llaman xD).

    El problema es que si uno el producto gaseosaX con la categoria GRANDE, cómo saber si es que su padre, es Panes o Gaseosas. Esto se da a la hora de realizar una venta(en la tabla VENTA), ya que si lo hago de esa manera, en la venta(el cual consiste de muchos productos, relacionado en la bd con una tabla intermediaria  DETALLEVENTA) tendria que especificar todo su arbol de categorias es decir, si el padre de GRANDE es GASEOSA y asi como tambien especificar el padre de GASEOSA =((si lo ubiera).

    Tengo dos soluciones, quisiera saber cual elegir.

    1.Crear una tabla DetalleCategoria, para poder unir la tabla CATEGORIA y PRDUCTO en una relacion de muchos a muchos.

    2.Crear una tabla TAMAÑO, y unirla a categoria.

    -Tambien habia pensado no crear ninguna tabla adicional, y poner a los tamaños como categorias PADRES(o sea que no tengan a ningun padre xD), pero como pudieron leer en el ejemplo los tamaños pueden variar para los productos, ya que para panes tenia a GRANDE y JUMBO y para Gaseosas a GRANDE,REGULAR y PEQUEÑO

    En caso de que me puedan plantear otra solucion les agradeceria mucho =)

    Gracias de antemano=)

     


    • Edited by Lzkno Sunday, November 27, 2011 7:36 PM
    Sunday, November 27, 2011 7:20 PM

Answers

  • Lo que tienes es una jerarquia padre hijo, y lo que necesitas de alguna forma es clasificar y agrupar según la categoría del padre ¿te entendí bien?

    Esas propiedades de alguna forma las desnormalizas escribiendolas en la tabla de ventas (entiendo que para que si cambia cualquier cosa tu detalle no quede desactualizado.

    Si tu clasificación depende del nivel inmediatamente superior. es relativamente sencillo.

    select xxxx

    from productos p inner join categorias c left join categorias cp on c.idpadre=c.idcategoria

    on p.idcategoria=c.categoria

    en este caso cp.nombre sería gaseosas o panes.

    Sin embargo si no es esto lo que buscas sino que necesitas encontrar el padre en un nivel determinado (por ejemplo saber si es comida o bebida) lo suyo sería utilizar una función recursiva.

    Comentanos si es este tu caso, y si es así, por favor posteanos un script para la creación de los objetos, así con gusto te escribimos el query.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA
    Sunday, November 27, 2011 8:17 PM
    Moderator

All replies

  • Lo que tienes es una jerarquia padre hijo, y lo que necesitas de alguna forma es clasificar y agrupar según la categoría del padre ¿te entendí bien?

    Esas propiedades de alguna forma las desnormalizas escribiendolas en la tabla de ventas (entiendo que para que si cambia cualquier cosa tu detalle no quede desactualizado.

    Si tu clasificación depende del nivel inmediatamente superior. es relativamente sencillo.

    select xxxx

    from productos p inner join categorias c left join categorias cp on c.idpadre=c.idcategoria

    on p.idcategoria=c.categoria

    en este caso cp.nombre sería gaseosas o panes.

    Sin embargo si no es esto lo que buscas sino que necesitas encontrar el padre en un nivel determinado (por ejemplo saber si es comida o bebida) lo suyo sería utilizar una función recursiva.

    Comentanos si es este tu caso, y si es así, por favor posteanos un script para la creación de los objetos, así con gusto te escribimos el query.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA
    Sunday, November 27, 2011 8:17 PM
    Moderator
  • Hola. Complemento lo que expone Miguel sugiriendo, según lo que planteas, de crear una tabla adicional llamada TAMAÑO para lograr lo que deseas. Ahora bien, este TAMAÑO está relacionado con PRODUCTO, con lo cual debes especificar un ID de PRODUCTO por cada producto con tamaño diferente; es decir, Gaseosa X Pequeña tiene un ID y Gaseosa X Mediana tiene otro ID, así como Gaseosa X Grande tiene otro ID.

    Saludos,

     

     


    Guillermo Taylor F.

    IT Pro & Xbox gamer

    My blog

    Sunday, November 27, 2011 11:14 PM
  • El objectivo de una buena programacion es romper todas las dependencia posible, por tanto te recomiendo crear las tabla que sean necesaria, verificate este ejemplo

     


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    My Blog
    Monday, November 28, 2011 12:15 AM
  • pero de esa forma el ususario determina a q categoría pertenece el producto solo al momento de realizar la venta, las tablas que sean necesarias si pero esas relaciones mmm como las explicarías?

    Monday, March 11, 2013 9:15 PM