Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

que es una foreign key???

Estas en el tema de que es una foreign key??? en el foro de Oracle en Foros del Web. Hola que tal??? Tengo dudas sobre que es una foreign key...al leer informacion me relacion acon una clave externa y foranea que tiene que ver ...
  #1 (permalink)  
Antiguo 07/10/2008, 12:36
 
Fecha de Ingreso: octubre-2008
Mensajes: 1
Antigüedad: 15 años, 6 meses
Puntos: 0
que es una foreign key???

Hola que tal???


Tengo dudas sobre que es una foreign key...al leer informacion me relacion acon una clave externa y foranea que tiene que ver es lo mismo...espero que me ayuden estoy muy confundida....tengo una definicion que no si este en lo correcto que es relacion entre una clave primaria y una clave foranea o la relacion entre dos claves primarias ....les agradesco que me ayuden y que me aclaren mi duda me urge saber...Gracias...
  #2 (permalink)  
Antiguo 07/10/2008, 16:00
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: que es una foreign key???

Je je je je je, hacía mucho tiempo que no leia un post de este tipo.................
Las Foreign Keys ( En adelante FK's ) son la biblia de las BBDD relacionales como Oracle y sirven para salvaguardar la integridad y coherencia de los datos por una parte y por otra la logica de negocio que apliques en tu programación mediante la relacion entre dos tablas.
Una FK siempre deberá ir enganchada a una clave primaria ( en adelante PK ) ó a una clave unica , basicamente no hay diferencia entre las PK y las claves unicas, pero no son lo mismo.
Te pongo el tipico y sencillo ejemplo de los clientes y facturas :
Por una parte tu tienes una tabla maestra de clientes donde tienes un código de cliente ( que será la PK ) y una o varias descripciónes, como puede ser el nombre , el NIF etc etc., por ejemplo :
COD_CLIE----------------- NOMBRE
1 ---------------------------- PERICO DE LOS PALOTES.

Y por otro lado la tabla de facturas en donde guardas el numero de factura, fecha, bla bla bla y el CODIGO DEL CLIENTE al que se le ha expedido esa factura

NUM_FACTURA----------FECHA-------------COD_CLIE
0001----------------------07-10-2008--------1

Si tu relacionas estas dos tablas mediante una FK ( Tabla hija FACTURAS y tabla padre CLIENTES ), de la tabla padre te traes el codigo de cliente de tal manera que estás impidiendo que te metan un codigo de cliente erroneo, es decir, que no exista en la tabla de clientes. Por ejemplo, dado el contenido de la tabla padre que te he puesto, solo un registro con un solo cliente, esto no podrías hacerlo en la hija , Oracle no te dejaría :

NUM_FACTURA----------FECHA-------------COD_CLIE
0001----------------------07-10-2008-------- 911

Hay de muchos tipos de relaciones : 1 a N ( Por cada ocurrencia de la tabla padre puedes tener N en la tabla hija ) , 1 a 1 ( Por cada ocurrencia de la padre SOLO puedes tener una en la hija ), relaciones en ARCO ( esto es complicado de explicar en un solo post y a distancia ), reflexivas o recursivas ( que apuntan a la misma tabla, vamos que la tabla padre es a la vez tabla hija ) etc etc etc...................

Y para terminar, otras consideraciones .

Una sola tabla puede tener N tablas hijas y al reves, una tabla puede tener N tablas padres.
Una tabla hija deberá traerse TODOS los campos que forman la PK de la tabla padre. No puedes tener una tabla padre con 3 campos que forman la PK y traerte solo uno con la FK, aunque esos mismos campos ( o parte ) te los traigas de otra tabla con otra FK. Hay una excepción a esto que te acabo de poner que son las Relaciones en Arco : Si no los quieres tener repetidos, uno o mas campos de una tabla pueden formar parte de una o mas FK's y que dependiendo de que rellenes o no todos los campos, te valide contra un tabla o contra otra. Esto puede sonar "raro" y lo es, pero muchas veces para aplicar la lógica de negocio adecuada, es necesario hacerlo.
Y para terminar, por norma, cada FK debe de llevar un índice sobre los mismos campos que forman dicha FK, por ejemplo si tienes una FK que la forman el CODIGO_CLIENTE+CODIGO_DE_FACTURA+CODIGO_DE_PROVINC IA tienes que crear un índice sobre esos mismos campos, si no lo haces se pueden generar bloqueos en accesos concurrentes a esa misma tabla, la tabla padre o la tabla hija.

Espero haberte aclarado un poco tus dudas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:17.