Mostrando entradas con la etiqueta Foreign key. Mostrar todas las entradas
Mostrando entradas con la etiqueta Foreign key. Mostrar todas las entradas

¿Como crear una condición Constraint Oracle Foreign key o Llave foránea?



Es una instrucción que permite conservar la integridad de los datos, cuando se le indica a un campo de una tabla que es llave foránea, es como si el campo de esa tabla “fuera una lista de valores” en la que solo se pueden ingresar los valores que contiene otro campo en otra tabla, el campo de esa tabla debe ser Primary Key.

Se puede crear el constraint de dos formas, utilizando la instrucción Alter Table o al momento de crear la tabla.

Creando la tabla
CREATE TABLE CIUDAD (
       CODIGO_CIUDAD NUMBER,
       CODIGO_PAIS     NUMBER,
       NOMBRE_CIUDAD  VARCHAR2(100),
       CONSTRAINT  FK_CIUDADPAIS FOREIGN KEY (CODIGO_PAIS)
       REFERENCES PAIS(CODIGO_PAIS)
);

Modificando la tabla
ALTER TABLE CIUDAD ADD CONSTRAINT FK_CIUDADPAIS FOREIGN KEY(CODIGO_PAIS) REFERENCES PAIS(CODIGO_PAIS);

Siempre que se quiera ingresar un valor en el campo llave foránea, el valor debe de existir en el campo primary key de la otra tabla, de no ser así generar un error “ORA-02291: integrity constraint (string.string) violated - parent key not found”.

Una tabla puede tener una o más llaves foráneas.

También se pueden crear llaves foráneas compuestas por dos o más campos, la llave foránea compuesta solo es posible si la primary key de la otra tabla también es una llave primaria compuesta.

¿Como crear una tabla en Oracle (Create table)?



Para crear una tabla en una base de datos Oracle, se debe tener claro el nombre de la tabla, nombre de los campos, sus restricciones y relaciones que esta contenga. La estructura de una tabla Oracle normal sería así.

Create table Nombre_Tabla(Nombre_Campo Tipo_Dato(Tamaño),...,Nombre_campo Tipo_Dato(Tamaño));

Si en algún momento se necesita realizar un cambio a la estructura de la tabla se utiliza el comando ALTER TABLE que lo veremos más adelante.


Ejemplos de tablas

Tabla normal:
Create table Clientes(Codigo_Cliente number, 
                                Nombre_Cliente varchar2(100));

Tabla con restricciones  NOT NULL:
Create table Clientes(Codigo_Cliente number not null,
                                Nombre_Cliente varchar2(100));


Tabla con llave primaria:
Create table Clientes(Codigo_Cliente number, 
                                Nombre_Cliente varchar2(100), 
                                Constraint Pk_Cliente  Primary key  (Codigo_Cliente));

Tabla con llave foranea:
Create table Clientes(Codigo_Cliente number not null, 
                                Nombre_Cliente varchar2(100),
                                Cod_Ciudad number,  
                                Constraint fk_ciudad_cliente Foreign key (Cod_Ciudad) references Ciudades(Codigo));


Tabla con llave primaria y foranea:
Create table Clientes(Codigo_Cliente number not null, 
                                Nombre_Cliente varchar2(100),
                                Cod_Ciudad number,  
                                Constraint Pk_Cliente Primary key  (Codigo_Cliente),  
                                Constraint Fk_Ciudad_Cliente  Foreign key (Cod_Ciudad) references Ciudades(Codigo));

******************************************************************************************************************************************************
Ejercicio:

Se requiere poder almacenar el nombre, edad, ciudad y país de cada uno de los compradores.

Solución: 
Se crea la tabla clientes.

Create table Cliente(Codigo number not null,
                                  Nombre varchar2(80),
                                  Fecha_nacimiento Date,
                                  Pais varchar2(80),
                                      Ciudad varchar2(80));