2011-12-21 2 views
19

Я очень растерялся между этими двумя. Они такие же или разные? Некоторые книги или люди говорят, что они такие же, а другие говорят, что они разные. Я пробовал, но не нашел ответа.
Пожалуйста, ребята, решите его.В чем разница между внешним ключом и ссылочным ключом?

ответ

9

«Справочный ключ» не является нормальным техническим термином в реляционном моделировании или в реализации SQL на английском языке.

Внешний ключ «ссылается» на ключ в другой таблице; может ли это быть причиной путаницы?

5

Вы на самом деле не называть что-то ссылка ключ ... Они одно и то же ... вы можете увидеть слово референции используется, например, в SQLite: вы можете использовать синтаксис, как это, чтобы начать db авторов и книг. Это позволяет показать, что у одного автора может быть много книг. Это говорит о том, что БД books.author_id (определяется несколько строк вверх) ссылается 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

Возможно, вы используете термин «ссылочный ключ» несколько свободно?

Значение внешнего ключа в одной строке называется ссылкой на строку, содержащую соответствующее значение ключа. Обратите внимание, что слово «ссылка» в предыдущем предложении является глаголом, поэтому мы можем сказать, что у нас есть ссылочное значение внешнего ключа и ссылочное значение ключа.

Хотя это ключевые значения, а не ограничение ключевого слова, на которые ссылаются, я предполагаю, что мы говорим, что «ссылочный ключ» означает строки, которые содержат значения, на которые потенциально можно ссылаться. Затем я вижу, как «ссылочный ключ» может стать «ссылочным ключом», но не противоречить его происхождению.

36

Я предполагаю, что вы говорите об использовании REFERENCES, где не используется ключевое слово FOREIGN KEY, например.

author_id INTEGER REFERENCES author(id) 

... вместо ...

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

Ответ, что это просто сокращенная синтаксис то же самое. Основная проблема при изменении между ними должна быть удобочитаемой.

+0

Хотя первый будет работать без включения внешних ключей, а второй - не будет. Второй способ просто не используется? – schwiz

+0

Это также имеет значение, если вы пытаетесь использовать обратную инженерию для создания диаграмм из своей базы данных в MySQL Workbench. Если вы использовали параметр firs при создании своей базы данных, инструмент не сможет создавать соединения между элементами диаграммы. –

2

Внешний ключ «ссылается» на ключ в другой таблице. Этот ключ в другой таблице называется ссылочным ключом. Вероятно, вы узнаете об этом, если используете функцию Graphic на phpmyadmin.

1

Есть 2 способа объявить внешний ключ (ы):

  1. если внешний ключ является единственным атрибутом:
    ЛИТЕРАТУРЫ()

  2. , если внешние ключи представляют собой список атрибуты

FOREIGN KEY() Лит

1

Единственное и самое важное различие между ключевыми словами «FOREIGN KEY» и «REFERENCES» двух ключевых слов заключается в том, что оба они делают данные дочерними данными родительской таблицы, «FOREIGN KEY» используется для создания уровня таблицы , тогда как ключевое слово REFERENCES может использоваться для создания ограничения уровня столбца. Ограничения уровня столбца могут быть созданы только при создании таблицы. Но ограничения уровня таблицы могут быть добавлены с помощью команды ALTER TABLE.

1

Внешний ключ должен ссылается на первичный ключ. При простом использовании ограничения ССЫЛКИ, тогда нет необходимости, чтобы ссылочная клавиша была первичным ключом.