Estructura de tablas en la BD

28/06/2006 - 16:23 por Yoselyn | Informe spam
Hola a todos. Les explico mi situacion.
Estoy desarrollando una pequeña aplicacion tipo ebay.com (pero mucho mas
pequeña claro esta) en donde manejo un catalogo de productos y
categorias/sub-categorias a las cuales estos pertenecen. Para mi existe una
relacion de muchos a muchos entra las tablas de productos y categorias lo
cual da origen a la tabla de detalle que me permite saber en que categorias
se encuentra un producto y que productos tiene cada categoria/sub-categoria.
Las tablas son mas o menos asi:

Productos:
id_prod - nomb_prod

Categorias:
id_cate - nomb_cate - padre

Detalles:
id_prod - id_cate

En la tabla de categorias los registros forman una especie de jerarquia de
arbol, es por esto que tengo el campo "Padre", el cual me permite saber de
quien es hijo cada registro. Hasta aqui todo bien.
El problema se me presenta en la siguiente situacion, supongamos que tengo
los siguientes registros en las tablas:

Producto:
id_prod - nomb_prod
1 - Gorra Azul

Categorias
id_cate - nomb_cate - padre
1 - Ropa - null
2 - Gorras - 1
3 - Deportes - null
4 - Gorras Deportivas - 3

Como ven el campo padre me sirve para saber que Gorras pertenece a Ropa y
que Gorras Deportivas pertenece a Deportes.
Supongamos que un usuario publica el articulo llamado Gorra Azul en la
sub-categoria Gorras que se encuentra en Ropa, entonces la tabla de detalles
quedaria asi:

Detalles:
id_prod - id_cate
1(Gorra Azul) - 2(Gorras)

El problema es que como Gorras y Gorras Deportivas son basicamente lo mismo
,los productos que se ingresen en una deben tambien estar en la otra aun
cuando como ven estas pertenecen a categorias distintas, es decir la tabla de
detalles debe quedar asi:

Detalles:
id_prod - id_cate
1(Gorra Azul) - 2(Gorras)
1(Gorra Azul) - 4 (Gorras Deportivas)

El problema es que no sé como hacer para que estas sub-categorias(Gorras y
Gorras Deportivas) se puedan relacionar para que aun cuando ambas pertenecen
a diferentes categorias yo pueda saber que ambas tienen algo en comun y asi
los productos que se registran en una deban estar registrados tambien en la
otra.

Yo lo he "resuelto" agregando un campo adicional en la tabla de categorias
que me permite saber si dos registros se relacionan entre si, es decir que
son la "misma cosa" o que tendran los mismos productos, les muestro...

Categorias
id_cate - nomb_cate - padre - campoadicional
1 - Ropa - null - A
2 - Gorras - 1 - B
3 - Deportes - null - C
4 - Gorras Deportivas - 3 - B

Como ven ese campo adicional me esta indicando que Gorras y Gorras
Deportivas tienen algo en comun a pesar de que se encuentran en categorias
distintas, por lo que creo que de esta forma logro lo que deseo.
Lo que no sé y eso es lo que me gustaria me ayuden es si es la mejor forma
de tratar esto, desde todo punto de vista, normalizacion en la base de datos,
performance del servidor de base de datos, la relaciones entre las tablas.

Sin mas nada que decir muchas gracias por su tiempo para leer este post y su
ayuda. Bye...

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
28/06/2006 - 19:07 | Informe spam
Yoselyn,

Si partimos de que solo puede existir una raiz en cada sub-arbol, entonces
no veo porque no usar esta forma.

De todas maneras te paso un link sobre un articulo que habla sobre como
representar jerarquias en usando sql. Este metodo de guardar el padre en cada
fila es conocido como "lista adyacente" y no solo que es tedioso recorrer la
jerarquia en t-sql sino que se debe hacer proceduralmente. Existen otras
formas de representar la jerarquia, que aunque son un poco mas dificil de
entender, ofrezen mejor rendimiento.

