Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/12/2012, 18:27
Avatar de gnzsoloyo
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: Restricciones

Sólo se puede configurar los campos para que no acepten NULL, pero el resto de las cosas requeriría la existencia en MySQL de las restricciones de tipo CHECK, que no hay.
Otros DBMS si tienen ese tipo de cosas, pero en el caso de MySQL no.

Implementarlo vía TRIGGER es bastante malo, porque no existen en MySQL los TRIGGER opcionales, esto es, pueden controlar algo de eso, pero no puedes evitar que la operación se ejecute (sea INSERT o UPDATE).

Normalmente ese tipo de restricciones es conveniente que se implementen en la aplicación y no en la base, para evitar que la base desperdicie recursos en cosas que la aplicación puede hacer mejor (en ella puedes incluso hacer que sea imposible ingresar esos valores). En ese sentido, en las software factories se considera que derivar esa responsabilidad a la base es una mala práctica de desarrollo que se debe evitar.

En la empresa donde trabajo, por ejemplo, las especificaciones de desarrollo dicen expresamente que no se debe enviar a la base ningún valor en ninguna operación, sin estar previamente validada. Y Considerando que la aplicación core tiene más de 500 vistas e impacta en más de 5 millones de clientes... puedes darte una idea de que saben de lo que están hablando.

En definitiva: Hay dos formas de manejar lo que quieres: 1) En la aplicación (recomendable), y 2) Con stored procedures (preferentemente no).
Es eso, o cambiar de DBMS.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)