Restricciones de tabla

Primary Key

Sirve para definir la clave primaria después de las columnas.

 [CONSTRAINT [constraint_name]] PRIMARY KEY [ USING BTREE | HASH ] (index_col_name, ...)
  • La convención que usaremos para estas constraints es pk_{nombreTabla}.

  • Algoritmo: BTREE y HASH.

Ejemplo con clave primaria compuesta

CREATE TABLE Modulo(
    Titulo VARCHAR(10) NOT NULL,
    Curso INT NOT NULL,
    Nombre VARCHAR(30) NOT NULL,
    PRIMARY KEY(Titulo, Curso, Nombre)
);

Índices

Sirve para crear índices en columnas. Los índices se utilizan para optimizar consultas

 INDEX index_name [ USING BTREE | HASH ] (index_col_name, ...)
  • La convención será idx_{nombreTabla}_{columnas}

  • Algoritmo: BTREE y HASH.

Ejemplo

CREATE TABLE Modulo(
    Titulo VARCHAR(10) NOT NULL,
    Curso INT NOT NULL,
    Nombre VARCHAR(30) NOT NULL,
    Aula INT NOT NULL,
    PRIMARY KEY(Titulo, Curso, Nombre),
    INDEX idx_Modulo_Aula(Aula)
);

Unique Index

Sirve para establecer unas columnas cuya combinación de valores es única.

  [CONSTRAINT [constraint_name]] UNIQUE INDEX 
       [ USING BTREE | HASH ] (index_col_name, ...)
  • La convención será idx_{nombreTabla}_{columnas}

  • Algoritmo: BTREE y HASH.

Ejemplo

CREATE TABLE Modulo(
    Titulo VARCHAR(10),
    Curso INT,
    Nombre VARCHAR(30),
    Aula INT,
    PRIMARY KEY(Titulo, Curso, Nombre),
    UNIQUE INDEX idx_Modulo_Aula(Aula)
);

Checks

Permite realizar ciertas comprobaciones simples sobre los datos de la tabla. Si un check hace referencia únicamente a una columna, se puede indicar inline en su propia definición:

CREATE TABLE Modulo(
    Titulo VARCHAR(10) NOT NULL,
    Curso INT NOT NULL,
    Nombre VARCHAR(30) NOT NULL,
    Aula INT NOT NULL CHECK (Aula > 0),
    PRIMARY KEY(Titulo, Curso, Nombre),
    INDEX idx_Modulo_Aula(Aula),
);

Otra sintaxis alternativa es incluir los checks después de las definiciones de las columnas:

CREATE TABLE Modulo(
    Titulo VARCHAR(10) NOT NULL,
    Curso INT NOT NULL,
    Nombre VARCHAR(30) NOT NULL,
    Aula INT NOT NULL,
    PRIMARY KEY(Titulo, Curso, Nombre),
    INDEX idx_Modulo_Aula(Aula),
    CHECK (Aula > 0)
);

Un check puede referirse a varias columnas, en cuyo caso es obligarotio poner esta comprobación al final, no inline:

CREATE TABLE Modulo(
    a INT,
    b INT,
    CHECK (a >= b)
);

Se pueden hacer expresiones un poco más complejas, por ejemplo:

CHECK (a > 0 AND a <> b)
CHECK (a + b > 8)
CHECK (NOT (a + b > 8))
CHECK (a BETWEEN 5 AND 10)
CHECK ((a <> b AND a > 10) OR a < 0)

Last updated