2016-03-21 2 views
1

У меня есть SQL Server 2014, а для колледжа я хочу реализовать мягкое удаление во всех моих таблицах.Реализация мягкого удаления

SET DATEFORMAT dmy 

CREATE TABLE Customers 
(
    CustomerId int IDENTITY (1,1) not null, 
    FirstName varchar (20) not null, 
    LastName varchar (30) not null, 
    Address1 varchar (30) not null, 
    Address2 varchar (30) not null, 
    Address3 varchar (30) null, 
    Eircode varchar (8) null, 
    DateOfBirth date not null, 
    CountyId int not null, 
    CountryId int not null, 
    AssociationId int null, 
    CustomerTypeId int not null, 
    AccountId int not null 
) 

Я хочу добавить столбец для мягких удалений, используя удаленную. Каков наилучший способ сделать это?

Рекомендуется использовать мягкие удаления (deleted_at) на всей таблице в вашей базе данных, чтобы поддерживать ее целостность.

+0

Вы забыли объявить внешние ключи? – Schwern

ответ

0

Согласование - это ключ.

Независимо от того, какое имя поля вы используете в одной таблице, попробуйте сохранить его в соответствии с другими таблицами, это очень поможет вам при реорганизации кода и необходимости применять новое предложение where ко многим строкам кода.

Используя ALTER TABLE, вы можете просто добавить логическое поле для deleted или вы можете записать гораздо больше данных, таких как дата/время и даже пользователь. Опять же, последовательность является ключевой. Независимо от того, какие имена полей вы используете, сохраните их в соответствии с другими таблицами.

Затем вы можете создать триггеры для обновления информации о поле для удаления, а также отменить удаление из триггера. Согласованность имен полей поможет вам здесь.

0

Добавить поле deleted_time (пользователь и т. Д.) И добавить триггер для заполнения этих полей при удалении и отменить запись удаления. В условие добавления запроса delete_time не равно null.
Для повышения производительности по текущим данным вы можете создать новую таблицу типа «Customers_arch» и добавить триггер для удаления для клиентов, чтобы вставить строку из Клиентов в Customers_arch с дополнительными полями, такими как date_time, user и т. Д., Тогда вам не нужно изменять запрос запроса в существующих приложениях.

0

Soft удаляет сложность конструкции данных и запросов. Каждый запрос теперь должен помнить, чтобы проверить deleted_at. Каждое соединение должно также проверять deleted_at. Это то, что люди, вероятно, забудут.

Если вам это не нужно, не делайте этого. В зависимости от того, для чего вы это используете, перекатывание резервных копий, перемещение записей в другую таблицу или наличие «активной» таблицы соединений - лучший дизайн.

В качестве примера последнего, нужно иметь таблицу соединения следующим образом:

CREATE TABLE active_customers (
    CustomerID INT REFERENCES Customers(CustomerId) 
); 

Это может показаться излишним, но это делает отношения проще. Теперь есть четкий способ определить, кто является активным, а кто нет, запросите active_customers и присоединитесь к customers. Триггеры могут быть добавлены к active_customers для обновления других таблиц, когда клиент активирован или деактивирован. Отношения, которые требуют активного клиента, могут быть связаны с active_customers и не должны квалифицировать ваши объединения.

Смежные вопросы