Дед Мазай
Гений
(58129)
6 лет назад
Это основы реляционных БД. Первичный ключ (primary key) нужен для идентификации записей, чтоб отличать одну запись от другой. Первичный ключ гарантирует, что нет двух записей с одинаковым значением ключа. Первичному ключу всегда соответствует индекс. Индекс позволяет быстро искать записи. Поэтому поиск записей по полям первичного ключа происходит быстро.
Внешний ключ (foreign key) гарантирует ссылочную целостность: если запись в дочерней таблице ссылается на запись в главной таблице, то эта запись (в главной таблице) обязана существовать.
Подробности в любой книге по базам данных.
kaiu
Высший разум
(120172)
6 лет назад
Ключи это.
Как ключ открывает дверь в огромный дом, так и ключ предоставляет доступ к записи (строке таблицы) нужной. Первичный ключ уникальный, тогда и доступ по ключу только к одной записи. Ключи занимают мало место, так как обычно числа, а сама запись может быть длинными строками, столбов данных разного размера и тд. Ключи можно проиндексировать, то бишь по порядку выставить и ссылки на нужную запись давать. Как индекс в библиотеке быстро поможет найти книгу, так и тут быстро найдет запись.
Внешний ключ есть ключ который ссылается на первичный в другой таблице, чтобы в другой таблице не писать снова ФИО человека, а просто сослаться номером на нужную таблицу. Это гарантирует отсутствие ошибок, да и можно в одном месте хранить факт, в данном случае ФИО и если менять, то меняем в одной записи, а не так, что в бумажном виде везде ваше ФИО и при смене его нужно было-бы всю документацию переделывать, так же как сейчас переделывать надо все документы если вы меняете свое ФИО.
Ну и ссылка тоже быстрая, так как это понятное дело номер числовой обычно. Внешний или вторичный ключ может иметь повторы, допустим у нас справочник типов, так что мы просто в каждой записи можем выбирать нужный тип, но не писать его, что конечно может привести к ошибкам ввода оператора.
Наверное я сложно объяснил, но по сути идея простейшая: порядковый номер в журнале и ссылка по тиму см. п. 1 (а где этот пункт уже не пишут, так и вторичный ключ не говорит конкретно в какой таблице, хотя структура базы конечно эти связи хранит уже в своих служебных таблицах)