2009-03-17 16 views
11

Ok. Entonces sé cuál es la clave principal en DB. Si tiene una tabla en una base de datos, una clave principal es un único valor que es único para cada fila en su tabla. Por ejemplo:¿Qué es exactamente una clave externa?

id | name | whatever 
------------------------- 
1  Alice  .... 
2  Bob  .... 
45  Eve  .... 
988 ....  .... 

Así que necesito un ejemplo bueno y simple para explicar exactamente qué es una clave externa. Porque simplemente no lo entiendo :)


Editar: bien es bastante fácil, supongo que estaba complicar el problema.

Entonces, ¿una última pregunta, la única restricción en las claves externas es que son un valor válido de clave primaria en la tabla a la que me refiero?

+0

"la única restricción en claves externas es ..." Eso no es una "restricción", esa es la definición: un FK es una clave primaria válida en otra tabla. –

+0

"... una clave principal es un valor único ..." sí, siempre que reconozca que "valor" _no es también "columna". Es perfectamente válido que la clave principal sea valores múltiples. –

+0

Grrr. No puedo editar comentarios La última oración debería decir: "Es perfectamente válido que la clave principal sea COLUMNAS múltiples". –

Respuesta

21

Una clave externa es un campo que apunta a una clave principal de otra tabla.

Ejemplo:

Table Name - Users 

UserID UserName UserRoleID 
1   JohnD  1 
2   CourtneyC 1 
3   Benjamin 2 

Table Name - UserRoles 

UserRoleID Desc 
1    Admin 
2    Moderator 

Se puede ver que Users.UserRoleID es una clave externa que apunta a la clave principal UserRoles.UserRoleID

El uso de claves externas hace que la configuración relaciones en otras tablas simples , lo que le permite vincular a los datos de varias tablas de una manera agradable:

Ejemplo:

SELECT 
    a.UserID, 
    a.UserName, 
    b.Desc as [UserRole] 
FROM 
    Users a INNER JOIN 
     UserRoles b ON a.UserRoleID = b.UserRoleID 

salida sería entonces:

UserID UserName User Role 
1   JohnD  Admin 
2   CourneyC Admin 
3   Benjamin Moderator 
0

En una base de datos relacional una relación uno-a-muchos se implementa por tener la referencia de tabla secundaria el ID de la tabla primaria. La ID principal en la tabla secundaria se denomina clave externa ya que hace referencia a una clave primaria de otra tabla.

12

Digamos que usted tiene otro campo, que es la ciudad de origen:

id | name | city 
------------------------- 
1  Alice  San Francisco 
2  Bob  New York 
45  Eve  New York 
988 Bill  San Francisco 

Ahora, no tiene sentido repetir las mismas ciudades en muchas filas. Esto podría llevarlo a errores tipográficos, uso excesivo de espacio, dificultades para mostrar resultados entre otros problemas. Por lo que utilizar una clave externa:

id | name | fk_city 
------------------------- 
1  Alice  1 
2  Bob  2 
45  Eve  2 
988 Bill  1 

mesa ciudad de origen:

id | name 
------------------------- 
1 | San Francisco 
2 | New York 

espero que hace las cosas más claras para usted. :-)

Actualización: acerca de su última pregunta: Sí. :-)

3

Una clave externa es una columna en una tabla que debe identificar de forma única algo en otra tabla. Por lo tanto, los valores deben corresponderse con claves primarias en esa otra tabla.

Por ejemplo, si tiene una tabla de estudiantes tomando cursos, cada registro incluiría una identificación de estudiante y una identificación de curso. Estas son claves externas en una tabla de estudiantes (donde hay un registro para cada identificación de estudiante), y una tabla de cursos (donde hay un registro para cada identificación de curso).

Integridad referencial significa que todas sus claves foráneas corresponden en realidad a las claves principales de estas tablas de destino. Por ejemplo, todos los ID de los estudiantes y los ID del curso en su tabla de registro corresponden a los ID de los estudiantes reales y los ID de los cursos.

0

Una clave externa es un campo que hace referencia a otra tabla en la base de datos. Por ejemplo, supongamos que tiene 2 tablas, PERSON y ADDRESS. Hay un campo en PERSON llamado ID y un campo en ADDRESS llamado PERSON_ID. Haría que PERSON_ID se refiera a PERSON.ID como una clave externa. Lo que esto significa es que no puede tener una dirección que no esté conectada a una persona, ya que el valor en el campo ADDRESS.PERSON_ID debe existir en la tabla PERSON.

1
id | name | whatever | countryid 
------------------------------------- 
1  Alice  ....  13 
2  Bob  ....  42 
45  Eve  ....  1 
988 ....  ....  2 

id | countryid 
---------------- 
1  Japan 
2  Spain 
13  Norway 
42  Italy 

Los puntos clave externa de la tabla persona (primera) a una fila en la tabla de país (segundo)

0

usar su tabla de ejemplo, supongamos que tiene otra tabla:

cartid | id | itemid 
----------------------- 
100  1  abc 
101  1  cde 

en esta tabla, la clave principal es el Cartid, la clave externa es la identificación, que se vinculará a su primera tabla. el usuario 1 tiene dos carros, cada carro tiene un artículo cada uno.

una clave externa es lo que utiliza para vincular dos o más tablas que tienen información relacionada entre sí.

0

Una clave externa es la clave principal de otra tabla almacenada en su tabla. Supongamos que tiene una tabla de clientes y una tabla de pedidos. Es probable que CustomerId sea la clave principal en la tabla de clientes, y es probable que OrderId sea la clave principal en la tabla de órdenes. Pero en la tabla de pedidos necesita conocer al cliente para este pedido, ¿no? Por lo tanto, debe almacenar CustomerId en la tabla de pedidos. En este caso, CustomerId en la tabla de pedidos es una clave externa.

Me gustaría señalar que no hay ningún requisito de que una clave principal (y, por lo tanto, una clave externa) sea una sola columna. Es más simple, seguro. Pero he trabajado en sistemas empresariales en los que la clave principal tenía 11 columnas de longitud, y estoy seguro de que hay ejemplos más largos que eso. Es decir, era necesario conocer el valor de 11 columnas diferentes antes de poder identificar de manera única la fila.