Ответ
При работе с базами данных в Flutter-приложениях (обычно через пакеты вроде sqflite или moor) я сталкиваюсь со следующими видами ключей:
-
Первичный ключ (Primary Key, PK) — уникально идентифицирует каждую запись в таблице. Не может быть
NULL. Вsqfliteчасто реализуется как автоинкрементное полеid.// Пример создания таблицы с первичным ключом в sqflite await db.execute(''' CREATE TABLE Users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL ) '''); -
Внешний ключ (Foreign Key, FK) — создает связь между таблицами, ссылаясь на первичный ключ другой таблицы. Обеспечивает ссылочную целостность.
await db.execute(''' CREATE TABLE Orders ( id INTEGER PRIMARY KEY, user_id INTEGER, FOREIGN KEY (user_id) REFERENCES Users(id) ) '''); -
Уникальный ключ (Unique Key) — гарантирует, что все значения в столбце (или комбинации столбцов) уникальны. В отличие от PK, допускает одно значение
NULL.await db.execute(''' CREATE TABLE Products ( id INTEGER PRIMARY KEY, sku TEXT UNIQUE ) '''); -
Составной ключ (Composite Key) — первичный ключ, состоящий из двух или более столбцов. Используется, когда уникальность определяется их комбинацией.
await db.execute(''' CREATE TABLE OrderItems ( order_id INTEGER, product_id INTEGER, quantity INTEGER, PRIMARY KEY (order_id, product_id) ) '''); -
Суррогатный ключ — искусственный, не несущий бизнес-смысла ключ (например, автоинкрементный
id). Чаще всего используется в Flutter-приложениях. -
Естественный ключ — первичный ключ на основе реальных бизнес-данных (например, email или номер паспорта). На практике в мобильных приложениях используется реже из-за возможных изменений этих данных.
Ключи критически важны для построения связей между данными, обеспечения целостности и оптимизации запросов через индексы.