2011-12-21 14 views

Respuesta

9

"Clave de referencia" no es un término técnico normal en el modelado relacional o en la implementación de SQL en inglés estadounidense.

Una clave externa "referencia" una clave en alguna otra tabla; ¿podría ser ahí de donde proviene la confusión?

5

En realidad, no llamar a algo una clave referencia ... Ellos son la misma cosa ... es posible que aparezca la palabra referencias utilizado por ejemplo en sqlite: es posible utilizar la sintaxis como esta para iniciar una db de autores y libros. Esto le permite mostrar que un autor puede tener muchos libros. Esto le dice al PP que el books.author_id (define un par de líneas arriba) hace referencia a author.id

CREATE TABLE 'author' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    firstname varchar(255) 
    lastname varchar(255) 
); 

CREATE TABLE 'books' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    author_id INTEGER, 
    title varchar(255), 
    published date, 
    FOREIGN KEY(author_id) REFERENCES author(id) 
); 
2

Tal vez usted está usando la "clave de referencia" término algo vagamente?

Se dice que un valor de clave foránea en una fila "hace referencia" a la fila que contiene el valor de clave correspondiente. Tenga en cuenta que la palabra "referencia" en la oración anterior es un verbo, por lo que podemos decir que tenemos un valor de referencia de clave externa y un valor de clave referenciado.

Aunque se hace referencia a los valores clave, en lugar de la restricción de la clave de tabla, supongo que, en términos generales, podríamos decir "clave referenciada" para referirnos a las filas que comprenden los valores a los que potencialmente se puede hacer referencia. Luego veo cómo "clave referenciada" podría convertirse en "clave referenciada" pero no desmentir su origen.

36

Supongo que está hablando de usar el REFERENCES donde no se usa la palabra clave FOREIGN KEY, por ej.

author_id INTEGER REFERENCES author(id) 

... en lugar de ...

author_id INTEGER, 
FOREIGN KEY(author_id) REFERENCES author(id) 

La respuesta es, que es simplemente la sintaxis abreviada de la misma cosa. La principal preocupación cuando se modifica entre los dos debería ser la legibilidad.

+0

Aunque la primera funcionará sin habilitar las claves externas y la segunda no. ¿La segunda forma ya no se usa? – schwiz

+0

También importa si intenta usar ingeniería inversa para crear diagramas desde su base de datos en MySQL Workbench. Si usó la primera opción al crear su base de datos, la herramienta no podrá crear conexiones entre los elementos del diagrama. –

2

Una clave externa "referencia" una clave en alguna otra tabla. Esa clave en otra tabla se llama clave referenciada. Es probable que escuche mucho sobre esto si usa la función Gráfico en phpmyadmin.

1

Hay 2 formas de declarar una clave externa (s):

  1. si la clave externa es un atributo INDIVIDUAL:
    Referencias()

  2. si las claves externas son una lista de atributos

FOREIGN KEY() REFERENCIAS

1

La única y más importante diferencia entre las dos palabras clave 'FOREIGN KEY' y 'REFERENCES' es que ambas hacen que los datos sean datos secundarios de la tabla padre, la "FOREIGN KEY" se usa para crear un nivel de tabla restricción, mientras que la palabra clave REFERENCES se puede usar para crear una restricción de nivel de columna solamente. Las restricciones de nivel de columna solo se pueden crear al crear la tabla solamente. Pero las restricciones a nivel de tabla se pueden agregar usando el comando ALTER TABLE.

1

Una clave externa debe hacer referencia a una clave principal. Al usar la restricción REFERENCES simplemente, no es necesario que la clave referenciada sea una clave principal.

Cuestiones relacionadas