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

Creación de una base de datos compleja

Estas en el tema de Creación de una base de datos compleja en el foro de Bases de Datos General en Foros del Web. Hola he estado buscando en el foro a ver si encontraba la solución al ser novato o busco mal o no se buscar correctamente. Tengo ...
  #1 (permalink)  
Antiguo 31/07/2011, 03:43
 
Fecha de Ingreso: julio-2011
Mensajes: 25
Antigüedad: 12 años, 9 meses
Puntos: 1
Creación de una base de datos compleja

Hola he estado buscando en el foro a ver si encontraba la solución al ser novato o busco mal o no se buscar correctamente. Tengo una duda que no se como plantearla
Estoy haciendo una pagina web para vender productos. El caso es que en la tabla articulos que me he creado tengo alomejor 3 productos con id y codigo identificativo diferente pero que en si es el mismo articulo pero con diferentes cantidades. Entonces mi pregunta es la siguiente, ¿Qué campo introduzco en mi bd para poder saber si es el mismo articulo pero en diferente cantidad?

Campos que he puesto hasta el momento.

ID -> No puede ser nulo. Int(10)
Nombre-> No puede ser nulo varchar(45)
Id_marca-> No puede ser nulo. Clave foránea de la tabla marcas.
Genero -> No puede ser nulo. Clave foránea de la tabla genero
Precio -> -> No puede ser nulo. Float
Categoría -> No puede ser nulo. Clave foránea de la tabla categoría
Descripción -> No puede ser nulo. Text, Varchar(100)
Id_proveedor -> No puede ser nulo. Int(10)
Imagen -> No puede ser nulo. Varchar(150)
Comprado-> No puede ser nulo
Activo -> No es nulo. Por defecto S o N. Sera para decir si un artículo esta en activo o no.
Stock -> No puede ser nulo. Int(3). Y por defecto 100
  #2 (permalink)  
Antiguo 31/07/2011, 06:53
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: Creación de una base de datos compleja

Puedes tener un error de diseño que te está complicando todo.
Preguntas: ¿Por qué, se almacenan de esa forma, si esos tres registros representan al mismo producto?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 31/07/2011, 07:43
 
Fecha de Ingreso: julio-2011
Mensajes: 25
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Creación de una base de datos compleja

En si es el mismo producto pero tiene un codigo diferente y la unica diferencia de ese producto es la cantidad. Y el precio.
  #4 (permalink)  
Antiguo 31/07/2011, 09:36
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: Creación de una base de datos compleja

Bueno, ESO es un error de diseño.
Un producto en una base de datos sólo debe aparecer una única vez. Si tienes diferentes precios y stock para un mismo producto puede darse por:
- Diferentes costos del producto.
- Diferentes sucursales o distribución geográfica.
- Diferentes medidas del mismo producto.
- Otros.
En cualquier caso, el producto sigue siendo el mismo, pero esos datos se deben almacenar en otras tablas, ya que no representan instancias del producto sino instancias de entidades diferentes relacionadas al producto, y en esas tablas el ID del producto pasa a ser una FK.
Si se trata de diferentes volumenes o unidades de medida del producto, de todos modos se los considera como diferentes productos, porque el volumen, forma de presentación (envase, p.e.), o unidad de medida pasan a ser un atributo discriminador, y diferenciador.
Ese es el caso, por ejemplo, de las diferentes presentaciones de un producto en un supermercado. Ese producto tendrá un ID diferente para cada presentación (si te fijas en un supermercado, los codigos de barra de las diferentes presentaciones son distintos para el mism o producto).

¿Se entiende?

Volviendo a tu pregunta inicial:
Cita:
¿Qué campo introduzco en mi bd para poder saber si es el mismo articulo pero en diferente cantidad?
Eso dependerá de la forma de identificar al producto para accesibilidad del usuario.
Normalmente, lo mejor es usar la PK, o ID propio de la tabla. Ese es el identificador por excelencia, ya que como sólo puede haber una PK por cada producto (o subproducto), el ID es más que suficiente.
Pero si sólo conoces la marca, o el nombre comercial, pero no el ID del subproducto, deberás hacer una búsqueda por similitud, para lo cual necesitarás o parte del nombre o parte de la PK. En ambos casos el usuario deberá poder acceder a un listado de similares, con los cuales pueda elegir el correcto, luego de lo cual ya dispondrás de la PK precisa.

