К чему применяется ограничение unique
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Ограничение UNIQUE в базах данных
Ограничение UNIQUE — это правило целостности данных, которое гарантирует, что все значения в указанном столбце (или группе столбцов) уникальны. Иными словами, в этом столбце не может быть двух одинаковых значений.
Основное применение
Ограничение UNIQUE применяется для обеспечения уникальности данных в полях, которые не являются первичным ключом, но должны содержать только уникальные значения:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) UNIQUE NOT NULL,
username VARCHAR(100) UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
В этом примере каждый пользователь должен иметь уникальный email и username.
Различие между PRIMARY KEY и UNIQUE
PRIMARY KEY:
- Однозначно идентифицирует строку
- Не может быть NULL
- Может быть только один на таблицу
- Автоматически индексируется
UNIQUE:
- Гарантирует уникальность значений
- Может содержать NULL (и обычно может быть несколько NULL значений)
- Может быть несколько ограничений на таблицу
- Также автоматически индексируется для оптимизации поиска
Примеры применения
1. Email как уникальное поле
CREATE TABLE accounts (
id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(100)
);
-- Эта операция вызовет ошибку (дублирование email)
INSERT INTO accounts VALUES (1, "user@example.com", "John");
INSERT INTO accounts VALUES (2, "user@example.com", "Jane"); -- Ошибка!
2. Составной UNIQUE ключ (несколько столбцов)
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
product_id INT,
order_date DATE,
UNIQUE(customer_id, product_id) -- Один покупатель не может заказать один товар дважды
);
3. Альтернативный ключ (Alternative Key)
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
passport_number VARCHAR(20) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE,
name VARCHAR(100)
);
-- employee_id - первичный ключ
-- passport_number и email - альтернативные ключи
Применение в Java с JPA/Hibernate
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String email;
@Column(unique = true)
private String username;
private String password;
}
Практическое применение
- Email адреса — в системах регистрации
- Имена пользователей — username, nickname
- Номера телефонов — уникальные контактные данные
- Номера паспортов — государственные идентификаторы
- SKU товаров — уникальные коды в каталоге
- UUID — уникальные идентификаторы в распределённых системах
- Серийные номера — для оборудования, продуктов
Обработка нарушений ограничения
try {
User user = new User();
user.setEmail("duplicate@example.com");
userRepository.save(user); // Может выбросить DataIntegrityViolationException
} catch (DataIntegrityViolationException e) {
System.out.println("Email уже зарегистрирован");
}
Ограничение UNIQUE — это важный механизм обеспечения целостности и качества данных в базе, предотвращающий дублирование и обеспечивающий логическую корректность информации.