Что такое первичный и внешний ключ в базе данных?
Часто встречаю «primary key» и «foreign key», но не понимаю разницу и зачем они нужны. Объясните на таблицах users и orders, пожалуйста.
2 ответа
Простыми словами:
Первичный ключ (PRIMARY KEY) — столбец, который уникально определяет строку. У каждого пользователя свой id, двух одинаковых нет, и он не может быть NULL. По нему ты однозначно находишь конкретную запись.
Внешний ключ (FOREIGN KEY) — столбец, который ссылается на первичный ключ другой таблицы. В orders поле user_id ссылается на users.id — так заказ «знает», чей он.
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
user_id INTEGER REFERENCES users(id), -- внешний ключ
amount NUMERIC
);
Зачем FK: база сама не даст создать заказ с несуществующим user_id и (по настройке) не даст удалить юзера, у которого есть заказы. Это защищает данные от рассинхрона.
PK — уникальный идентификатор строки в своей таблице. FK — ссылка на PK другой таблицы.