sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cuál es el nombre de restricción predeterminado en SQL Server?

Problema:

Desea conocer los nombres predeterminados de las restricciones en la base de datos de SQL Server.

Ejemplo:

En nuestra base de datos, creamos dos tablas, country y student , con las siguientes restricciones:PRIMARY KEY (la columna id en las tablas country y student ), FOREIGN KEY (la columna country_id en la tabla student ), DEFAULT (la columna name en la tabla student ), UNIQUE (la columna name en la tabla country y la columna personal_number en la tabla student ), y CHECK (la columna age en la tabla student ).

Solución:

CREATE TABLE country (
id int NOT NULL primary key,
name varchar(100) UNIQUE
);

CREATE TABLE student (
id int NOT NULL primary key,
name varchar(100) NOT NULL DEFAULT 'unknown',
personal_number varchar(100) UNIQUE,
age int CHECK(age>15),
country_id int FOREIGN KEY references country(id)
);

Veamos cómo SQL Server nombra las restricciones de estas tablas de forma predeterminada. Usa esta consulta para verlos:

SELECT TABLE_CATALOG, TABLE_NAME,
       CONSTRAINT_TYPE,CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Aquí está el resultado:

NOMBRE_TABLA CONSTRAINT_TYPE CONSTRAINT_NAME
país CLAVE PRINCIPAL PK__país__3213E83F7EFD826D
país ÚNICO UQ__país__72E12F1BB69A1D8C
estudiante CLAVE PRINCIPAL PK__estudiante__3213E83F357C7D1D
estudiante ÚNICO UQ__estudiante__24E2EDD2AC2A7D87
estudiante COMPROBAR CK__estudiante__edad__4E88ABD4
estudiante LLAVE EXTRANJERA FK__estudiante__país__4F7CD00D

Discusión:

Cuando creamos nuestras tablas, establecemos restricciones para algunas columnas. Sin embargo, no especificamos los nombres de estas restricciones, por lo que se nombran de forma predeterminada. ¿Cómo se generan los nombres predeterminados para las restricciones?

En SQL Server, los nombres de restricciones predeterminados comienzan con prefijos específicos:PK , UQ , CK , o FK .

El nombre predeterminado para una PRIMARY KEY la restricción comienza con 'PK ', seguido de guiones bajos ('__ '), el nombre de la tabla, más guiones bajos ('__ ') y un número de secuencia hexadecimal generado por SQL Server. En nuestro ejemplo, PK__country__3213E83F7EFD826D es el nombre predeterminado para la restricción de clave principal en la tabla country y PK__student__3213E83F357C7D1D es el nombre predeterminado para la restricción de clave principal en la tabla student .

El nombre predeterminado para una FOREIGN KEY la restricción comienza con 'FK ', seguido de guiones bajos ('__ '), el nombre de la tabla, más guiones bajos ('__ '), el nombre de la tabla relacionada y un número de secuencia hexadecimal generado por SQL Server. En nuestro ejemplo, FK__student__country__4F7CD00D es el nombre predeterminado para la restricción de clave externa en la tabla student que es equivalente a la columna id en la tabla country .

El nombre predeterminado para un UNIQUE la restricción es 'UQ ', guiones bajos ('__ '), el nombre de la tabla, más guiones bajos ('__ ') y un número de secuencia hexadecimal generado por SQL Server. En nuestro ejemplo, UQ__country__72E12F1BB69A1D8C es el nombre predeterminado de la restricción única para el nombre de la columna en la tabla country y UQ__student__24E2EDD2AC2A7D87 del UNIQUE restricción para el nombre de la columna de la tabla student . UNIQUE las restricciones con múltiples columnas se nombran en un patrón similar.

El nombre predeterminado para un CHECK la restricción es 'CK ', guiones bajos ('__ '), el nombre de la tabla, más guiones bajos ('__ '), el nombre de la columna, más guiones bajos ('__') y un número de secuencia hexadecimal generado por SQL Server. En nuestro ejemplo, CK__student__age__4E88ABD4 es el nombre predeterminado para CHECK restricción para la columna age de la mesa student .