> Manuales > Tutorial de Oracle

Vemos claves primarias y claves externas (foreing keys) y aprendemos a aplicar restricciones a los distintos campos de las tablas.

Clave primaria: Primary key

Es una columna o un conjunto de columnas que identifican unívocamente a cada fila. Debe ser única, no nula y obligatoria. Como máximo, podemos definir una clave primaria por tabla.
Esta clave se puede referenciar por una columna o columnas. Cuando se crea una clave primaria, automáticamente se crea un índice que facilita el acceso a la tabla.

Formato de restricción de columna:

   CREATE TABLE NOMBRE_TABLA
(COL1 TIPO_DATO [CONSTRAINT NOMBRE_RESTRICCION] PRIMARY KEY
   COL2 TIPO_DATO
…
)[TABLESPACE ESPACIO_DE_TABLA];


Formato de restricción de tabla:

   CREATE TABLE NOMBER_TABLA
   (COL1 TIPO_DATO,
   COL2 TIPO_DATO,
…
[CONSTRAINT NOMBRERESTRICCION] PRIMARY KEY (COLUMNA [,COLUMNA]),
…
)[TABLESPACE ESPACIO_DE_TABLA];


Claves ajenas: Foreign Key:

Esta formada por una o varias columnas que están asociadas a una clave primaria de otra o de la misma tabla. Se pueden definir tantas claves ajenas como se precise, y pueden estar o no en la misma tabla que la clave primaria. El valor de la columna o columnas que son claves ajenas debe ser: NULL o igual a un valor de la clave referenciada (regla de integridad referencial).

Formato de restricción de columna:

   CREATE TABLE NOMBRE_TABLA
   (COLUMNA1 TIPO_DATO
   [CONSTRAINT NOMBRERESTRICCION]
REFERENCES NOMBRETABLA [(COLUMNA)] [ON DELETE CASCADE]
      …
      )[TABLESPACE ESPECIO_DE_TABLA];


Formato de restricción de tabla:

   CREATE TABLE NOMBRE_TABLA
   (COLUMNA1 TIPO_DATO,
   COLUMNA2 TIPO_DATO,
   …
   [CONTRAINT NOMBRERESTRICCION]
   FOREIGN KEY (COLUMNA [,COLUMNA])
      REFERENCES NOMBRETABLA [(COLUMNA [,
      COLUMNA])]
         [ON DELETE CASCADE],
   )[TABLESPACE ESPACIO_DE_TABLA];


Notas:

NOT NULL: Significa que la columna no puede tener valores nulos.
DEFAULT: Le proporcionamos a una columna un valor por defecto cuando el valor de la columna no se especifica en la cláusula INSERT. En la especificación DEFAULT es posible incluir varias expresiones: constantes, funciones SQL y variables UID y SYSDATE.
Verificación de restricciones: CHECK: Actúa como una cláusula where. Puede hacer referencia a una o más columnas, pero no a valores de otras filas. En una cláusula CHECK no se pueden incluir subconsultas ni las pseudoconsultas SYSDATE, UID y USER.

Nota: La restricción NOT NULL es similar a CHECK (NOMBRE_COLUMNA IS NOT NULL)


UNIQUE: Evita valores repetidos en la misma columna. Puede contener una o varias columnas. Es similar a la restricción PRIMARY KEY, salvo que son posibles varias columnas UNIQUE definidas en una tabla. Admite valores NULL. Al igual que en PRIMARY KEY, cuando se define una restricción UNIQUE se crea un índice automáticamente.

Vistas del diccionario de datos para las restricciones:

Contienen información general las siguientes:

USER_CONSTRAINTS: Definiciones de restricciones de tablas propiedad del usuario.
ALL_CONSTRAINTS: Definiciones de restricciones sobre tablas a las que puede acceder el usuario.
DBA_CONSTRAINTS: Todas las definiciones de restricciones sobre todas las tablas.

Creación de una tabla con datos recuperados en una consulta:

CREATE TABLE: permite crear una tabla a partir de la consulta de otra tabla ya existente. La nueva tabla contendrá los datos obtenidos en la consulta. Se lleva a cabo esta acción con la cláusula AS colocada al final de la orden CREATE TABLE.

   CREATE TABLE NOMBRETABLA
   (COLUMNA [,COLUMNA]
   )[TABLESPACE ESPACIO_DE_TABLA]
   AS CONSULTA;


No es necesario especificar tipos ni tamaño de las consultas, ya que vienen determinadas por los tipos y los tamaños de las recuperadas en la consulta.
La consulta puede tener una subconsulta, una combinación de tablas o cualquier sentencia select valida.
Las restricciones CON NOMBRE no se crean en una tabla desde la otra, solo se crean aquellas restricciones que carecen de nombre.

Agustin Jareño

Manual