Какие знаешь виды целостности данных в БД?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Виды целостности данных в БД
Целостность данных — это гарантия, что данные в базе всегда корректны, консистентны и удовлетворяют определенным правилам. Это один из столпов надежности систем обработки данных.
1. Целостность сущности (Entity Integrity)
Entity Integrity гарантирует, что каждая строка в таблице уникальна и может быть однозначно идентифицирована.
Механизмы:
- Primary Key — уникальный идентификатор строки
- NOT NULL constraints на ключевые поля
- UNIQUE constraints для недублирующихся значений
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
private String name;
}
2. Целостность ссылок (Referential Integrity)
Referential Integrity гарантирует, что значения в столбце Foreign Key соответствуют существующим значениям в другой таблице.
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;
private BigDecimal amount;
}
3. Целостность домена (Domain Integrity)
Domain Integrity гарантирует, что значения в столбце соответствуют определенному типу данных, формату и диапазону.
Механизмы:
- Data types (INT, VARCHAR, DATE, DECIMAL)
- CHECK constraints — пользовательские правила
- DEFAULT values
- ENUM перечисления
@Entity
public class Product {
@Id
private Long id;
@Column(nullable = false)
private String name;
@Column(columnDefinition = "DECIMAL(10, 2) CHECK (price > 0)")
private BigDecimal price;
@Column(columnDefinition = "INT CHECK (stock >= 0)")
private Integer stock;
@Enumerated(EnumType.STRING)
private ProductStatus status;
}
4. Целостность ключей (Key Integrity)
Key Integrity гарантирует, что Primary Keys уникальны, а Foreign Keys ссылаются на существующие записи.
5. Пользовательская целостность (User-defined Integrity)
Это правила, определённые бизнес-логикой приложения.
@Service
public class OrderService {
@Transactional
public void createOrder(Long productId, Integer quantity) {
Product product = productRepository.findById(productId)
.orElseThrow();
if (quantity > product.getStock()) {
throw new InsufficientStockException();
}
Order order = new Order(product, quantity);
orderRepository.save(order);
}
}
6. Целостность согласованности (Consistency Integrity)
В контексте транзакций — гарантия ACID свойств.
@Service
public class MoneyTransferService {
@Transactional
public void transfer(Long fromId, Long toId, BigDecimal amount) {
Account from = accountRepository.findById(fromId).orElseThrow();
Account to = accountRepository.findById(toId).orElseThrow();
from.withdraw(amount);
to.deposit(amount);
accountRepository.save(from);
accountRepository.save(to);
}
}
Сравнительная таблица
| Тип целостности | Механизм | Уровень |
|---|---|---|
| Entity Integrity | PK, UNIQUE, NOT NULL | БД |
| Referential Integrity | FK, CASCADE | БД |
| Domain Integrity | Types, CHECK, ENUM | БД |
| Key Integrity | PK, FK | БД |
| User-defined Integrity | Triggers, App Logic | БД + Приложение |
| Consistency Integrity | ACID Transactions | БД |
Best Practices
- Определяй constraints на уровне БД
- Используй FOREIGN KEY с CASCADE
- Всегда проверяй на NULL
- Используй @Transactional для ACID
- Валидируй на входе перед сохранением
Целостность данных — это не опция, а требование для надежных систем.