En esencia, el ejemplo más claro es precisamente la caja de un supermercado: Si observas, el operador puede ingresar el dato por lectura del código de barras (PK exacta), o bien ingresarlo manualmente, o de lo contrario pide que se liste por el nombre comercial. Una vez ubicado, simplemente selecciona y da <Intro> a la elegida.

La idea es que logres eso, pero para que la búsqueda se pueda hacer sin problemas es mejor que afines el diseño de tu base para evitar inconsistencias, como la que describes que tiene tu tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 31/07/2011, 10:47
 
Fecha de Ingreso: julio-2011
Mensajes: 25
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Creación de una base de datos compleja

Gracias cada producto si que tiene su codigo identificativo un producto llamado armario pueden ser de 4 tamaños a eso me referia. y lo que no quiero es que salga 4 veces.
  #6 (permalink)  
Antiguo 31/07/2011, 13:38
 
Fecha de Ingreso: julio-2011
Mensajes: 25
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Creación de una base de datos compleja

Una buena solución sería hacer una tabla precios donde meta solo el nombre del producto y el precio ya que cada producto tiene alomejor varios precios o tallas.
Entonces en lo que enseño hago la tabla articulos donde metemos un subconsulta de la otra tabla que ambos tendran el mismo nombre y pongo un select value y dependiendo de la talla o la cantidad me cambie el precio eso es otra opción.
  #7 (permalink)  
Antiguo 31/07/2011, 14:27
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: Creación de una base de datos compleja

Cita:
Iniciado por detectivemarti Ver Mensaje
Gracias cada producto si que tiene su codigo identificativo un producto llamado armario pueden ser de 4 tamaños a eso me referia. y lo que no quiero es que salga 4 veces.
Si tienes un "armario" que tiene 4 tamaños diferentes, lo que tienes son 4 productos de la clase armario con dimensiones diferentes.
En ese caso no es lo mismo listar todos los productos que listar todas las categorías de productos.
Estás mezclando conceptos y tipos de listado.
En un listado detallado de productos, tienen que salir todos, discriminados por tamaños, pero si quieres un listado intermedio con sólo las categorías, eso se lista de otra forma, aún cuando la tabla consultada sea la misma. El detalle es que tienes que definir correctamente los atributos, inlcuyendo el hecho que largo, alto y ancho del producto pueden ser tres campos diferentes, y no estar incluido necesariamente en la descripción del producto.

Puede que te esté faltando profundizar en los conceptos teóricos del modelo Entidad-Relación, y necesitas algo de guía en el diseño de las bases de datos, porque las razones de esta forma de ver las cosas a veces es un poco abstracta.
¿Lo tuyo es más bien programación, no es así?
__________________
¿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; 31/07/2011 a las 15:05
  #8 (permalink)  
Antiguo 31/07/2011, 16:13
 
Fecha de Ingreso: julio-2011
Mensajes: 25
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Creación de una base de datos compleja

Muchas gracías por contestar, la verdad esq muy bueno no soy entonces estoy haciendo una base de datos para un amigo porque quiero ayudarlo a hacer su pagina web y de paso aprendo y tenia este fallo. Pero lo he solucionado de una forma mas o menos sencilla. Hago lo siguiente una tabla productos donde meto las relaciones de otras tablas y pongo los articulos pero sin definirlos.
Entonces hago una tabla STOCK donde pongo el articulo que es las caracteristicas que tiene y su precio con el stock que tengo. Entonces hago que tanto el articulo como la caracteristica sean claves principales. Entonces cuando lo llame con el php hare que si un articulo tiene varias caracteristicas salgan en un listado un select. Ejemplo
Producto Caracteristicas Precio Unidades/Stock
Armario 1 10x10 100€ 10u
Armario 1 20x20 200€ 2u
Armario 2 14x14 150€ 30u
Armario 2 10 x10 50€ 40u

Etiquetas: tabla, bases-de-datos
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 05:03.