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