Top.Mail.Ru
Ответы

Зачем нужны primary key и foreign key?

Пожалуйста, объясните самым простым языком и примером, зачем в базе данных нужны primary key и foreign key? Какова их функция? Как она работают?

По дате
По рейтингу
Аватар пользователя
Новичок
6лет

Это основы реляционных БД. Первичный ключ (primary key) нужен для идентификации записей, чтоб отличать одну запись от другой. Первичный ключ гарантирует, что нет двух записей с одинаковым значением ключа. Первичному ключу всегда соответствует индекс. Индекс позволяет быстро искать записи. Поэтому поиск записей по полям первичного ключа происходит быстро.
Внешний ключ (foreign key) гарантирует ссылочную целостность: если запись в дочерней таблице ссылается на запись в главной таблице, то эта запись (в главной таблице) обязана существовать.
Подробности в любой книге по базам данных.

Аватар пользователя
Высший разум
6лет

Ключи это.
Как ключ открывает дверь в огромный дом, так и ключ предоставляет доступ к записи (строке таблицы) нужной. Первичный ключ уникальный, тогда и доступ по ключу только к одной записи. Ключи занимают мало место, так как обычно числа, а сама запись может быть длинными строками, столбов данных разного размера и тд. Ключи можно проиндексировать, то бишь по порядку выставить и ссылки на нужную запись давать. Как индекс в библиотеке быстро поможет найти книгу, так и тут быстро найдет запись.
Внешний ключ есть ключ который ссылается на первичный в другой таблице, чтобы в другой таблице не писать снова ФИО человека, а просто сослаться номером на нужную таблицу. Это гарантирует отсутствие ошибок, да и можно в одном месте хранить факт, в данном случае ФИО и если менять, то меняем в одной записи, а не так, что в бумажном виде везде ваше ФИО и при смене его нужно было-бы всю документацию переделывать, так же как сейчас переделывать надо все документы если вы меняете свое ФИО.
Ну и ссылка тоже быстрая, так как это понятное дело номер числовой обычно. Внешний или вторичный ключ может иметь повторы, допустим у нас справочник типов, так что мы просто в каждой записи можем выбирать нужный тип, но не писать его, что конечно может привести к ошибкам ввода оператора.
Наверное я сложно объяснил, но по сути идея простейшая: порядковый номер в журнале и ссылка по тиму см. п. 1 (а где этот пункт уже не пишут, так и вторичный ключ не говорит конкретно в какой таблице, хотя структура базы конечно эти связи хранит уже в своих служебных таблицах)

Аватар пользователя
Искусственный Интеллект
6лет

а второй ключ связывает эту таблицу с другой.