Hasta el momento hemos aprendido a definir restricciones sobre una columna, mientras la estamos definiendo añadimos a su definición la restricción o restricciones que queramos.
También existen restricciones de tabla, son restricciones que se definen después de definir todas las columnas de la tabla y que pueden afectar a una o varias columnas de la tabla. Como veremos la sintaxis para definir una restricción de tabla es muy parecida a la sintaxis de la misma restricción de columna, lo que varía es que ahora tenemos que indicar las columnas afectadas por la restricción.
< restriccion_tabla > ::=
[ CONSTRAINT nbRestriccion]
{
{PRIMARY KEY | UNIQUE } [ CLUSTERED | NONCLUSTERED ]
(nbCol[ASC|DESC][ ,...n ] )
[ WITH FILLFACTOR = factorRelleno
|WITH ( < opcion_indice > [ , ...n ] )
]
[ ON { partition_scheme_name (partition_column_name)
| filegroup | "default" } ]
|
FOREIGN KEY(nbCol[,...n])REFERENCES nbTablaPadre
[(col_padre)[,...n] )]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CHECK [NOT FOR REPLICATION] (expresion_validacion )
}
Como las cláusulas son las mismas que para las restricciones de columna, no repetiremos la explicación de cada cláusula, lo que veremos es un ejemplo y la explicación de ese ejemplo.
Volviendo al ejemplo anterior de la tabla de Personas, podemos definir la misma utilizando restricciones de tabla:
CREATE TABLE personas (
codigo int,
dni int,
madre int,
padre int,
dniTutor int,
PRIMARY KEY (codigo),
UNIQUE (dni),
FOREIGN KEY (madre) REFERENCES Personas,
FOREIGN KEY (padre) REFERENCES Personas (codigo),
FOREIGN KEY (dniTutor) REFERENCES Personas (dni));
También podíamos haber mezclado restricciones de columna con restricciones de tabla, lo que no podemos hacer es definir dos veces la misma restricción, o la definimos a nivel de columna o a nivel de tabla pero no dos veces!
Utilizando la restricciones de tabla parece que la definición queda más clara, por un lado tenemos la definición de cada columna, y luego las restricciones.
Las restricciones de tabla se hacen imprescindibles cuando la restricción afecta a una combinación de columnas. Por ejemplo imaginemos una tabla de productos en la que la clave principal está formada por el código de fabricante y código de producto (porque dos productos diferentes pueden tener el mismo código de producto con proveedores diferentes).
No podemos definir la clave de esta manera:
CREATE TABLE Productos (
Codproducto int PRIMARY KEY,
Codproveedor int PRIMARY KEY,
…
El Motor de la base de datos entendería que queremos definir dos claves primarias y eso es imposible. En este caso habría que utilizar una restricción de tabla:
CREATE TABLE Productos (
Codproducto int,
Codproveedor int,
… las demás columnas,
PRIMARY KEY (Codproducto, Codproveedor));
Ocurre lo mismo con las demás restricciones. Imaginemos ahora una tabla de líneas de pedido en la que tenemos en una línea el producto pedido, y la cantidad pedida.
CREATE TABLE LineasPed (
pedido INT,
nlin INT,
codprod INT,
codprov INT,
cantidad INT,
PRIMARY KEY (pedido, nlin),
FOREIGN KEY (codprod,codprov) REFERENCES Productos,
UNIQUE (pedido,codprod,codprov));
La combinación (codprod,codprov) forma una clave ajena que hace referencia a la tabla Productos, en este caso como la clave principal de la tabla Productos está compuesta por los dos campos, la clave ajena tiene que tener el mismo número de campo y del mismo tipo.
Con la restricción UNIQUE indicamos que la combinación formada por un número de pedido un código de producto y código de proveedor no se puede repetir, esto hace que no se puedan insertar en un mismo pedido dos líneas del mismo producto. No se puede duplicar la combinación pero sí las columnas individualmente (pueden haber varias filas con el mismo número de pedido, varias filas con el mismo código de producto y varias filas con el mismo codigo de proveedor.
Aquí termina la explicación de la sintaxis básica de las instrucciones CREATE TABLE. Nos queda hablar de las columnas calculadas y de las tablas temporales, otras cláusulas de la instrucción se pueden consultar en la ayuda de la instrucción SQL CREATE TABLE.
Síguenos en: Facebook Sobre aulaClic Política de Cookies
© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.