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

Datos Mysql

Estas en el tema de Datos Mysql en el foro de Mysql en Foros del Web. Hola a todos, tengo una duda, en mysql será posible hacer que en determinado campo me valide el tipo de información que se le está ...
  #1 (permalink)  
Antiguo 16/09/2010, 11:45
 
Fecha de Ingreso: abril-2010
Ubicación: Bogotá - Cundinamarca - Colombia
Mensajes: 13
Antigüedad: 14 años
Puntos: 0
Datos Mysql

Hola a todos, tengo una duda, en mysql será posible hacer que en determinado campo me valide el tipo de información que se le está insertando?

Me explico:

Tengo un campo llamado: tab_valor1
Entonces que solo se le puedan grabar datos que esten entre 1 y 10

en total son 4 campos de tab_valorN

Luego uno que se llama tab_total, que cambie cuando se le inserte algun dato a tab_valorN, osea, necesito que me sume los valores que tab_valorN, cada vez que es actualizado...

Pero que ese proceso se haga desde Mysql, será posible????
  #2 (permalink)  
Antiguo 16/09/2010, 12:13
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: Datos Mysql

Son dos problemas diferentes:
El primero (valores dentro de un rango) es lo que se denomina CHECK CONTRAINT y no está implementada en MySQL. Existe en SQL Server, en DB2 (creo) y en Oracle, pero no en MySQL.

El segundo problema es ineficiente: Sumar todos los valores de una tabla cada vez que esta se actualiza requiere de un TRIGGER que a su vez realice la actualización. Es innecesario en la mayoría de las ocasiones porque las sumas se realizan igual de rápido en las consultas, que haciendo una actualización de datos en las tablas. Por eso no se suelen guardar en las bases de datos los valores calculables. Es una pérdida de tiempo y de espacio.

Las validaciones se recomienda hacerlas en la aplicación, ya que los lenguajes de programación son mucho más potentes y tienen mejores recursos para realizar esa tarea, mientras que la base es mucho más potente en cuestiones de cálculo de relaciones y operaciones estadísticas.
Cada cosa tiene su sentido. Validar en la base no es una buena idea. Validar contra la base, es lo correcto, pero eso lo hacen las aplicaciones...

Si pudieses ejemplificar mejor qué es lo que estás tratando de hacer te podemos orientar mejor.
__________________
¿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 16/09/2010, 12:16
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Datos Mysql

sería posible mediante un trigger. Pero esto no tiene mucho sentido.
No hay necesidad de almacenar un valor calculado en un campo de la tabla. Simplemente cuando requieras de la suma, simplemente dentro de la consulta muestras el valor.

Se ahorra espacio y también la construcción de objetos innecesarios(triggers) que hagan esta tarea.

EDITO: Te dije en pocas palabras, lo que te dice gnzsoloyo con una explicación impecable.
saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 17/09/2010, 15:44
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Datos Mysql

Para lo primero, es decir que ingrese ciertos datos, se me ocurre agregar ENUM como por ejemplo:

Código MySQL:
Ver original
  1. CREATE TABLE Pais (Ciudad ENUM('Cuenca','Quito','Guayaquil'));

En este caso, 'ciudad' solo admitirá valores que sean 'Cuenca', 'Quito' o 'Guayaquil', si intenta con otros valores devuelve error. Aquí entonces suplanta los valores para tu caso.
Si es que hay alguna forma de hacerlo con rangos o intervalos sería más útil y lógico, pero no lo he visto

Lo segundo tiene razón tanto 'guesos52' como 'gnzsoloyo', es mejor que ese proceso lo realices calculando desde un lenguaje que no sea MySQL, por ejemplo desde C# luego de recuperar los registros que requieras, ya que puedes ocupar más recursos del servidor (MySQL), por lo que será mucho más recomendable que lo hagas desde el cliente.
  #5 (permalink)  
Antiguo 17/09/2010, 16:59
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: Datos Mysql

Cita:
luego de recuperar los registros que requieras
No, pancho2413, no es eso lo que digo. Todo conjunto de datos en los que se realicen operaciones de suma, producto, estadísticas o de cualquier tipo semejante, son perfectamente viables en SQL. Lo que no tiene ningún sentido ni utilidad es guardar los resultados, ya que la operación de generarlos se realiza al mismo tiempo que se hace la consulta, y el almacenarlos no produce ningún tipo de ahorro de recursos destacable.
Lo que decimos, tanto huesos52 como yo es que lo que debe hacer en la aplicación es validar los ingresos realizados por los usuarios. Eso. Nada más. Porque para ello los lenguajes tienen mejores recursos.

Por citar algunos casos:

- Cuando se requiere que un campo en un formulario sea numérico solamente, son como mucho media docena de líneas de código (i no usas un control prediseñado para ello), mientras que hacerlo en la base requiere más tiempo y recursos.

- Hacer que un campo numérico sólo pueda ingresar un rango de A a B, es darle los límites al control de texto donde se ingresan esos datos.

- Limitar que un combo de selección sólo pueda contener sólo un valor entre un conjunto específico de valores solamente requiere al inicio una consulta a la base de una tabla de datos fija, y luego se sigue usando el mismo conjunto en todas las operaciones, sin más consultas.

- Hacer que un dato alfanumérico tenga un formato predeterminado, requiere el uso de un control que use máscara de datos.

- Validar un dato de fecha, solamente requiere de otro tipo de control, y los límites del rango son propiedades del mismo.

Podría seguir así indefinidamente, pero supongo que con eso es suficiente. La idea es que los lenguajes actuales cuentan con muchos recursos y muy eficientes para permitir programar interfases de ingreso de datos que no permitan ingresar datos erróneos. No necesitas la base de datos para eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 18/09/2010, 11:23
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Datos Mysql

Toda la razón 'gnzsoloyo', a eso me trataba de referir, quizá de otra forma.

Carpe diem amigos

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 05:56.