sql >> Base de Datos >  >> RDS >> Oracle

como insertar clave foranea en una tabla

No estoy del todo seguro de lo que quiere decir con "ingreso de identificación incorrecto", pero supondré que se refiere a una identificación que no es válida, en lugar de simplemente un error (como decir que alguien está en una ciudad diferente a donde realmente son).

La restricción de clave externa significa que el valor que ingresan en person tabla para city_id tiene existir como clave principal en la city mesa. No pueden poner ningún valor antiguo como city_id , solo valores válidos. Y la correspondiente city la fila no se puede eliminar sin eliminar/cambiar la referencia en person tabla (por ejemplo, actualizar a un valor válido diferente) o, poco probable en este caso, eliminar en cascada para que cualquier person registros para la city se eliminan.

Así que digamos que creas tus tablas como:

create table city (id number primary key, code varchar2(2), name varchar2(30));

create table person (id number, name varchar2(30), last_name varchar2(30),
    city_id number not null references city(id));

Tienes tres registros en tu city tabla:

insert into city (id, name) values (1, 'New York');
insert into city (id, name) values (2, 'London');
insert into city (id, name) values (3, 'Paris');

Luego puedes agregar una person que vive en Nueva York incluyendo el DNI de esa ciudad:

insert into person (id, name, last_name, city_id)
values (1, 'Michael', 'Bloomberg', 1);

(SQL Fiddle )

No está desnormalizando los datos en la city coincidente registro, por lo que si Nueva York decidiera volver a cambiar su nombre a Nueva Ámsterdam, por ejemplo, sería una sola actualización de la city grabar y no tendrías que tocar a ninguna person registros de personas en esa ciudad.

Si intentaste eliminar la city para Nueva York, obtendrá un error (ORA-02292) que indica que existe un registro secundario. Podrías actualizar la person registro para tener un city_id de 2 o 3, y luego podría eliminar Nueva York. La idea es que no puede hacer esto por accidente y dejar datos huérfanos:un person_id apuntando a una city que ya no existe.

Si intentaste crear una person registro con un city_id valor que no coincide con un city.id valor:

insert into person (id, name, last_name, city_id)
values (2, 'Elvis', 'Presley', 4);

... entonces obtendría un error (ORA-02291) de que la clave principal, es decir, un id coincidente valor en la city tablas - no existe.

Puede leer más sobre claves externas en los conceptos de la base de datos guía .