SQLShack (Español)
En el artículo anterior que Comúnmente se utiliza SQL Server Restricciones: NO NULO, ÚNICO y CLAVE PRINCIPAL, se describe, en detalle, los tres primeros tipos de SQL Server limitaciones; NO NULO, ÚNICO y CLAVE PRINCIPAL. En este artículo, discutiremos las otras tres restricciones; clave foránea, verificación y predeterminado describiendo cada una brevemente y proporcionando ejemplos prácticos.,
restricción de clave foránea
Una clave foránea es una clave de base de datos que se utiliza para vincular dos tablas. La restricción de clave foránea identifica las relaciones entre las tablas de la base de datos haciendo referencia a una columna o conjunto de columnas de la tabla secundaria que contiene la clave foránea a la columna de clave primaria o conjunto de columnas de la tabla primaria.
la relación entre la tabla secundaria y las tablas primarias se mantiene comprobando la existencia de los valores de clave foránea de la tabla secundaria en la clave primaria de la tabla primaria referenciada antes de insertar estos valores en la tabla secundaria., De esta manera, la restricción de clave foránea, en la tabla secundaria que hace referencia a la clave primaria en la tabla principal, aplicará la integridad referencial de la base de datos. La integridad referencial garantiza que la relación entre las tablas de la base de datos se conserve durante el proceso de inserción de datos. Recuerde que la restricción de clave primaria garantiza que no se insertarán valores NULL o duplicados para la columna o columnas seleccionadas en esa tabla, lo que impone la integridad de la entidad para esa tabla., La integridad de la entidad impuesta por la clave primaria y la integridad referencial impuesta por la clave foránea forman la integridad de la clave.
la restricción de clave externa difiere de la restricción de clave primaria en que solo puede crear una clave primaria por cada tabla, con la capacidad de crear varias restricciones de clave externa en cada tabla haciendo referencia a varias tablas principales. Otra diferencia es que la clave foránea permite insertar valores NULL si no hay una restricción NOT NULL definida en esta clave, pero la clave primaria no acepta valores NULL.,
la restricción de clave externa también le proporciona la capacidad de controlar qué acción se llevará a cabo cuando se actualice o elimine el valor referenciado en la tabla principal, utilizando las cláusulas ON UPDATE y ON DELETE. Las acciones admitidas que se pueden realizar al eliminar o actualizar los valores de la tabla principal incluyen:
- NO ACTION: cuando las cláusulas ON UPDATE o ON DELETE se establecen en NO ACTION, la operación Update o delete realizada en la tabla principal fallará con un error.,
- cascada: al establecer las cláusulas ON UPDATE o ON DELETE en cascada, la misma acción realizada en los valores referenciados de la tabla principal se reflejará en los valores relacionados de la tabla secundaria. Por ejemplo, si el valor referenciado se elimina en la tabla principal, también se eliminan todas las filas relacionadas de la tabla secundaria.
- Establecer NULL: con esta opción de cláusulas ON UPDATE y ON DELETE, si los valores referenciados en la tabla principal se eliminan o modifican, todos los valores relacionados en la tabla secundaria se establecen en valor NULL.,
- SET DEFAULT: con la opción SET DEFAULT de las cláusulas ON UPDATE y ON DELETE se especifica que, si los valores referenciados en la tabla principal se actualizan o eliminan, los valores relacionados en la tabla secundaria con columnas de clave foránea se establecerán en su valor predeterminado.
Puede agregar la restricción de clave foránea mientras define la columna con la instrucción CREATE TABLE T-SQL, o agregarla después de la creación de la tabla con la instrucción ALTER TABLE T-SQL. Crearemos dos nuevas tablas para comprender la funcionalidad de restricción de clave foránea., La primera tabla actuará como la tabla principal con la columna ID definida como una columna de clave primaria. La segunda tabla actuará como la tabla secundaria, con la columna ID definida como la columna de clave externa que hace referencia a la columna ID de la tabla principal.,> ID INT PRIMARY KEY,
después de crear las dos tablas, insertaremos tres registros en la tabla principal y dos registros en la tabla secundaria, utilizando las siguientes instrucciones INSERT:
el resultado le mostrará que los tres registros se insertan correctamente en la tabla principal., El primer registro que intentamos insertar en la tabla secundaria se inserta sin ningún error, ya que el valor ID de 1 ya existe en la tabla principal.,debido a que el valor de ID de 4 no existe en la tabla principal, y debido a la restricción de clave externa, no podrá insertar un valor de ID en la tabla secundaria que no exista en la tabla principal:
comprobando el contenido de las tablas primaria e secundaria, verá que solo se inserta un registro en la tabla secundaria, como puede ver a continuación:
como no mencionamos el nombre de la restricción de clave foránea al crear la tabla secundaria, SQL Server le asignará un nombre único que podemos recuperar de information_schema.,TABLE_CONSTRAINTS system view using the following query:
1
2
3
4
5
6
7
8
|
SELECT CONSTRAINT_NAME,
TABLE_SCHEMA ,
TABLE_NAME,
CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.,onstraintDemoChild
ADD CONSTRAINT FK__ConstraintDe__ID
FOREIGN KEY (ID) REFERENCES ConstraintDemoParent(ID);
|
la operación fallará, como el valor de ID de 4 no existe en la tabla padre y rompe la integridad referencial entre las tablas hijo y padre, como se ve en el siguiente mensaje de error:
para poder crear la restricción de clave foránea en la tabla hijo, primero tenemos que eliminar ese conflicto eliminando o actualizando ese registro., Here we will try to modify the ID value with the following UPDATE command:
1
2
3
|
UPDATE ., SET ID =2 where ID = 4
|
Ahora, la restricción de CLAVE externa se ha creado correctamente sin ningún error como se muestra a continuación:
UNA restricción de CLAVE externa puede ser definido con la ayuda de la herramienta SQL Server Management Studio. Haga clic derecho en la tabla requerida y seleccione la opción Diseño.,> Desde la ventana que se muestra, puede especificar fácilmente el nombre de la restricción de clave externa, las tablas y columnas que participarán en esa relación, haciendo clic en la especificación de tablas y columnas, si se requiere verificar los datos existentes, y finalmente la acción realizada cuando el registro referenciado se elimina o modifica en la tabla principal, como se muestra a continuación:
restricción de verificación
una restricción de verificación se define en una columna o conjunto de columnas para limitar el rango de valores, que se pueden insertar en estas columnas, utilizando una condición predefinida., La restricción CHECK entra en acción para evaluar los valores insertados o modificados, donde el valor que satisface la condición se insertará en la tabla, de lo contrario, la operación insert se descartará. Se permite especificar múltiples Restricciones de comprobación para la misma columna.
definir la condición de restricción CHECK es de alguna manera similar a escribir la cláusula WHERE de una consulta, usando los diferentes operadores de comparación, Como AND, OR, BETWEEN, IN, LIKE and IS NULL para escribir su expresión booleana que devolverá TRUE, FALSE o UNKNOWN., La restricción CHECK devolverá un valor desconocido cuando un valor NULL esté presente en la condición. La restricción CHECK se utiliza principalmente para imponer la integridad del dominio limitando los valores insertados a los que siguen los valores definidos, el rango o las reglas de formato.
vamos a crear una nueva tabla simple que tiene tres columnas; la columna ID que se considera como la clave principal de esa tabla, nombre y salario. Se define una restricción de verificación en la columna salario para asegurarse de que no se insertan valores cero o negativos en esa columna.,v>6
si ejecuta las tres instrucciones INSERT siguientes:
queda claro a partir del resultado generado que el primer registro se inserta sin error ya que el valor de salario proporcionado cumple con la condición de comprobación.,los valores salariales divididos no cumplen con la condición de restricción de verificación debido a la inserción de Valores salariales cero y negativos, como puede ver en el siguiente mensaje de error:
al verificar los datos de la tabla, se muestra que solo la primera fila que pasó la condición de restricción de verificación se insertará en la tabla de la siguiente manera:
mencionamos anteriormente en este artículo que la restricción CHECK permite insertar valores NULL si las columnas participadas permiten null, y los valores NULL se evaluarán como desconocidos sin generar ningún error., Esto queda claro en el siguiente registro que se inserta con éxito, aunque el valor proporcionado de la columna salario es nulo:
Si revisa la definición de restricción CHECK en la instrucción CREATE TABLE anterior, verá que no hemos mencionado el nombre de la restricción definida. En este caso, SQL Server asignará un nombre único para esa restricción que se puede mostrar consultando INFORMATION_SCHEMA.TABLE_CONSTRAINTS vista del sistema para la tabla ConstraintDemo4., El resultado será como se muestra a continuación:
La restricción CHECK se puede eliminar utilizando la instrucción ALTER TABLE T-SQL.,onstraint now, with the following ALTER DATABASE … ADD CONSTRAINT T-SQL statement:
1
2
3
4
5
|
ALTER TABLE ConstraintDemo4
ADD CONSTRAINT CK__Constrain__Salar
CHECK (Salary>0);
|
Adding the CHECK constraint will fail., Esto se debe al hecho de que, mientras el servidor SQL está verificando los datos ya existentes para la condición de restricción de verificación, se encuentran uno o más valores que no cumplen con la condición de restricción, como puede ver en el siguiente mensaje de error:
para poder definir la restricción de verificación nuevamente, debemos modificar o eliminar los datos que impiden que se cree la restricción.,de484761″>
ahora, la restricción de verificación se puede definir sin problemas como se muestra a continuación:
SQL Server le permite deshabilitar la restricción de verificación para casos especiales, como insertar una gran cantidad de datos sin condición de restricción para fines de prueba o debido a cambios en la lógica de negocio., Este caso solo es válido para las restricciones de comprobación y clave foránea que puede deshabilitar temporalmente.,escribir el nombre de la restricción, como en el comando T-SQL a continuación:
1
2
3
|
ALTER TABLE ConstraintDemo4 NOCHECK RESTRICCIÓN de TODOS los
|
a partir De la COMPROBACIÓN de la restricción de la definición, se puede especificar que la restricción será creado sin la comprobación de las filas existentes, pero la restricción será marcado como no es de confianza., puede habilitar todas las restricciones de verificación, Todas a la vez,utilizando el comando T-SQL a continuación:
1
2
3
|
|
mientras habilita la restricción de verificación anterior, verá que SQL Server no se quejará de los datos sin marcar que rompen la condición de restricción., En este caso, la integridad del dominio de los datos no se mantiene.
para solucionar este problema, el comando DBCC CHECKCONSTRAINTS se puede usar fácilmente para identificar los datos que violan la condición de restricción en una tabla o restricción especificada, teniendo en cuenta no ejecutar ese comando en las horas pico, ya que afectará el rendimiento de SQL Server debido a que no se utiliza una instantánea de base de datos.,v id=»ff419aa09d»>
El resultado mostrará el Sueldo de dos valores que se rompen las condiciones de COMPROBACIÓN, como se muestra a continuación:
UNA restricción de COMPROBACIÓN también puede ser creado con la ayuda de la herramienta SQL Server Management Studio, haga clic en la tabla y seleccionando la opción de Diseño., Desde la ventana de diseño que se muestra, haga clic con el botón derecho y elija la opción Verificar restricciones de la siguiente manera:
desde la ventana verificar restricciones, puede especificar el nombre de la restricción de verificación, la expresión y si se requiere verificar los datos existentes, como se muestra a continuación:
restricción predeterminada
se utiliza una restricción predeterminada para proporcionar un valor de columna predeterminado para las filas insertadas si no se especifica ningún valor para esa columna en la instrucción INSERT., La restricción predeterminada ayuda a mantener la integridad del dominio al proporcionar valores adecuados para la columna, en caso de que el Usuario no proporcione un valor para ella. El valor predeterminado puede ser un valor constante, un valor de función del sistema o NULL.,elow:
1
2
3
4
|
ALTER TABLE ConstraintDemo5
Add Constraint DF__Restringir__Emplo PREDETERMINADO (GETDATE()) PARA EmployeeDate
|
Además, la restricción PREDETERMINADA puede ser definida usando el SQL Server Management Studio, haciendo clic derecho sobre la tabla y elegir la opción de Diseño., A continuación, seleccione la columna a la que asignará un valor predeterminado navegando por la ventana de propiedades de columna como se muestra a continuación:
esperaba que este artículo, y el anterior, hubieran ayudado a explicar los seis tipos de restricciones de SQL Server. Por favor, siéntase libre de hacer cualquier pregunta en los comentarios a continuación.,sólo se utiliza SQL Server Limitaciones: NO es NULL, ÚNICO y CLAVE PRINCIPAL
enlaces Útiles
- Crear Restricciones Check
- Limitaciones
- Predeterminados
- Crear Relaciones de Clave externa
- Restricciones CHECK
- Autor
- mensajes Recientes
Además, está contribuyendo con sus consejos SQL en muchos blogs.,
Ver todos los mensajes por Ahmad Yasin
- como monitor de Azure Datos de Fábrica – 15 de enero de 2021
- Usar Fuente de Control en Azure Datos de Fábrica – 12 de enero, 2021
- el Uso de Plantillas en Azure Datos de Fábrica – 8 de enero de 2021