Что такое целостность данных?sql-92

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

Основные виды целостности данных

1. Физическая целостность

  • Защита от аппаратных сбоев
  • Обеспечивается:
    • Механизмами транзакций (ACID)
    • Журналированием изменений
    • Регулярными бэкапами
    

2. Логическая целостность

  • Соблюдение бизнес-правил
  • Реализуется через:

a) Объектную целостность

PRIMARY KEY (NOT NULL + UNIQUE)

Пример:

CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY
)

b) Референциальную целостность

FOREIGN KEY REFERENCES

Пример:

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT REFERENCES Customers(CustomerID)
)

c) Доменная целостность

CHECK, DEFAULT, NOT NULL

Пример:

CREATE TABLE Products (
    Price DECIMAL(10,2) CHECK (Price > 0),
    Category VARCHAR(20) DEFAULT 'Other'
)

d) Пользовательская целостность

  • Сложные бизнес-правила
  • Реализуется через:
    • Хранимые процедуры
    • Триггеры
    • Пользовательские функции
    

Механизмы обеспечения целостности

  1. Декларативные ограничения (оптимальный выбор):

    ALTER TABLE Employees
    ADD CONSTRAINT CHK_Salary
    CHECK (Salary >= MinimumWage)
    
  2. Триггеры (для сложных сценариев):

    CREATE TRIGGER CheckInventory
    ON Orders AFTER INSERT
    AS
    BEGIN
        IF EXISTS (SELECT * FROM inserted i
                   JOIN Products p ON i.ProductID = p.ProductID
                   WHERE i.Quantity > p.Stock)
        BEGIN
            RAISERROR('Недостаточно товара на складе', 16, 1)
            ROLLBACK TRANSACTION
        END
    END
    
  3. Транзакции (атомарность изменений):

    BEGIN TRANSACTION
    BEGIN TRY
        UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 1
        UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 2
        COMMIT TRANSACTION
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION
    END CATCH
    

Уровни обеспечения целостности

  1. Уровень столбца:

    • Типы данных
    • NOT NULL
    • CHECK
  2. Уровень таблицы:

    • PRIMARY KEY
    • UNIQUE
    • Триггеры
  3. Уровень базы данных:

    • FOREIGN KEY
    • Хранимые процедуры
    • Межтабличные CHECK-ограничения
  4. Уровень приложения:

    • Валидация перед вставкой
    • Бизнес-логика

Проектирование для целостности

  1. Нормализация:

    • Устранение аномалий
    • Минимизация дублирования
  2. Денормализация (осознанная):

    • Для производительности
    • С сохранением контроля целостности
  3. Аудит изменений:

    CREATE TABLE AuditLog (
        ChangeID INT IDENTITY,
        TableName VARCHAR(100),
        ChangeType CHAR(1),
        ChangeDate DATETIME DEFAULT GETDATE()
    )
    

Резюмируем

Целостность данных — это комплексный подход к проектированию и обслуживанию базы данных, обеспечивающий её надежность и соответствие бизнес-правилам. Грамотное использование ограничений, транзакций и архитектурных решений позволяет создать систему, в которой данные остаются точными и непротиворечивыми при любых операциях. Профессиональные разработчики уделяют целостности данных первостепенное внимание, так как это фундамент стабильной работы любой информационной системы.