Ответ
Синтетический (суррогатный) ключ (Surrogate Key) — это искусственно созданный, не имеющий бизнес-смысла уникальный идентификатор записи в таблице. Его значение генерируется системой (например, последовательностью или автоинкрементом) и не связано с данными объекта.
Противоположность — естественный ключ (Natural Key), который формируется из атрибутов предметной области (например, номер паспорта, email).
Пример синтетического ключа в Java (JPA/Hibernate):
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // Автоинкремент в БД
private Long id; // Синтетический ключ
@Column(unique = true)
private String email; // Бизнес-идентификатор (естественный ключ)
private String name;
// ...
}
Преимущества синтетических ключей:
- Стабильность: Не изменяется при эволюции бизнес-правил (в отличие от email или паспорта).
- Простота: Обычно это одно целочисленное поле, что эффективно для индексов и соединений (JOIN).
- Конфиденциальность: Не раскрывает бизнес-информацию в URL или API (в отличие от использования email как ID).
- Универсальность: Все сущности могут иметь ключ одного типа (
BIGINT,UUID).
Недостатки:
- Требует дополнительного поля и индекса.
- Не гарантирует уникальность бизнес-данных (нужны дополнительные ограничения
UNIQUEна поля вродеemail). - Может быть менее интуитивным при ручном анализе данных.
Распространенные типы: автоинкрементные числа (SERIAL, AUTO_INCREMENT), UUID, последовательности (Sequence).