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
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)
);

