Согласно npm-cli на github, проблема с npm устарела. Это было исправлено пару недель назад, поэтому вам, вероятно, придется подождать, пока не выйдет следующее обновление npm, чтобы исправить это.
Ссылка: npm устарело исправление
Внешний ключ является полем, которое указывает на первичный ключ другой таблицы.
Пример:
Table Name - Users
UserID UserName UserRoleID
1 JohnD 1
2 CourtneyC 1
3 Benjamin 2
Table Name - UserRoles
UserRoleID Desc
1 Admin
2 Moderator
Вы видите это Пользователи. UserRoleID является внешним ключом, который указывает на первичный ключ на UserRoles. UserRoleID
Использование внешних ключей устанавливает настройку отношения на других простых таблицах, позволяя Вам соединить данные нескольких таблиц хорошим способом:
Пример:
SELECT
a.UserID,
a.UserName,
b.Desc as [UserRole]
FROM
Users a INNER JOIN
UserRoles b ON a.UserRoleID = b.UserRoleID
Вывод затем был бы:
UserID UserName User Role
1 JohnD Admin
2 CourneyC Admin
3 Benjamin Moderator
Скажем, у Вас есть другое поле, которое является родным городом:
id | name | city
-------------------------
1 Alice San Francisco
2 Bob New York
45 Eve New York
988 Bill San Francisco
Теперь, не имеет смысла повторять те же города во многих строках. Это могло привести Вас к опечаткам, чрезмерному использованию пространства, трудности поднять результаты среди других проблем. Таким образом, Вы используете внешний ключ:
id | name | fk_city
-------------------------
1 Alice 1
2 Bob 2
45 Eve 2
988 Bill 1
таблица родного города:
id | name
-------------------------
1 | San Francisco
2 | New York
Надежда это делает вещи более ясными для Вас.:-)
Обновление: о Вашем заключительном вопросе: Да.:-)
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
Внешний ключ указывает от таблицы человека (сначала) к строке во (второй) таблице страны
Внешний ключ является полем что ссылки другая таблица в базе данных. Например, предположите, что у Вас было 2 таблицы, PERSON
и ADDRESS
. Существует поле в PERSON
названный ID
и поле в ADDRESS
названный PERSON_ID
. Вы сделали бы PERSON_ID
обратитесь к PERSON.ID
как внешний ключ. То, что это означает, - то, что у Вас не может быть адреса, который не подключен к человеку, начиная со значения в ADDRESS.PERSON_ID
поле должно существовать в таблице PERSON
.
В реляционной базе данных связь "один ко многим" реализована при наличии дочерней таблицы, ссылаются на идентификатор родительской таблицы. Родительский идентификатор в Дочерней таблице называют Внешним ключом, поскольку это ссылается на первичный ключ другой таблицы.
с помощью примера таблицы предположите, что у Вас есть другая таблица:
cartid | id | itemid
-----------------------
100 1 abc
101 1 cde
в этой таблице первичный ключ является везшим, внешний ключ является идентификатором, который был бы связан с Вашей первой таблицей. у пользователя 1 есть две корзины, каждая корзина, имеющая один объект каждый.
внешний ключ, что Вы используете для соединения двух или больше таблиц, которые имеют сопутствующую информацию друг другу.
Внешний ключ является первичным ключом из другой таблицы, хранимой на Вашей таблице. Скажите, что у Вас есть таблица клиентов и таблица заказов. CustomerId вероятен первичный ключ на клиентской таблице, и OrderId вероятен первичный ключ на таблице порядка. Но на таблице порядка необходимо ли знать клиента для этого порядка, нет? Поэтому необходимо сохранить CustomerId на таблице порядка. В этом случае CustomerId на таблице порядка является внешним ключом.
Я указал бы, что нет никакого требования что первичный ключ (и поэтому внешний ключ) быть отдельным столбцом. Это более просто, уверено. Но я работал над корпоративными системами, где первичный ключ был 11 столбцов длиной, и я уверен, что существуют примеры дольше, чем это. Таким образом, необходимо было знать значение для 11 различных столбцов, прежде чем можно будет однозначно определить строку.
Внешний ключ является столбцом в одной таблице, которая должна однозначно определить что-то в другой таблице. Таким образом значения должны соответствовать первичным ключам в той другой таблице.
Например, если бы у Вас есть таблица студентов, берущих курсы, каждая запись включала бы студенческий идентификатор и идентификатор курса. Это внешние ключи в студенческую таблицу (где существует одна запись для каждого студенческого идентификатора), и таблица курсов (где существует одна запись для каждого идентификатора курса).
Ссылочная целостность означает, что все Ваши внешние ключи на самом деле соответствуют первичным ключам в этих целевых таблицах. Например, все студенческие идентификаторы и идентификаторы курса в Вашей регистрационной таблице соответствуют реальным студенческим идентификаторам и идентификаторам курса.