2017-01-21 71 views
0

我在我的數據庫中有很多表,但我的問題是有關這兩個表:的Oracle SQL刪除記錄,而不影響子表

ERD

者的definiton是:

Employee (EmployeeID_PK, FirstName, LastName, Email, ...) 
Order (OrderID_PK, EmployeeID_FK, OrderDate, MenuID, ...) 

*_PK = Primary Key 
*_FK = Foreign Key 

現在我想刪除勞動者,使他無法再登錄,但我仍然需要有他的命令和他的屬性(如名字,姓, ...)。

所以數據應該留在表中,但員工不應該能夠再次登錄。

我知道給員工添加一個'isactive'列將是一個解決方案,但我不認爲這是做這件事的最好方法。無論如何,請告訴我,如果這是唯一的方法。

在此先感謝!

+1

如何防止以任何方式在相關記錄到數據庫中的表的內容的用戶?鎖定用戶帳戶與表中的行無關。 – mathguy

回答

-1

正如你所說的一個選項是有一個status列 - 1爲活躍,0爲非活躍,2爲登錄被阻止可能是。

如果你不希望採取這種方法,你可以創建主要和次要表(Employee_ArchiveOrder_Archive具有同等PK和FK約束)的複製和移動數據存在的兩個套。這樣用戶不能再登錄,不會丟失數據並保持完整性。

但是,如果Order表中的數據太多,您可能仍然只有第一種方法 - 添加status列。

+0

所以,你的意思是,如果我想刪除一個僱員,使他無法再登錄,我只能從active_employees表中刪除記錄? – Stjubit

+0

如果存在fk約束,相信您將無法刪除活動員工中的任何條目。因此,您需要將訂單移至歸檔表格。那就是不要刪除,移動數據。而當你搬家時,由於受到限制,你可能不得不移動訂單的數據。這就是爲什麼我說添加狀態列和修改應用程序實現來查找狀態是一個更好的主意。 –

+0

好的,謝謝你的快速回答。我也嘗試過「第二表方法」,但我認爲現在添加isactive列是更好的方法。謝謝 :) – Stjubit

1

這種情況應該是而不是通過修改現有的表(例如,通過在表中添加列或其他)來解決。

相反,這是正好是什麼是「鎖定用戶帳戶」。您可以鎖定用戶的帳戶,以便他或她不能再登錄,但她或他的架構(意味着所有的或他的對象,如表,索引,視圖等)保持原樣。

https://docs.oracle.com/database/121/ADMQS/GUID-6A8D4A59-6DB2-4662-BA4C-05B914D31B4F.htm#ADMQS12042

https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_4003.htm#SQLRF01103