Ответ
Синтетический (суррогатный) ключ — это технический, не имеющий бизнес-смысла идентификатор (обычно автоинкрементное число или UUID), создаваемый исключительно для уникальной идентификации записи.
Используйте синтетический ключ как основную стратегию, особенно когда:
- Нет подходящего натурального ключа. Большинство сущностей (пользователь, заказ, статья) не имеют неизменяемого уникального бизнес-атрибута.
- Натуральный ключ может измениться. Значения вроде email, номера телефона или паспорта подвержены изменениям.
- Натуральный ключ составной или громоздкий. Ключ из 3-4 полей усложняет JOIN-ы и индексы.
- Требуется максимальная производительность. Целочисленные ключи (
BIGINT) быстрее для сравнения и занимают меньше места, чем строковые, что критично для индексов и внешних ключей. - Работаете с ORM (Hibernate, JPA). ORM-фреймворки оптимизированы для работы с единым суррогатным ключом.
Пример (JPA/Hibernate):
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // Синтетический ключ
@Column(unique = true) // Естественный уникальный ключ, но не первичный
private String email;
private String name;
}
Преимущества:
- Неизменяемость: Значение
idникогда не меняется. - Простота: Одно поле, простой тип.
- Производительность: Оптимально для индексов и связей.
Недостаток: Не несёт смысловой нагрузки, для поиска по бизнес-атрибутам всё равно нужны дополнительные индексы (например, на email).