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

** llaves foraneas **

Estas en el tema de ** llaves foraneas ** en el foro de Bases de Datos General en Foros del Web. Gracias de antemano al que me resuelva la duda y al que se halla tomado la molestia de leer el post. Se que una llave ...
  #1 (permalink)  
Antiguo 05/10/2007, 09:05
 
Fecha de Ingreso: septiembre-2007
Mensajes: 3
Antigüedad: 17 años, 2 meses
Puntos: 0
** llaves foraneas **

Gracias de antemano al que me resuelva la duda y al que se halla tomado la molestia de leer el post.

Se que una llave foranea se utiliza para relacionar dos tablas o almenos para indicar que una tabla trabaja con datos de otra tabla. "segun conceptos en internte"

Tengo la tabla A la cual tiene digamos los atributos

A_ID
A_NOMBRE
A_APELLIDO

Tengo la tabla B la cual tiene:

B_ID
B_TRABAJO
B_A_ID <- llave foranea.

La duda es:

Yo solo meto foreign keys por normas de presentacion, es decir solo pa'decir que hay una relacion o si yo puedo consultar datos de la tabla A a traves de la tabla B. es decir algo como:

SELECT 'A_NOMBRE' FROM A WHERE 'B_ID'=3;

GRACIAS
  #2 (permalink)  
Antiguo 05/10/2007, 09:56
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 9 meses
Puntos: 8
Re: ** llaves foraneas **

Fijar una "clave foránea" (en adelante FK) en la base de datos es algo más que cuestión de presentación. En realidad estás marcando unas normas de "llenado" de la base. Por ejemplo, en tu caso, el campo B_A_ID podría ser una FK relacionada con el campo A_ID de la tabla A. Si fijas eso en la base de datos no podrás meter un registro en la tabla B sin que exista un registro en la tabla A con el que se relacione. Es decir, si intentas meter un registro en B del tipo (001,"Su trabajo",007) deberá haber un registro en A cuyo A_ID sea 007.
Por otra parte, no podrás borrar de A registros que estén relacionados en B. Es decir, que no podrías borrar de A un registro con A_ID valor 007 mientras haya registros en B con ese valor en el campo B_A_ID.

Bueno, ésto es solo un barniz de lo que es y como se comporta una FK...

Puede hacer una consulta relacionando las dos tablas, aunque estrictamente no es necesario que exista la FK para hacerlo. Más o menos así:

SELECT A_ID, A_NOMBRE, A_APELLIDO, B_TRABAJO FROM A LEFT JOIN B ON A.A_ID=B.B_A_ID WHERE A_NOMBRE LIKE "JU%"

Para obtener el nombre, apellido y trabajo de los currelas cuyo nombre empieza por "JU"
__________________
Kelpie

Última edición por Kelpie; 05/10/2007 a las 10:01
  #3 (permalink)  
Antiguo 05/10/2007, 10:05
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 9 meses
Puntos: 8
Re: ** llaves foraneas **

Con A LEFT JOIN B especificas que hay que sacar los datos de la tabla A y, de ellos, complementarlos con los de la tabla B.

Con ON A.A_ID=B.B_A_ID especificas que para un registro de la tabla A lo complete con los datos del registro(s) de la tabla B que tenga(n) en el campo B_A_ID el mismo valor que que el de la tabla A tiene en A_ID
__________________
Kelpie
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:41.