Databases
T05-002 Restricciones
Enunciado
Hay veces que necesitamos que un dato se incluya en una tabla de manera obligatoria, otras veces necesitaremos definir uno de los campos como llave primaria o ajena. Todo esto podremos hacerlo cuando definamos la tabla, además de otras opciones.
Una restricción es una condición que una o varias columnas deben cumplir obligatoriamente.
Cada restricción que creemos llevará un nombre, si no se lo ponemos nosotros lo hará Oracle o el SGBD que estemos utilizando. Es conveniente que le pongamos un nombre que nos ayude a identificarla y que sea único para cada esquema (usuario). Es buena idea incluir de algún modo el nombre de la tabla, los campos involucrados y el tipo de restricción en el nombre de la misma.
Sintaxis:
La sintaxis en SQL estándar es la siguiente:
CREATE TABLE NOMBRETABLA ( Columna1 Tipo_Dato [CONSTRAINT nombredelarestricción] [NOT NULL] [UNIQUE] [PRIMARY KEY] [FOREIGN KEY] [DEFAULT valor] [REFERENCES nombreTabla [(columna [, columna ])] [ON DELETE CASCADE]] [CHECK condición], Columna2 Tipo_Dato [CONSTRAINT nombredelarestricción] [NOT NULL]... ,...);Veamos un ejemplo:
CREATE TABLE USUARIOS ( Login VARCHAR(15) CONSTRAINT usu_log_PK PRIMARY KEY, Password VARCHAR (8) NOT NULL, Fecha_Ingreso DATE DEFAULT SYSDATE);Restricción
NOT NULL.Con esta restricción obligaremos a que esa columna tenga un valor o lo que es lo mismo, prohíbe los valores nulos para una columna en una determinada tabla.
Podremos ponerlo cuando creamos o modificamos el campo añadiendo la palabra
NOT NULLdespués de poner el tipo de dato.Si en la tabla USUARIOS queremos que el campo "F_Nacimiento" sea obligatorio ponerlo, nos quedaría así:
CREATE TABLE USUARIOS ( F_Nacimiento DATE CONSTRAINT Usu_Fnac_NN NOT NULL);o bien, de esta otra forma:
CREATE TABLE USUARIOS ( F_Nacimiento DATE NOT NULL);Debemos tener cuidado con los valores nulos en las operaciones, ya que
1 * NULLes igual aNULL.Ejercicio:
Vamos a incluir restricciones a la tabla de alumnos vista en el ejercicio anterior. Los atributos y sus tipos deben ser iguales a los planteads anteriormente:
- NRE: que contiene números de hasta 8 dígitos.
- NIF_NIE: que contiene una combinación de números y letras de hasta 9 caracteres.
- APELLIDOS: anteriormente ya hemos limitado la longitud de este atributo a 50 caracteres.
- NOMBRE: anteriormente ya hemos limitado la longitud de este atributo a 25 caracteres.
- FECHA_NAC: lógicamente, almacena una fecha.
- NACIONALIDAD: almacenará cadenas de caracteres con una longitud máxima de 30.
- EMAIL: también almacenará cadenas de hasta 100 caracteres.
- TELEFONO: almacenará un número de hasta 9 dígitos.
Además, debes obligar a que los atributos APELLIDOS, NOMBRE y EMAIL de cada fila de la tabla tenga algún valor, no estando permitido que el valor asociado a esos atributos sea NULL.
Tipo
Solución
CREATE TABLE ALUMNOS (
NRE NUMBER(8),
NIF_NIE VARCHAR2(9),
APELLIDOS VARCHAR2(50) NOT NULL,
NOMBRE VARCHAR2(25) NOT NULL,
FECHA_NAC DATE,
NACIONALIDAD VARCHAR2(30),
EMAIL VARCHAR2(100) NOT NULL,
TELEFONO NUMBER(9)
);
Prueba
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'ALUMNOS' ORDER BY COLUMN_NAME;
LibrerÃas (Onfly databases)
--

