2016-03-21 95 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

一致性是關鍵。

無論您在某個表上使用哪種字段名稱,都要儘量保持其與其他表的一致性,這對重構代碼並需要將新子句應用於多行代碼時會有很大幫助。

使用ALTER TABLE您可以簡單地爲deleted添加一個布爾字段,或者您可以記錄更多數據,如日期/時間甚至用戶。再一次,一致性是關鍵。無論您使用的是什麼字段名稱,都可以在其他表格中保持一致。

然後,您可以創建觸發器來更新刪除字段信息,並取消觸發器中的刪除操作。字段名稱的一致性將在這裏幫助你很大。

0

添加字段deleted_time(用戶等),並添加觸發器來填充刪除和取消刪除記錄上的這些字段。在查詢的添加條件中,deleted_time不爲空。
爲了獲得更好的當前數據性能,您可以創建像Customers_arch這樣的新表,並在刪除時向客戶添加觸發器,從Customer插入行到Customers_arch以及其他字段,如date_time,user等,然後您不需要更改查詢在您現有的應用上。

0

軟刪除增加了數據設計和查詢的複雜性。現在每個查詢都必須記住檢查deleted_at。每個加入也必須檢查deleted_at。這是人們可能會忘記的東西。

如果你不需要它,不要這樣做。取決於你使用的是什麼,滾動備份,將記錄移動到不同的表,或者具有「活動」連接表是更好的設計。

作爲後者的例子,你有一個連接表所示:

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

這似乎是多餘的,但它使關係更加簡單。現在有一個明確的方法來確定誰是活躍的,誰不活躍,查詢active_customers並加入customers。觸發器可以被添加到active_customers以在客戶被激活或停用時更新其他表格。需要活躍客戶的關係可以與active_customers相關聯,並避免必須限定您的連接。