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 NULL despué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 * NULL es igual a NULL.

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

DDL

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)


											
--