Unidad 8. El DDL, Lenguaje de Definición de Datos (IX)


Veamos estas opciones con un ejemplo:
Tenemos una tabla Proveedores y una tabla artículos, en la tabla artículos nos guardamos el código del proveedor del artículo, por lo tanto definiremos la tabla artículos de la siguiente forma:


    CREATE TABLE articulos (

      Codigo INTEGER PRIMARY KEY,

      Denominacion   VARCHAR(30),

      ….,

      Proveedor INTEGER REFERENCES Proveedores,

      …)  

El campo Proveedor es clave ajena y hace referencia a un código de proveedor de la tabla Proveedores.
Aquí no hemos añadido ninguna cláusula ON DELETE por lo que se toma NO ACTION.


    ….,

      Proveedor INTEGER REFERENCES Proveedores ON  DELETE NO ACTION,

      …)  

Estas dos sentencias son equivalentes e indican que si se intenta borrar de la tabla Proveedores un proveedor asignado a un artículo, el sistema da un error y no deja eliminar el proveedor.


    ….,

      Proveedor INTEGER REFERENCES Proveedores ON  DELETE CASCADE,

      …)  

Se eliminará el proveedor y todos los artículos asignados a él.


    ….,

      Proveedor INTEGER REFERENCES Proveedores ON  DELETE SET NULL,

      …)  

Se eliminará el proveedor de la tabla Proveedores y en la tabla Artículos, todas las filas que tenían ese número de proveedor pasarán a tener el valor nulo en el campo proveedor.


    ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }   

Indica qué ocurre cuando se intenta cambiar un valor del campo relacionado de la tabla padre en la relación que estamos definiendo. El valor predeterminado es NO ACTION.

Las opciones son las mismas que para ON DELETE.
NO ACTION El Motor de base de datos genera un error y no es posible modificar la fila de la tabla primaria (el padre).
CASCADE  Si se modifica un valor de la columna padre en la tabla primaria, se modificarán automáticamente todas las filas correspondientes de la tabla que estamos definiendo, en otras palabras, si se modifica el identificativo de un padre, se actualizan todos sus hijos.
 SET NULL Si se modifica un valor de la columna padre en la tabla primaria, todas las filas correspondientes de la tabla que estamos definiendo tomarán el valor NULL en el campo clave ajena. En otras palabras, si se modifica el identificativo de un padre, sus hijos se quedan sin padre.
Para ejecutar esta restricción, la columna clave ajena debe admitir valores NULL.
SET DEFAULT Es como la anterior pero en vez del valor NULL toman el valor que tienen predeterminado. Si no hay ningún valor predeterminado establecido de forma explícita, tomarán el valor NULL. Hay que tener en cuenta que el valor predeterminado debe de existir en la tabla primaria.

Volviendo al ejemplo anterior:


    ….,

      Proveedor INTEGER REFERENCES Proveedores ON  UPDATE NO ACTION,

      …)  

Si cambiamos el código del proveedor 3 a 3000 y hay artículos asignados al proveedor 3,  el sistema da un error y no deja modificar el proveedor.


    ….,

      Proveedor INTEGER REFERENCES Proveedores ON  UPDATE CASCADE,

      …)  

Se modifica el proveedor y todos los artículos asignados a él pasan a tener el valor 3000 en el campo Proveedor.


    ….,

      Proveedor INTEGER REFERENCES Proveedores   ON UPDATE SET NULL,

      …)  

Se modifica el proveedor y todos los artículos asignados a él pasan a tener el valor NULL en el campo Proveedor.

Febrero-2010
Pág. 8.9

Atrás  Inicio  Adelante





Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies


© aulaClic. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.