Modelado físico relacional de bases de datos

¿Qué son las Restricciones (Constraints)?

Las restricciones en SQL son reglas que se aplican a las columnas o tablas para asegurar la integridad de los datos. Estas reglas garantizan que los datos sean válidos y consistentes, y pueden ayudar a prevenir errores durante la inserción, actualización o eliminación de registros.

Las restricciones más comunes son:

  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
  • NOT NULL
  • CHECK

Comandos para trabajar con Restricciones

En SQL, puedes definir restricciones tanto al momento de crear una tabla como después, mediante el uso de comandos como CREATE TABLE y ALTER TABLE.


Restricciones más comunes

PRIMARY KEY

La clave primaria (PRIMARY KEY) es una restricción que asegura que los valores de una columna o un conjunto de columnas sean únicos y no nulos. Una tabla solo puede tener una clave primaria.

Sintaxis básica:

1CREATE TABLE tabla (
2    columna1 tipo_de_dato,
3    columna2 tipo_de_dato,
4    PRIMARY KEY (columna1)
5);

Ejemplo:

1CREATE TABLE estudiantes (
2    id INT,
3    nombre VARCHAR(50),
4    edad INT,
5    PRIMARY KEY (id)
6);

En este ejemplo, la columna id de la tabla estudiantes es la clave primaria. Esto significa que no puede haber dos estudiantes con el mismo id y no puede ser nulo.


FOREIGN KEY

Una clave foránea (FOREIGN KEY) es una restricción que asegura que los valores de una columna coincidan con los valores de la clave primaria en otra tabla. Esto establece una relación entre dos tablas.

Sintaxis básica:

1CREATE TABLE tabla (
2    columna1 tipo_de_dato,
3    columna2 tipo_de_dato,
4    FOREIGN KEY (columna1) REFERENCES otra_tabla (columna_en_otra_tabla)
5);

Ejemplo:

1CREATE TABLE inscripciones (
2    estudiante_id INT,
3    curso_id INT,
4    FOREIGN KEY (estudiante_id) REFERENCES estudiantes(id)
5);

En este ejemplo, la columna estudiante_id en la tabla inscripciones es una clave foránea que hace referencia a la columna id en la tabla estudiantes. Esto asegura que solo se pueda insertar un estudiante_id que exista en la tabla estudiantes.


UNIQUE

La restricción UNIQUE asegura que los valores de una columna sean únicos, es decir, que no se repitan. A diferencia de la clave primaria, una columna puede tener valores nulos con la restricción UNIQUE.

Sintaxis básica:

1CREATE TABLE tabla (
2    columna tipo_de_dato,
3    UNIQUE (columna)
4);

Ejemplo:

1CREATE TABLE empleados (
2    id INT,
3    nombre VARCHAR(50),
4    email VARCHAR(100) UNIQUE
5);

En este ejemplo, la columna email tiene la restricción UNIQUE, lo que significa que no puede haber dos empleados con el mismo correo electrónico.


NOT NULL

La restricción NOT NULL asegura que una columna no pueda contener valores nulos. Es útil para garantizar que los datos importantes sean siempre proporcionados.

Sintaxis básica:

1CREATE TABLE tabla (
2    columna tipo_de_dato NOT NULL
3);

Ejemplo:

1CREATE TABLE productos (
2    id INT,
3    nombre VARCHAR(100) NOT NULL,
4    precio DECIMAL(10, 2) NOT NULL
5);

En este ejemplo, las columnas nombre y precio no pueden contener valores nulos, lo que garantiza que siempre haya un nombre y un precio para cada producto.


CHECK

La restricción CHECK permite imponer una condición para los valores de una columna. Solo se permiten los valores que cumplen con esta condición.

Sintaxis básica:

1CREATE TABLE tabla (
2    columna tipo_de_dato,
3    CHECK (condición)
4);

Ejemplo:

1CREATE TABLE empleados (
2    id INT,
3    nombre VARCHAR(50),
4    salario DECIMAL(10, 2),
5    CHECK (salario > 0)
6);

En este ejemplo, la restricción CHECK asegura que el salario de un empleado siempre sea mayor a 0. Si intentamos insertar un valor negativo, obtendremos un error.


DEFAULT

La palabra clave DEFAULT en SQL se utiliza para establecer un valor predeterminado para una columna cuando no se proporciona un valor específico al insertar un nuevo registro. Si un valor no se inserta explícitamente en esa columna, el valor predeterminado especificado será utilizado.

Sintaxis básica:

1CREATE TABLE nombre_tabla (
2  columna1 tipo_dato DEFAULT valor_por_defecto,
3  columna2 tipo_dato,
4  ...
5);

Ejemplo:

Supongamos que tienes una tabla estudiantes y quieres que la columna clase tenga el valor predeterminado "General" si no se especifica otro valor al insertar un nuevo estudiante.