Trees in SQL: Nested Sets and Materialized Path
http://www.dbazine.com/oracle/or-ar...tropashko4

Aca te paso otro link sobre un libro dedicado a la representacion de arboles
y jerarquias en t-sql.

Joe Celko's Trees and Hierarchies in SQL for Smartie
http://www.amazon.com/gp/product/1558609202/qid51514264/sr=1-2/ref=sr_1_2/104-5672810-8823964?s=books&v=glance&n(3155


AMB

"Yoselyn" wrote:

Alejandro, de acuerdo a la nueva columna quedaria asi:

Categorias
id_cate - nomb_cate - padre - campoadicional
1 - Ropa - null - A
2 - Gorras - 1 - B
3 - Deportes - null - C
4 - Gorras Deportivas - 3 - D
5 - Gorras de Beisbol - 4 - B

Ya que de acuerdo a lo que me planteas cuando se guarde un producto en
Gorras de Beisbol se guardara con el codigo del producto y el codigo de
Gorras de Beisbol, es decir 5, ya que el producto lo guardaría en la
sub-categoria de mas bajo nivel, por eso ves que la Gorras de Beisbol se
relaciona con Gorras y ya no entra en juego Gorras Deportivas ya que esta
tiene otra de mas bajo nivel que ella que es Gorras de Beisbol y que es donde
finalmete se guardara el producto.

No sé si me hice entender y si estoy manejandolo bien, asi lo veo yo, no se
que me dices.
Gracias nuevamente por responder...

De esta manera, Gorras, Gorras Deportivas y Gorras de Beisbol

"Alejandro Mesa" wrote:

> Yoselyn,
>
> No, me refiero al siguiente comentario:
>
> > >El problema es que como Gorras y Gorras Deportivas son basicamente lo mismo
> > >,los productos que se ingresen en una deben tambien estar en la otra aun
> > >cuando como ven estas pertenecen a categorias distintas, es decir la tabla de
> > >detalles debe quedar asi:
>
> Supongamos que tenemos "Gorras de Beisball", que es basicamente igual a
> "Gorras" y "Gorras Deportivas". Como harias para guardar esta relacion, segun
> la nueva columna?
>
> Categorias
> id_cate - nomb_cate - padre - campoadicional_1 - campoadicional_2
> 1 - Ropa - null - A
> 2 - Gorras - 1 - B
> 3 - Deportes - null - C
> 4 - Gorras Deportivas - 3 - B
> 5 - Gorras de Beisball - 4 - C - B
>
>
> AMB
>
>
> "Yoselyn" wrote:
>
> > Hola Alejandro, gracias por responder.
> > Te refieres al hecho de que no sólo pudiera existir una relación entre
> > Gorras y Gorras Deportivas sino que estas pudieran relacionarse a otra más?
> > Por ejemplo si tuviese una categoria llamada Playa y dentro de ella Gorras
> > Playeras que Gorras, Gorras Deportivas y Gorras Playeras se relacionen? Que
> > pasaria? Bueno que tendria que guardar en la tabla de detalle a un
> > determinado producto para cada una de ella, por eso cree la tabla de
> > detalles, porque para mi existe una relacion de muchos a muchos entre
> > productos y categoria ya que un producto puede estar en diferentes categorias
> > y una categoria puede tener varios productos. No sé si a eso te referias,
> > gracias por tu respuesta.
> >
> >
> > "Alejandro Mesa" escribió:
> >
> > > Yoselyn,
> > >
> > > Tienes alguna idea sobre que pasaria si una categoria se relaciona con mas
> > > de una?
> > >
> > >
> > > AMB
> > >
> > > "Yoselyn" wrote:
> > >
> > > > Hola a todos. Les explico mi situacion.
> > > > Estoy desarrollando una pequeña aplicacion tipo ebay.com (pero mucho mas
> > > > pequeña claro esta) en donde manejo un catalogo de productos y
> > > > categorias/sub-categorias a las cuales estos pertenecen. Para mi existe una
> > > > relacion de muchos a muchos entra las tablas de productos y categorias lo
> > > > cual da origen a la tabla de detalle que me permite saber en que categorias
> > > > se encuentra un producto y que productos tiene cada categoria/sub-categoria.
> > > > Las tablas son mas o menos asi:
> > > >
> > > > Productos:
> > > > id_prod - nomb_prod
> > > >
> > > > Categorias:
> > > > id_cate - nomb_cate - padre
> > > >
> > > > Detalles:
> > > > id_prod - id_cate
> > > >
> > > > En la tabla de categorias los registros forman una especie de jerarquia de
> > > > arbol, es por esto que tengo el campo "Padre", el cual me permite saber de
> > > > quien es hijo cada registro. Hasta aqui todo bien.
> > > > El problema se me presenta en la siguiente situacion, supongamos que tengo
> > > > los siguientes registros en las tablas:
> > > >
> > > > Producto:
> > > > id_prod - nomb_prod
> > > > 1 - Gorra Azul
> > > >
> > > > Categorias
> > > > id_cate - nomb_cate - padre
> > > > 1 - Ropa - null
> > > > 2 - Gorras - 1
> > > > 3 - Deportes - null
> > > > 4 - Gorras Deportivas - 3
> > > >
> > > > Como ven el campo padre me sirve para saber que Gorras pertenece a Ropa y
> > > > que Gorras Deportivas pertenece a Deportes.
> > > > Supongamos que un usuario publica el articulo llamado Gorra Azul en la
> > > > sub-categoria Gorras que se encuentra en Ropa, entonces la tabla de detalles
> > > > quedaria asi:
> > > >
> > > > Detalles:
> > > > id_prod - id_cate
> > > > 1(Gorra Azul) - 2(Gorras)
> > > >
> > > > El problema es que como Gorras y Gorras Deportivas son basicamente lo mismo
> > > > ,los productos que se ingresen en una deben tambien estar en la otra aun
> > > > cuando como ven estas pertenecen a categorias distintas, es decir la tabla de
> > > > detalles debe quedar asi:
> > > >
> > > > Detalles:
> > > > id_prod - id_cate
> > > > 1(Gorra Azul) - 2(Gorras)
> > > > 1(Gorra Azul) - 4 (Gorras Deportivas)
> > > >
> > > > El problema es que no sé como hacer para que estas sub-categorias(Gorras y
> > > > Gorras Deportivas) se puedan relacionar para que aun cuando ambas pertenecen
> > > > a diferentes categorias yo pueda saber que ambas tienen algo en comun y asi
> > > > los productos que se registran en una deban estar registrados tambien en la
> > > > otra.
> > > >
> > > > Yo lo he "resuelto" agregando un campo adicional en la tabla de categorias
> > > > que me permite saber si dos registros se relacionan entre si, es decir que
> > > > son la "misma cosa" o que tendran los mismos productos, les muestro...
> > > >
> > > > Categorias
> > > > id_cate - nomb_cate - padre - campoadicional
> > > > 1 - Ropa - null - A
> > > > 2 - Gorras - 1 - B
> > > > 3 - Deportes - null - C
> > > > 4 - Gorras Deportivas - 3 - B
> > > >
> > > > Como ven ese campo adicional me esta indicando que Gorras y Gorras
> > > > Deportivas tienen algo en comun a pesar de que se encuentran en categorias
> > > > distintas, por lo que creo que de esta forma logro lo que deseo.
> > > > Lo que no sé y eso es lo que me gustaria me ayuden es si es la mejor forma
> > > > de tratar esto, desde todo punto de vista, normalizacion en la base de datos,
> > > > performance del servidor de base de datos, la relaciones entre las tablas.
> > > >
> > > > Sin mas nada que decir muchas gracias por su tiempo para leer este post y su
> > > > ayuda. Bye...
> > > >
> > > >
> > > >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida