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

¿Como seria la relaciones de las tablas producto, categoria y subcategoria?

Estas en el tema de ¿Como seria la relaciones de las tablas producto, categoria y subcategoria? en el foro de Bases de Datos General en Foros del Web. Hola, quisiera que me ayudaran porfavor Lo que quisiera es saber como puedo hacer la relaciones de estas tablas http://img94.imageshack.us/img94/4472/99516550.png Cartegorias y Subcategorias -Netbook --HP ...
  #1 (permalink)  
Antiguo 25/12/2009, 08:09
 
Fecha de Ingreso: octubre-2008
Mensajes: 155
Antigüedad: 15 años, 6 meses
Puntos: 1
¿Como seria la relaciones de las tablas producto, categoria y subcategoria?

Hola, quisiera que me ayudaran porfavor
Lo que quisiera es saber como puedo hacer la relaciones de estas tablas
http://img94.imageshack.us/img94/4472/99516550.png

Cartegorias y Subcategorias

-Netbook
--HP
--Toshiba
--Acer
--Compaq
-Monitores
--ViewSonic
--Samsung
--LG
--HP

Los siguientes datos que se guardarian en la DB son:

Netbook Toshiba NB100
Netbook Acer Aspire One

Monitor TFT 19 ViewSonic VA1916W
Monitor TFT 19 Samsung Mod. SyncMaster 943nw

¿Cual seria la relacion de las tablas para poder guardar estos datos?
  #2 (permalink)  
Antiguo 25/12/2009, 11:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: ¿Como seria la relaciones de las tablas producto, categoria y subcategoria

a bote pronto:

tabla tipo
idtipo, tipo
1, Netbook
2, Monitor

tabla marca
idmarca, marca
1, HP
2, Toshiba
3, Acer
4, Compac
5, LG
6, View Sonic
7, Samsung

tabla modelo (ej. de Netbook Toshiba NB 100)
idmodelo, modelo, refidtipo, refidmarca, descripcion
1, NB 100, 1, 2, descripcion del modelo

Esto sería lo básico.
  #3 (permalink)  
Antiguo 25/12/2009, 12:14
 
Fecha de Ingreso: octubre-2008
Mensajes: 155
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: ¿Como seria la relaciones de las tablas producto, categoria y subcategoria

Gracias, pero yo quisiera un ejemplo porfavor de producto, categoria y subcategoria.
  #4 (permalink)  
Antiguo 26/12/2009, 08:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: ¿Como seria la relaciones de las tablas producto, categoria y subcategoria

coplo,
lo primero es que nos digas cuáles son las categorías y las subcategorías. Yo he pensado que las categorías son los tipos de producto (Netbook, Monitor), y las subcategorías las marcas, pero pudiera ser que no fuera eso. Lo primero es que aclare con ejemplos qué es cada cosa y qué quieres luego sacar con las consultas. Dependiendo de eso te ofreceremos una u otra propuesta.
  #5 (permalink)  
Antiguo 26/12/2009, 09:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ¿Como seria la relaciones de las tablas producto, categoria y subcategoria

Cita:
Iniciado por Coplo Ver Mensaje
Gracias, pero yo quisiera un ejemplo porfavor de producto, categoria y subcategoria.
Coincido con jurena: No resulta claro a qué tipo de ejemplo te refieres.
En tu caso, en forma abstracta, un producto posee o pertenece a una categoría, y una categoría puede tener subcategorías.
Eso hace que existan tres tablas básicas: Producto, Categoría, Subcategoría.

El problema pasa por:
Producto:
- Tiene una relación 1:N mandatoria (FK NOT NULL) con Categoría. Esto implica que la FK de Categoría está en Producto

Categoría:
- Puede tener una relación 1:1 o 1:N no mandatoria con Subcategoría. Esto significa que en Categoría no puede ir la FK de Subcategoría (ya que es opcional), sino la PK de Categoría en la de Subcategoría.
- Puede tener una relación mandatoria N:N con Subcategoría, caso en el cual debería existir una tabla adicional que relacione ambos conjunto de datos.

¿Cuál es la solución?
La solución sale de las reglas de negocio, que es donde se debe definir de qué se está hablando cuando se habla de Categoría y Subcategoría, teniendo en claro que un ejemplo del tipo
Cita:
Netbook Toshiba NB 100
no significa en ningún momento que NB 100 sea una subcategoría... eso es un modelo de producto (cosa que no has incluido en tu descripción y que en tu caso es fundamental). Una categoría es uno de los diferentes elementos de clasificación de objetos o cosas, y NB 100 no entra en la definición. Para serlo, NB 100 debería aparecer como parte de la descripción de una notebook Acer, Ibm, HP, Sony, Samsung, Vaio o la que fuese, y eso no se da. Además, NB 100 debería significar algo además de la sigla.
Entonces, "Notebook", si es una categoría, como lo es "Monitor", "Impresora", "Router", etc. El precio puede ser una subcategoría, el procesador puede ser una subcategoría, como también el tipo de puerto (USB, RS232, Serial), y así sucesivamente.
Lo que esto significa es: Una categoría es un conjunto de datos repetitivos de una relación (datos que pueden aparecer como constantes en diferentes instancias de productos), y por lo tanto pueden ser separados en una tabla diferente,
En síntesis, para darte una mejor solución, no solamente tienes que darnos una mejor descripción de a qué "ejemplo" te refieres, sino que deberías detallarnos mejor a qué le denominas categoría y subcategoría.

¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 26/12/2009 a las 09:14
  #6 (permalink)  
Antiguo 26/12/2009, 09:56
 
Fecha de Ingreso: octubre-2008
Mensajes: 155
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: ¿Como seria la relaciones de las tablas producto, categoria y subcategoria

Gracias por la ayuda.
Bueno aqui va otro ejemplo:

-Computación
----Monitores
----Impresoras
----Routers
----Scanners
-Video
----Televisores
----Proyectores
----Camara de video
----DVDs

Los siguientes datos que se guardarian en la DB son:

Televisor LG 29SA1RL Precio: $344.48
Televisor Panasonic TC-21GX30 Precio: $275.52

Monitor Benq G920hda Precio: $156.99
Monitor Acer X223w Precio: $159.99
  #7 (permalink)  
Antiguo 26/12/2009, 15:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ¿Como seria la relaciones de las tablas producto, categoria y subcategoria

Suponiendo esos datos, y con estas estructuras:
Código MySQL:
Ver original
  1. CREATE TABLE  `producto` (
  2.   `PRODUCTO_ID` int(10) unsigned NOT NULL auto_increment,
  3.   `CATEGORIA_ID` int(10) unsigned NOT NULL,
  4.   `SUBCAT_ID` int(10) unsigned NOT NULL,
  5.   `PRODUCTO_NOMBRE` varchar(100) NOT NULL,
  6.   `PRECIO_UNITARIO` decimal(8,2) NOT NULL,
  7.   `STOCK` int(11) NOT NULL,
  8.   PRIMARY KEY  USING BTREE (`PRODUCTO_ID`),
  9.   KEY `FK_producto_cat` (`CATEGORIA_ID`),
  10.   KEY `FK_producto_subcat` (`SUBCAT_ID`,`CATEGORIA_ID`),
  11.   CONSTRAINT `FK_producto_subcat` FOREIGN KEY (`SUBCAT_ID`, `CATEGORIA_ID`) REFERENCES `subcategoria` (`SUBCAT_ID`, `CATEGORIA_ID`),
  12.   CONSTRAINT `FK_producto_cat` FOREIGN KEY (`CATEGORIA_ID`) REFERENCES `categoria` (`CATEGORIA_ID`)
  13.  
  14. CREATE TABLE  `categoria` (
  15.   `CATEGORIA_ID` int(10) unsigned NOT NULL auto_increment,
  16.   `CATEGORIA_NOMBRE` varchar(50) NOT NULL,
  17.   `CATEGORIA_DESC` varchar(100) NOT NULL,
  18.   PRIMARY KEY  USING BTREE (`CATEGORIA_ID`)
  19.  
  20. CREATE TABLE  `subcategoria` (
  21.   `SUBCAT_ID` int(10) unsigned NOT NULL,
  22.   `CATEGORIA_ID` int(10) unsigned NOT NULL,
  23.   `SUBCAT_NOMBRE` varchar(100) NOT NULL,
  24.   PRIMARY KEY  (`SUBCAT_ID`,`CATEGORIA_ID`),
  25.   KEY `FK_subcategoria_1` (`CATEGORIA_ID`),
  26.   CONSTRAINT `FK_subcategoria_1` FOREIGN KEY (`CATEGORIA_ID`) REFERENCES `categoria` (`CATEGORIA_ID`)

Categoría contendría:
Código MySQL:
Ver original
  1. SELECT * FROM categoria c;
  2. +--------------+------------------+------------------------------------------------------------+
  3. | CATEGORIA_ID | CATEGORIA_NOMBRE | CATEGORIA_DESC                                             |
  4. +--------------+------------------+------------------------------------------------------------+
  5. |            1 | COMPUTACION      | ARTICULOS E INSUMOS DE COMPUTACION                         |
  6. |            2 | VIDEO            | ARTICULOS E INSUMOS PARA REPRODUCCION Y GRABACION DE VIDEO |
  7. +--------------+------------------+------------------------------------------------------------+

Subcategoria contendría:
Código MySQL:
Ver original
  1. SELECT CATEGORIA_ID, SUBCAT_ID, SUBCAT_NOMBRE
  2. FROM subcategoria
  3. ORDER BY CATEGORIA_ID;
  4. +--------------+-----------+-----------------+
  5. | CATEGORIA_ID | SUBCAT_ID | SUBCAT_NOMBRE   |
  6. +--------------+-----------+-----------------+
  7. |            1 |         1 | MONITOR         |
  8. |            1 |         2 | IMPRESORA       |
  9. |            1 |         3 | ROUTER          |
  10. |            1 |         4 | SCANER          |
  11. |            2 |         1 | TELEVISOR       |
  12. |            2 |         2 | PROYECTOR       |
  13. |            2 |         3 | CAMARA DE VIDEO |
  14. |            2 |         4 | DVD             |
  15. +--------------+-----------+-----------------+

Producto, finalmente, tendría:
Código MySQL:
Ver original
  1. SELECT * FROM producto p;
  2. +-------------+--------------+-----------+---------------------+-----------------+-------+
  3. | PRODUCTO_ID | CATEGORIA_ID | SUBCAT_ID | PRODUCTO_NOMBRE     | PRECIO_UNITARIO | STOCK |
  4. +-------------+--------------+-----------+---------------------+-----------------+-------+
  5. |           1 |            1 |         1 | LG 29SA1RL          |          344.48 |     1 |
  6. |           2 |            1 |         1 | PANASONIC TC-21GX30 |          275.52 |     1 |
  7. |           3 |            2 |         1 | BENQ G920HDA        |          156.52 |     1 |
  8. |           4 |            2 |         1 | ACER X223W          |          159.99 |     1 |
  9. +-------------+--------------+-----------+---------------------+-----------------+-------+

Obviamente, se comprende que para obtener una consulta que te devuelva el listado con indicacion de qué es cada cosa, debe hacerse cruzando las tres tablas, o al menos dos de ellas:

Código MySQL:
Ver original
  1.   PRODUCTO_ID,
  2.   CATEGORIA_NOMBRE,
  3.   SUBCAT_NOMBRE,
  4.   PRODUCTO_NOMBRE,
  5.   PRECIO_UNITARIO,
  6.   STOCK
  7. FROM producto p
  8.   INNER JOIN subcategoria s USING(categoria_id, subcat_id)
  9.   INNER JOIN CATEGORIA USING(categoria_id);
  10.  
  11. +-------------+------------------+---------------+---------------------+-----------------+-------+
  12. | PRODUCTO_ID | CATEGORIA_NOMBRE | SUBCAT_NOMBRE | PRODUCTO_NOMBRE     | PRECIO_UNITARIO | STOCK |
  13. +-------------+------------------+---------------+---------------------+-----------------+-------+
  14. |           1 | COMPUTACION      | MONITOR       | LG 29SA1RL          |          344.48 |     1 |
  15. |           2 | COMPUTACION      | MONITOR       | PANASONIC TC-21GX30 |          275.52 |     1 |
  16. |           3 | VIDEO            | TELEVISOR     | BENQ G920HDA        |          156.52 |     1 |
  17. |           4 | VIDEO            | TELEVISOR     | ACER X223W          |          159.99 |     1 |
  18. +-------------+------------------+---------------+---------------------+-----------------+-------+
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 27/12/2009 a las 15:40
  #8 (permalink)  
Antiguo 27/12/2009, 14:36
 
Fecha de Ingreso: octubre-2008
Mensajes: 155
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: ¿Como seria la relaciones de las tablas producto, categoria y subcategoria

Gracias por tu respuesta, me quitastes todas las dudas de encima.
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 09:53.