1CREATE TABLE estudiantes (
2  id INT PRIMARY KEY,
3  nombre VARCHAR(50),
4  clase VARCHAR(50) DEFAULT 'General'
5);

Inserción con valor predeterminado:

Si insertas un nuevo registro sin especificar la columna clase, se usará el valor "General":

1INSERT INTO estudiantes (id, nombre)
2VALUES (1, 'Juan');

El registro será:

  • id: 1
  • nombre: Juan
  • clase: General (por defecto)

Usos comunes:

  • Proporcionar valores por defecto: Simplifica las inserciones cuando hay un valor común que se aplica en la mayoría de los casos.
  • Asegurar consistencia: Garantiza que cada fila tenga un valor en ciertas columnas, incluso si no se proporciona explícitamente.

Modificación de una columna para agregar un valor predeterminado:

Si necesitas agregar un valor predeterminado a una columna existente, puedes usar el comando ALTER TABLE:

1ALTER TABLE estudiantes
2ALTER COLUMN clase SET DEFAULT 'General';

AUTO_INCREMENT

El AUTO_INCREMENT es una propiedad utilizada en bases de datos, principalmente en sistemas como MySQL, que permite que el valor de una columna numérica se incremente automáticamente cada vez que se inserta un nuevo registro. Generalmente se usa en columnas de tipo clave primaria para generar un identificador único para cada registro.

¿Cómo funciona?

Cuando se define una columna con AUTO_INCREMENT, no es necesario que el usuario proporcione un valor para esa columna al insertar un nuevo registro. El sistema asignará automáticamente el siguiente valor disponible, generalmente comenzando desde 1 y aumentando en 1 con cada nueva fila agregada.

Sintaxis:

1CREATE TABLE nombre_tabla (
2    id INT AUTO_INCREMENT,
3    nombre VARCHAR(100),
4    PRIMARY KEY (id)
5);

En este ejemplo:

  • La columna id tiene la propiedad AUTO_INCREMENT.
  • Cada vez que se inserte un nuevo registro, el valor de id se incrementará automáticamente.

Ejemplo de inserción de datos:

1INSERT INTO nombre_tabla (nombre)
2VALUES ('Juan');

En este caso, no es necesario especificar un valor para la columna id, ya que AUTO_INCREMENT se encargará de asignar el valor de id automáticamente.

Características:

  1. Único por fila: Cada valor asignado por AUTO_INCREMENT es único dentro de la columna.
  2. Incremento automático: El valor se incrementa de forma secuencial (por defecto, de 1 en 1).
  3. Valor inicial: Generalmente empieza en 1, pero puedes configurar un valor inicial diferente.

¿Cómo cambiar el valor inicial?

En MySQL, puedes establecer un valor inicial para una columna AUTO_INCREMENT con la siguiente consulta:

1ALTER TABLE nombre_tabla AUTO_INCREMENT = 100;

Esto hará que la siguiente inserción utilice el valor 100 para la columna AUTO_INCREMENT.


ADD CONSTRAINT Agregar Restricciones a Tablas Existentes

Si ya tienes una tabla y deseas agregar una restricción, puedes usar el comando ALTER TABLE.

Sintaxis básica:

1ALTER TABLE tabla
2ADD CONSTRAINT nombre_restricción
3tipo_restricción (columna);

Ejemplo:

1ALTER TABLE estudiantes
2ADD CONSTRAINT unique_email UNIQUE (email);

Este comando agrega una restricción UNIQUE a la columna email de la tabla estudiantes.


** Comando DROP CONSTRAINT**

Si necesitas eliminar una restricción de una tabla (como una clave primaria o una clave foránea), puedes usar el comando DROP CONSTRAINT.

Sintaxis básica:

1ALTER TABLE tabla
2DROP FOREIGN KEY nombre_restriccion;  -- si es FOREIGN KEY
3
4ALTER TABLE tabla
5DROP INDEX nombre_restriccion;        -- si es UNIQUE o INDEX

Ejemplo: Para eliminar una clave foránea de la tabla cursos:


5. Resumen

Las restricciones son fundamentales para asegurar la calidad e integridad de los datos en una base de datos. Las restricciones más comunes incluyen:

  • PRIMARY KEY: Garantiza que los valores sean únicos y no nulos.
  • FOREIGN KEY: Establece relaciones entre tablas y asegura la integridad referencial.
  • UNIQUE: Asegura que los valores en una columna sean únicos.
  • NOT NULL: Garantiza que una columna no pueda tener valores nulos.
  • CHECK: Define condiciones específicas para los valores de una columna.
  • DEFAULT: Asigna un valor predeterminado a una columna.
  • AUTO_INCREMENT: permite que el valor de una columna numérica se incremente automáticamente.
  • ADD CONSTRAINT: Agregar una restricción a una tabla existente.
  • DROP CONSTRAINT: Eliminar una restricción de una tabla.

Estas restricciones ayudan a mantener la base de datos organizada, consistente y libre de datos incorrectos.

  • Loading...