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

Diseño de tablas de MySQL

Estas en el tema de Diseño de tablas de MySQL en el foro de Mysql en Foros del Web. Buen Día, Necesito hacer el diseño de una base de datos en la que una tabla contenga la siguiente información: Rangos de Precios, Años y ...
  #1 (permalink)  
Antiguo 12/10/2015, 16:05
 
Fecha de Ingreso: diciembre-2012
Mensajes: 21
Antigüedad: 11 años, 4 meses
Puntos: 1
Diseño de tablas de MySQL

Buen Día,

Necesito hacer el diseño de una base de datos en la que una tabla contenga la siguiente información:
Rangos de Precios, Años y Tasas
Seria algo asi:

Año $100 a $500 $501 a $1000 $1001 a 10000 ...
2015 5.4 4.8 3.2
2014 6.2 5.1 3.6
2013 6.5 5.0 4.1
...


Tanto los rangos como los años y tasas deben ser editables. Lo que pense fue hacer una tabla para años, otra para rangos de precios y otra pivote que contengan las tasas con sus respectivas relaciones (llaves foraneas). Es la forma correcta de diseñarla? o estoy cometiendo algún error?
Tambien me esta costando mucho hacer la interfaz en php.

Gracias de antemano!
  #2 (permalink)  
Antiguo 13/10/2015, 13:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Diseño de tablas de MySQL

Hola sairam2188:

Afortunadamente (o desafortunadamente según se vea) no hay una "mejor" forma de modelar una BD's, esto depende completamente de cada caso y de las necesidades propias que tengas. Sin embargo, si estás modelando tu base de datos como E-R, entonces la recomendación sería que te ajuste a la esencia de este modelo.

¿A qué me refieron con esto?

Bueno, por lo que se puede ver estas hablando de tres datos que te interesa guardar: Los años, los rangos y la tasa... esto implicaría entonces tener tres catálogos, una para cada uno de estos datos.

Dado que tienes una relación muchos a muchos entre tus tablas, lo más simple como dices es tener una tabla relación que contenga el la llave primaria de cada uno de los tres catálogos. es decir, según tu ejemplo tendrías algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM rangos;
  2. +----------+-----------------+-----------------+
  3. | id_rango | limite_inferior | limite_superior |
  4. +----------+-----------------+-----------------+
  5. |        1 |             100 |             500 |
  6. |        2 |             501 |            1000 |
  7. |        3 |            1001 |           10000 |
  8. +----------+-----------------+-----------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM anios;
  12. +---------+------+
  13. | id_anio | anio |
  14. +---------+------+
  15. |       1 | 2013 |
  16. |       2 | 2014 |
  17. |       3 | 2015 |
  18. +---------+------+
  19. 3 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT * FROM tasas;
  22. +---------+------+
  23. | id_tasa | tasa |
  24. +---------+------+
  25. |       1 | 3.20 |
  26. |       2 | 3.60 |
  27. |       3 | 4.10 |
  28. |       4 | 4.80 |
  29. |       5 | 5.00 |
  30. |       6 | 5.10 |
  31. |       7 | 5.40 |
  32. |       8 | 6.20 |
  33. |       9 | 6.50 |
  34. +---------+------+
  35. 9 rows in set (0.00 sec)
  36.  
  37. mysql> SELECT * FROM r_anios_rangos_tasas;
  38. +-------------+---------+----------+---------+
  39. | id_relacion | id_anio | id_rango | id_tasa |
  40. +-------------+---------+----------+---------+
  41. |           1 |       1 |        1 |       1 |
  42. |           2 |       1 |        2 |       3 |
  43. +-------------+---------+----------+---------+
  44. 2 rows in set (0.00 sec)

Este es digamos el modelo más "puro" por llamarlo así, pero esto no implica que sea el mejor... a muchos les parece un desperdicio por ejemplo tener los años como un catálogo, y lo mismo pasa con las tasas... estos en realidad pueden ser valores de un campo, en específico. entonces podrías tener sólo una tabla con tus rangos y manejar sólo dos tablas, algo así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM rangos;
  2. +----------+-----------------+-----------------+
  3. | id_rango | limite_inferior | limite_superior |
  4. +----------+-----------------+-----------------+
  5. |        1 |             100 |             500 |
  6. |        2 |             501 |            1000 |
  7. |        3 |            1001 |           10000 |
  8. +----------+-----------------+-----------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM r_anios_rangos_tasas;
  12. +-------------+------+----------+------+
  13. | id_relacion | anio | id_rango | tasa |
  14. +-------------+------+----------+------+
  15. |           1 | 2015 |        1 | 3.10 |
  16. |           2 | 2014 |        2 | 4.10 |
  17. +-------------+------+----------+------+
  18. 2 rows in set (0.00 sec)

¿Qué desventajas tiene este modelo? pues que en realidad nada te impide que metas un año o una tasa que en realidad no exista, en otras palabras, la integridad tendrías que revisarla "a mano".

Insisto, no hay una "mejor" forma de hacer las cosas.

Saludos
Leo.

Etiquetas: Ninguno
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:09.