Saltar al contenido

La importancia de las restricciones en SQL Server

Las restricciones en SQL Server son reglas y restricciones predefinidas que se aplican en una sola columna o en varias columnas, relacionados a los valores permitidos en las columnas, para mantener la integridad, precisión y confiabilidad de los datos. Es decir, si cumples con la restricción definida, el registro se insertará exitosamente. Si violas dicha restricción, la operación de inserción será cancelada.

Índice

    Situacion

    tienes un campo char(1) que solo debe aceptar dos valores M y F para el caso todos los demas valores serian rechazados y no insertados. Las restricciones o constraint en sql server permiten validar que los valores introducidos en una o mas columnas sean los correctos.

    Cuales son las restricciones más comunes en SQL Server con ejemplo ?

    Ejemplo de Restriccion de columna Not null

    Este tipo de restricción indica que el valor de la columna no puede ser NULL, es decir, que debe contener un valor.

    Create tabla EjemploNotNull

    (

    columna1 varchar(50) not null,

    columna2 char(1)

    )

    Como pudimos ver se creo la tabla de ejemplo donde la columna1 no acepta valores nulos mientras que en la columna2 se pueden insertar valores nulos.

    INSERT INTO EjemploNotNull values (‘valor’,’M’)

    La sentencia anterior funcionara ya que se cumple con la restriccion de no permitir valores.

    Sql server restricciones unique constraint ejemplo

    Este tipo de restricción indica que los valores introducidos en la columna no se pueden repetir. Para ese caso crearemos una tabla con un indice.

    Create tabla EjemploUNIQUE

    (

    columnaUNIQUE int primary key, — restriccion UNIQUE implicita en PK

    columnaNoUNIQUE varchar(50) not null,

    constraint restr_unica unique (columnaNoUNIQUE) — restriccion UNIQUE explicita

    )

    INSERT INTO EjemploUNIQUE values (100,’Valor’)

    La sentencia anterior funcionara ya que se cumple con la restriccion de no permitir valores repetidos en la columna. ahora si ejecutra nuevamente esta consulta nuetro SGBD nos marcara un error por tratar de violar la restriccion de valores unicos dentro de la tabla creada.

    Otro ejemplo de como crear indices de sql server

    Tomando en cuenta que las claves primarias por defectos son valores unicos aqui te presentamos como crear un indice unico dentro de una tabla ya creada

    CREATE TABLE EjemploIndice

    (

    columnaUNIQUE int primary key, — restriccion UNIQUE implicita en PK

    columnaNoUNIQUE varchar(50) not null,

    ColumnaindexUnique int

    )

    — Crear un índice único llamado AK_UnitMeasure_Name

    — en la tabla EjemploUNIQUE .

    CREATE UNIQUE INDEX IDX_EjemploIndice

    ON EjemploIndice(ColumnaindexUnique );

    Al igual que en el ejemplo anterior se creara una tabla con la restriccion UNIQUE. pero estamos agregando un indice a las columnas creadas anteriormente de esta forma al insertar los valores tenedremos dos campos con valores unicos la columna de la llave primaria y la del indice creado.

    Como crear un PRIMARY KEY con ejemplo

    Este tipo de restricción indica que los valores introducidos en la columna son únicos y no se pueden repetir. además, los valores de esta columna no pueden ser NULL. esta restriccion al igual que los indices unique son muy utilizados en las tablas. la diferencia entre una restriccion UNIQUE Y PRIMARY KEY es que PRIMARY KEY ademas de ser UNIQUE no acepta valores NULL.

    –creamos la tabla EjemploPrimaryKey

    CREATE TABLE EjemploPrimaryKey

    (

    columnaPK int primary key, — restriccion PK implicita en PKID

    — restriccion UNIQUE implicita en PK

    columnaNoPK varchar(50) not null,

    )

    INSERT INTO EjemploPrimaryKey values (100,’valor’)

    La sentencia anterior funcionara ya que se cumple con la restriccion de indicada en la tabla creada.

    Restriccion foreign key sql server

    Las restricciones FOREIGN KEY garantizan que los valores introducidos en una columna (columna hija) se encuentren dentro del rango de su tabla catalogo ejemplo de esto son los proveedores dentro de un pedido de compra no puede existir un pedido que no tenga un proveedor egistrado en nuestra base de datos por lo que se restringe el ingreso de nuevos pedidos.

    Para este ejemplo necesitaremos dos tablas una tabla catalogo y otra transaccional esto para ilustrar las relacion que existen entre ambas tablas

    Tomando encuenta el ejemplo anteriror crearemos una tabla pedido detalle y en la tabla catalogo de proveedores.

    CREATE TABLE PedidoDetalle

    (

    ID_PEDIDO bigint, — restriccion FOREIGN KEY implicita en PK

    ID_PROVEEDOR bigint not null, — restriccion FOREIGN KEY implicita en FK

    restriccionFK foreign key (ID_PROVEEDOR) — restriccion FOREIGN KEY explicita

    references Proveedores(PK_PROVEEDOR)

    on delete restrict

    on update cascade,

    restriccionPK primary key (ID_PEDIDO, ID_PROVEEDOR)

    )

    ahora crearemos la tabla proveedores por como vimos la tabla pedido detalle tiene la clausula ON UPDATE CASCADE esto quiere decir que si se actualiza un campo en la tabla catalogo este cambio se aplicara de forma automatica en las tablas relacionadas.

    CREATE TABLE Proveedores

    (

    PK_PROVEEDOR bigint primary key identity, — restriccion PK implicita en PKID

    restriccionUNIQUE unique (NOMBRE_PROVEEDOR) — restriccion UNIQUE explicita

    )

    INSERT INTO Proveedores values (‘proveedor A’) –OK, para este ejemplo asumimos que el valor del PK del proveedor es 1.

    –insertar un pedido detalle relacionado al proveedor A

    INSERT INTO PedidoDetalle values (100, 1) –OK

    –eliminar el registro del proveedor A en la tabla catalogo

    DELETE FROM Proveedores where PK_PROVEEDOR = 1

    En este caso nuestro SGBD marcara un error debido aque no podemos eliminar un registro que tenga relacion con otra tabla esto asi por que la tabla creada no tiene activada On delete cascade.

    Restricciones check sql server ejemplos

    Creo que es una de las restricciones mas utiles que existe pero menos usadas por los de desarrolladores.Este tipo de restricción indica que los valores introducidos en la columna deben cumplir una condición específica.

    –creamos la tabla EjemploCheck

    CREATE TABLE EjemploCheck

    (

    restriccionCHECK check (columna > 0), — restriccion CHECK explicita

    columna int not null, — restriccion NOT NULL implicita en PKID

    restriccionPK primary key (columna) — restriccion PK implicita en PK

    )

    INSERT INTO EjemploCheck values (-100) –ERROR, ya que el valor introducido no cumple la condición de restricción. todos los valores deben ser mayores que CERO.

    Default de sql server

    Este tipo de restricción indica que, si no se especifica un valor para la columna, se asignará el valor predeterminado definido.

    –creamos la tabla EjemploDefault

    CREATE TABLE EjemploDefault

    (

    restriccionDEFAULT default (getdate()), — restriccion DEFAULT explicita, el valor predeterminado es la fecha actual.

    columna datetime not null — restriccion NOT NULL implicita en PKID

    restriccionPK primary key (columna) — restriccion PK implicita en PK

    )

    INSERT INTO EjemploDefault values () –OK, la fecha actual se asignará automáticamente a la columna.

    En resumen

    Como podemos ver, las restricciones en SQL Server son muy útiles para garantizar la integriddad de la informacion guardada dentro de nuestra base de datos esto asi para mantener un orden y limpieza de datos.

    Espero les haya gustado el articulo si es asi pueden dejar sus comentarios o darnos una manita arriba. Nos vemos en la proxima.

    Hasta luego!!!

    Bye :D!!