Los constraints son mecanismos cruciales en las bases de datos para asegurar la integridad y validez de los datos antes de que se inserten o actualicen. Estos se implementan para establecer reglas de negocio, tales como impedir la duplicación de información en una columna, establecer valores predeterminados al ingresar valores nulos o vacíos, y aplicar fórmulas específicas. Este enfoque te permite garantizar que los datos en tus tablas sean congruentes y estén alineados con las necesidades y normativas de tu negocio.
¿Cómo agregar un constraint para valores nulos o vacíos?
Para ejemplificar el uso de constraints, se utilizará la base de datos Platzi y particularmente la tabla UsuarioSource. Supongamos que queremos validar que, cuando se ingrese un valor nulo o vacío en la columna puntos, automáticamente se asigne un cero. Para lograr esto, primero se debe eliminar el trigger que impide la modificación de la estructura de la base de datos. Una vez hecho esto, podemos proceder de la siguiente forma:
A continuación, se realiza un INSERT en la tabla y se verifica que el constraint se ha aplicado correctamente:
INSERTINTO UsuarioSource VALUES(7,DEFAULT);
Esto asegurará que cualquier entrada vacía en la columna puntos se llene automáticamente con el valor cero.
¿Cómo asegurar nombres únicos en una columna?
Otro uso fundamental de los constraints es garantizar que no haya duplicados en ciertas columnas cuando las condiciones del negocio así lo exigen. Si queremos que los nombres en la columna nombre sean únicos, podemos establecer un constraint de tipo UNIQUE:
Al intentar insertar un nuevo usuario con un nombre ya existente, como "Carlos Álvarez", el sistema debería generar un error indicando la violación de la clave única.
¿Cómo establecer constraints más complejos?
Además de los ejemplos anteriores, los constraints también se pueden usar para validar combinaciones de condiciones más complejas mediante el uso de CHECK. Por ejemplo, si deseamos establecer que:
Los valores en la columna puntos deben ser mayores o iguales a cero.
El nombre debe ser diferente de "María Solís".
Podríamos configurar el siguiente constraint:
ALTERTABLE UsuarioSource
ADDCONSTRAINT C_UsuarioSource_Validaciones CHECK(puntos >=0AND nombre <>'María Solís');
Este constraint garantizará que cualquier registro añadido o modificado cumpla con estas reglas, proporcionando una capa adicional de integridad y calidad a nuestros datos.
Es impresionante cómo los constraints pueden ser una herramienta tan poderosa para mantener nuestras bases de datos ordenadas y útiles para los fines de nuestro negocio. Si estás interesado en continuar mejorando tus habilidades en gestión de bases de datos, no dudes en seguir explorando y aplicando estos conceptos en situaciones reales. ¡El camino hacia el dominio de bases de datos es largo pero sumamente gratificante!
Los constraints son reglas de negocio que podemos agregar a las tablas para validar información previa a su ingreso o actualización.
Pueden ser de tipo CHECK, DEFAULT o UNIQUE.
🧵Les dejo mas información de esta clase en la documentación oficial de microsoft
Son reglas de negocio, pero hay que tener muy claro que se necesita, porque pueden afectar el rendimiento, pero son importantes para el negocio.
Excelentes referencias, muchas gracias.
Los CONSTRAINTS son reglas de negocio que se agregan a las tablas para validar los insert o Update previo a su ejecución.
Por ejemplo para validar datos por default, nulos o repetidos, entre otros
He cambiado el valor del DEFAULT de la siguiente forma pero siempre me devuelve un 0.
He probado a borrar el Constraint y crearlo de nuevo y nada... ¿Alguna sugerencia para que por defecto nos devuelva un resultado diferente a 0?
El doble paréntesis del 0 dañan el constraint. Luego puedo mostrarlo. la forma correcta sería con 1 solo paréntesis o sin paréntesis.
Apunte 2.
insert into UsuarioSource(Codigo,Nombre)values(21,'JJ')
Con un INSERT de este tipo, donde especificamos las columnas y dejamos por fuera la la columna con la restricción en cuestión, ahí sí, la restricción cumple su cometido y nos da por defecto el valor 2.
PD: Para demostrar que el doble paréntesis daña el constraint basta correr este último insert y ver que el valor que recibe puntos es NULL.
La pregunta original de por qué ante un insert del tipo
insert into UsuarioSourcevalues(21,'JJ','')
Por qué nos devuelve 0? yo mismo sigo intrigado y esperando una respuesta.
Saludos
¿Por qué es necesario colocar nombre a los constraint?
CREATE TABLE Production.TransactionHistoryArchive4
(
TransactionID int NOT NULL,
CONSTRAINT AK_TransactionID UNIQUE(TransactionID)
);
GO
A simplemente hacer esto:
CREATE TABLE Production.TransactionHistoryArchive4
(
TransactionID int NOT NULL UNIQUE,
);
GO
¿Por qué es necesario, qué ventajas tiene?
Muy buen aporte, simplemente de la otra forma es para tener un orden, pero es válido lo que dices. Aun así, yo prefiero ponerle nombre. No hay ninguna ventaja en cuanto a rendimiento, las dos opciones funcionan igual.
Creo que falto revisar el ENUM, que es listar las opciones de datos permitidos a ingresar en un campo, pero para SQL Server no encontré esta sentencia, pero si vi una adaptación.
La columna a afectar.
mycol VARCHAR(10) NOT NULL
se utiliza una sentencia para buscar dentro de una lista.
CHECK (mycol IN('Useful', 'Useless', 'Unknown'))
Antes de aplicar un constraint en producción, prueba tus sentencias en un entorno de desarrollo o staging. Así podrás detectar duplicados o valores nulos que podrían causar errores al activar las restricciones.
Y ¿ en lugar de eliminar el Trigger que impide la modificación de las tablas no se puede desactivar temporalmente?
Un constraint en SQL se utiliza para establecer reglas que los datos deben cumplir al ser insertados o actualizados en una tabla. Estas reglas ayudan a mantener la integridad de los datos. Por ejemplo, puedes usar constraints para evitar que se ingresen valores nulos, garantizar que ciertos valores sean únicos o validar que los datos cumplan con criterios específicos, como que un número sea mayor que cero. Esto es clave para asegurar la consistencia y calidad de la información en la base de datos.
CONSTRAIN
La palabra clave CONSTRAINT se utiliza para definir explícitamente una restricción en una tabla de MySQL. Si utilizas la palabra clave CONSTRAINT, debes pasarle un parámetro indicando el nombre de esa restricción. Sin embargo, si no usas CONSTRAINT, el motor de base de datos le pone el nombre a la restricción de forma automática.
Una ventaja de usar CONSTRAINT es que puedes ponerle el nombre que tú quieras a la restricción, por si luego tienes que hacer algo con esa restricción y así puedas identificarla fácilmente. Un inconveniente es que ese nombre no puede estar duplicado, por lo que tendrías que tener control de qué nombre le pones para no repetirlo.
los constraints en SQL son reglas que se utilizan para especificar las limitaciones de los datos en una tabla. Estas reglas ayudan a garantizar la precisión y confiabilidad de los datos en la tabla. Si hay alguna violación entre el constraint y la acción de datos, la acción se aborta. Los constraints pueden ser de nivel de columna o de nivel de tabla. Los constraints comúnmente utilizados en SQL incluyen: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK y DEFAULT
Estos Constraint los uso mucho para poner la fecha y hora que se inserta un registro en la tabla