← Назад к вопросам

Какие знаешь виды целостности данных в БД?

1.0 Junior🔥 141 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды целостности данных в БД

Целостность данных — это гарантия, что данные в базе всегда корректны, консистентны и удовлетворяют определенным правилам. Это один из столпов надежности систем обработки данных.

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 IntegrityPK, UNIQUE, NOT NULLБД
Referential IntegrityFK, CASCADEБД
Domain IntegrityTypes, CHECK, ENUMБД
Key IntegrityPK, FKБД
User-defined IntegrityTriggers, App LogicБД + Приложение
Consistency IntegrityACID TransactionsБД

Best Practices

  1. Определяй constraints на уровне БД
  2. Используй FOREIGN KEY с CASCADE
  3. Всегда проверяй на NULL
  4. Используй @Transactional для ACID
  5. Валидируй на входе перед сохранением

Целостность данных — это не опция, а требование для надежных систем.

Какие знаешь виды целостности данных в БД? | PrepBro