Foros del Web » Programando para Internet » PHP »

Crear columnas en la base de datos

Estas en el tema de Crear columnas en la base de datos en el foro de PHP en Foros del Web. Buenos noches, No se como enfocar el siguiente problema...Me gustaría guardar en una base de datos los precios de los productos que variaran cada año. ...
  #1 (permalink)  
Antiguo 05/12/2009, 17:26
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años, 7 meses
Puntos: 0
Crear columnas en la base de datos

Buenos noches,

No se como enfocar el siguiente problema...Me gustaría guardar en una base de datos los precios de los productos que variaran cada año.
Mi idea simple:

Id_producto | Nom_procuto | Precio_producto_ 2008 | Precio_producto_ 2009 |.....

Si lo hago así cada vez que modifique los precios tendre que crear una columna nueva.

Hay alguna forma de crear esa columna en PHP.
Alguien tiene una idea más elegante?

Gracias
  #2 (permalink)  
Antiguo 05/12/2009, 17:33
serser
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear columnas en la base de datos

Lo mejor es que crees la tabla así:

Id_producto | Nom_procuto | Precio_producto | Año

De esta manera no tienes que crear ninguna columna cada vez que insertes un dato nuevo.
  #3 (permalink)  
Antiguo 05/12/2009, 19:26
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 8 meses
Puntos: 25
Respuesta: Crear columnas en la base de datos

no entendí muy bien, osea lo que puedes hacer es actualizar la fila creada (fila 1) y ya con eso ;)
__________________
Hospedaje Web al mejor costo!
  #4 (permalink)  
Antiguo 06/12/2009, 02:35
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años, 7 meses
Puntos: 0
Respuesta: Crear columnas en la base de datos

Gracias serser, pero los productos seran siempre los mismos. No veo como puedo usar lo que me dices

Cita:
Iniciado por urgido Ver Mensaje
no entendí muy bien, osea lo que puedes hacer es actualizar la fila creada (fila 1) y ya con eso ;)
A que te refieres con actualizar la fila creada (fila 1)

Lo que me interesa es tener los precios de cada año para poder comaparar.

Última edición por da2; 06/12/2009 a las 02:46
  #5 (permalink)  
Antiguo 06/12/2009, 07:20
serser
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear columnas en la base de datos

Un ejemplo (la clave primaria es (Id_producto, Año)):

Código:
Id_producto | Nom_producto | Precio_producto | Año
1234        | Zapatillas   | 30.50           | 2008
1234        | Zapatillas   | 35.00           | 2009
2345        | Pantalones   | 23.99           | 2008
2345        | Pantalones   | 26.50           | 2009
  #6 (permalink)  
Antiguo 06/12/2009, 07:35
Avatar de da2
da2
 
Fecha de Ingreso: abril-2003
Ubicación: Catalunya
Mensajes: 239
Antigüedad: 21 años, 7 meses
Puntos: 0
Respuesta: Crear columnas en la base de datos

Si pero eso implica crear cada vez que se modifiquen los precios una entrada nueva del producto i estoy usando auto_increment para el ID
  #7 (permalink)  
Antiguo 06/12/2009, 14:25
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 8 meses
Puntos: 25
Respuesta: Crear columnas en la base de datos

pues es de lógica suponiendo que tienes tu tabla llamada PRECIOS con los campos id, producto, precio

simple creas una fila y cada año la actualizas con update y no tiene q hacer insert ni nada, trabajas sobre esa misma fila siempre
__________________
Hospedaje Web al mejor costo!
  #8 (permalink)  
Antiguo 06/12/2009, 15:40
Avatar de jcMouse  
Fecha de Ingreso: noviembre-2009
Ubicación: Bolivia
Mensajes: 116
Antigüedad: 15 años
Puntos: 9
Respuesta: Crear columnas en la base de datos

Antes que nada debes hacerte la pregunta

¿los datos "precio-año" los necesitaras en el tiempo? ¿talves en algun informe u otra tarea?

Si la respuesta es no y los datos no son necesarios, no necesitas nada mas que una simple tabla

Código PHP:
TablaProducto
id_producto 
Nom_productoAnio precio
PRO
-001         pepas       2009    5.0
PRO
-002         pipas       2009    3.6 
Cada ves que necesites cambiar de precios, actualiza el producto en cuestion

Si la respuesta es si, y los datos son necesarios, necesitas utilizar dos tablas

Código PHP:
Tabla productos
id_producto 
Nom_producto |
PRO-001       papas
PRO
-002       pepas
PRO
-003       pipas


Tabla precios
id_precio 
id_producto Anio precio
1            PRO
-001      2008    5.0
2            PRO
-001      2009    6.0
3            PRO
-002      2008    2.5
4            PRO
-002      2009    1.7 
explicacion: al utilizar dos tablas relacionadas por id_producto, evitas la redundancia, osea repetir los mismos datos mas de una ves, de este modo no necesitaras mas que agregar solamente una ves un producto, y cada ves que necesites actualizar el precio, puedes hacer uso de la tabla "precios"

  #9 (permalink)  
Antiguo 06/12/2009, 18:28
serser
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Crear columnas en la base de datos

La opción de añadir una nueva columna por cada nuevo año la descartaría por completo ya que no añade funcionalidad a la BD, incluso tendrías que modificar el código de la aplicación, cosa aún peor. Una aplicación que se base en BDs y funcione bien de debe dejar tal cual y solo modificarla en casos excepcionales (por ejemplo para añadir funcionalidad).
Cita:
Iniciado por da2 Ver Mensaje
Si pero eso implica crear cada vez que se modifiquen los precios una entrada nueva del producto
De eso se trata. No se están modificando precios, se están añadiendo precios para un nuevo año. Modificar, en el lenguaje MsSQL, significa actualizar un registro (o tabla, etc.). Por ejemplo, y partiendo del lenguaje humano, modificar un precio para un nuevo año, con la estructura a la que nos referimos, no es modicar el precio del año 2008, sino añadir uno nuevo para el 2009 (ya puede ser otro, o el mismo).
Cita:
Iniciado por da2 Ver Mensaje
estoy usando auto_increment para el ID
Esto no es un inconvieniente para el ejemplo que te he dado, ya que la clave primaria es el par (Id_producto, Año), lo que significa que cada valor individual se puede repetir todas las veces que se quieran, pero no los dos a la vez (no puede haber ningún par de valores iguales). Aunque al releer el tema, me he dado cuenta que el ejemplo que yo te he dado tiene un inconveniente que lo explico después.

Partiendo de los ejemplos que ha dado jcMouse, el primero sólo es válido si los datos "precio-año" no los necesitaras en el tiempo, tal como ha dicho él/ella. Inlcuso la columna Anio se puede suprimir ya que no aporta nada.

La mejor opción es como recomienda jcMouse, con dos tablas, ya que el inconveniente que tiene mi ejemplo es que, aunque en apariencia cumple con la integridad referencial, ésta se viene abajo al querer modificar Nom_producto, ya que se tendrían que modificar tantos registros como años hubiese. Con estas dos tablas incluso también se puede eliminar Id_precio de la tabla precios si pones como clave primaria el par (Id_producto, Anio).

En definitiva, si no necesitas los datos "precio-año" en el tiempo: 1 tabla; si los necesitas: 2 tablas.

Espero que se hayan aclarado tus dudas.

Última edición por serser; 06/12/2009 a las 18:44
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 22:06.