Ответ
Уникальный ключ (первичный ключ, primary key) — это атрибут или минимальный набор атрибутов таблицы, однозначно идентифицирующий каждую её запись (строку). Его значение должно быть уникальным и не равным NULL для всех строк в таблице.
Примеры в iOS-технологиях:
1. Core Data (атрибут с флагом): В модели данных (.xcdatamodeld) для атрибута устанавливается свойство "Primary Key".
// Entity "User" с атрибутом "id" как первичным ключом
@NSManaged public var id: UUID
2. Realm:
import RealmSwift
class User: Object {
@Persisted(primaryKey: true) var _id: ObjectId // Авто-генерируемый
// ИЛИ
@Persisted(primaryKey: true) var userId: String // Пользовательский
}
3. SQLite (прямой запрос):
CREATE TABLE Users (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- Искусственный ключ
email TEXT UNIQUE NOT NULL -- Естественный ключ
);
Зачем он нужен?
- Гарантия уникальности: Исключает дублирование записей.
- Связи между таблицами: Используется как внешний ключ (foreign key) для создания отношений "один-ко-многим".
- Эффективный поиск: Индексируется по умолчанию, что ускоряет операции
SELECT,UPDATE,DELETEпо ключу. - Типы ключей:
- Естественный (Natural): Имеет смысл в предметной области (email, паспорт).
- Суррогатный (Surrogate): Искусственный идентификатор без бизнес-смысла (UUID, автоинкрементное число).
Ответ 18+ 🔞
А, ну, первичный ключ, блядь! Это ж та самая штука, которая не даёт твоей базе данных превратиться в сраное безумное месиво, где всё повторяется и нихуя не понять, где что.
Представь, у тебя таблица с пользователями. И вот сидят там два Васька Пупкина. Какого хуя ты поймёшь, кому из них слать спам, а кого банить? Вот для этого и нужен этот самый ключ — атрибут, который у каждой записи свой, уникальный, и не может быть пустым. Как отпечаток пальца, только для строки в таблице.
Ну, смотри, как это в наших iOS-дебрях выглядит:
1. Core Data (старая, добрая хрень): Там в редакторе модели (.xcdatamodeld) просто тыкаешь галочку «Primary Key» для нужного поля. И всё, пиздец, магия.
// Сущность "User", и у неё есть "id" — наш главный пацан, ключ.
@NSManaged public var id: UUID
2. Realm (модная, быстрая тёлка): Тут вообще красота, прямо в объявлении класса помечаешь.
import RealmSwift
class User: Object {
@Persisted(primaryKey: true) var _id: ObjectId // Случайный, сам родится
// ИЛИ
@Persisted(primaryKey: true) var userId: String // Твой собственный, например, почта
}
3. SQLite (старый, потрёпанный дед, который всё ещё охуенно стреляет): Прям по-старинке, SQL-запросом.
CREATE TABLE Users (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- Суррогатный ключ, сам растёт
email TEXT UNIQUE NOT NULL -- Естественный ключ, типа почта, которая и так уникальна
);
А нахуя вообще этот цирк?
- Чтобы не было дублей, ёпта! Гарантия, что каждая запись — единственная и неповторимая мудя.
- Чтобы таблицы дружили. Этот ключ потом тыкают в другие таблицы как внешний ключ (foreign key), и получаются связи. Один пользователь — много заказов, вот это всё.
- Чтобы искать быстро. Под капотом оно индексируется, и SELECT-ы по нему летают как угорелые.
- Какие они бывают?
- Естественный (Natural): Имеет смысл в жизни. Типа номера паспорта или email. Но если email поменяется — начинается пиздец.
- Суррогатный (Surrogate): Выдуманный, без смысла. Просто цифра, которая сама увеличивается, или UUID. Надёжно, как швейцарские часы, и бизнес-логику не ебёт. Чаще всего юзают именно его, чтобы не париться.