Databases

T05-005 Modificación de tablas

Enunciado

Modificar una tabla. Restricciones de tabla.

También podemos añadir restricciones de tabla, obligatorias cuando la resrticción afecta a más de una columna. Por ejemplo, cuando la clave primaria o la clave ajena está formada por más de un atributo.

Sintaxis:

ALTER TABLE NombreTabla constraint_clauses;

Donde constraint_clause puede ser la realización de las operaciones ADD, MODIFY, RENAME o DROP una restricción, que podría ser de tipo UNIQUE, PRIMARY KEY, FOREIGN KEY o CHECK.

Ejemplo:

Imaginemos que hemos ejecutado las siguientes sentencias de creación de tablas:

CREATE TABLE ESTUDIANTES (
    Nombre VARCHAR2(25),
    Apellidos VARCHAR2(50),
    FechaNac DATE,
    Curso NUMBER
);

Pero, es necesario incorporar, como clave primaria, el conjunto de los atributos Nombre, Apellidos y FechaNac:

ALTER TABLE ESTUDIANTES ADD
    PRIMARY KEY (Nombre, Apellidos, FechaNac)
;

Ejercicio:

Imagina que hemos creado las siguientes tablas:

CREATE TABLE MODULOS (
    CODIGO NUMBER,
    NOMBRE VARCHAR2 (100),
    CICLO CHAR(5)
);

CREATE TABLE LIBROS (
    ISBN NUMBER,
    TITULO VARCHAR2 (100),
    MODULO NUMBER,

    CICLO CHAR(5)
);

Incorpora las siguientes restricciones:

  • La clave primaria de la tabla MODULOS debe ser el conjunto de CODIGO y CICLO.
  • La clave primaria de la tabla LIBROS debe ser el atributo ISBN.
  • El conjunto (MODULO, CICLO) de la tabla LIBROS referencia a la tabla MODULOS.

 

Tipo

DDL

Solución


												
ALTER TABLE MODULOS ADD PRIMARY KEY (CODIGO, CICLO) ; ALTER TABLE LIBROS ADD PRIMARY KEY (ISBN) ; ALTER TABLE LIBROS ADD FOREIGN KEY (MODULO, CICLO) REFERENCES MODULOS (CODIGO, CICLO) ;

Prueba


											
SELECT USER_CONSTRAINTS.TABLE_NAME, STATUS, COLUMN_NAME, CONSTRAINT_TYPE FROM USER_CONSTRAINTS JOIN USER_CONS_COLUMNS USING (CONSTRAINT_NAME) WHERE USER_CONSTRAINTS.TABLE_NAME IN ('MODULOS', 'LIBROS') ORDER BY COLUMN_NAME;

Librerías (Onfly databases)


											
CREATE TABLE MODULOS ( CODIGO NUMBER, NOMBRE VARCHAR2 (100), CICLO CHAR(5) ); CREATE TABLE LIBROS ( ISBN NUMBER, TITULO VARCHAR2 (100), MODULO NUMBER, CICLO CHAR(5) );