Oracle SQL 删除记录不影响子表

Oracle SQL Delete Record without affecting child tables

我的数据库中有很多表,但我的问题与这两个表有关:

.

它们的定义是:

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

*_PK = Primary Key
*_FK = Foreign Key

现在我想删除一个员工,这样他就不能再登录了,但我仍然需要他的订单和他的属性(比如名字、姓氏、.. .).

所以数据应该保留在表中,但员工应该不能再登录了。

我知道向 Employee 添加一列 'isactive' 是一种解决方案,但我认为这不是执行此操作的最佳方法。无论如何请告诉我,如果这是唯一的方法。

提前致谢!

正如您所说,一个选项是有一个 status 列 - 1 表示活动,0 表示不活动,2 表示登录被阻止。

如果您不想采用这种方法,您可以创建主要和次要 tables 的副本(Employee_ArchiveOrder_Archive 具有等效的 pk 和 fk 约束) 并将两组数据移到那里。这样用户就无法再登录,不会丢失任何数据并保留完整性。

但是,如果 Order table 中的数据太多,您可能仍然只剩下第一种方法 - 添加 status 列。

这种情况应该通过修改现有表(例如,通过向表添加列或其他方式)来解决。

相反,这 正是 "locking user accounts" 的用途。您可以锁定用户的帐户,因此她或他无法再登录,但她或他的架构(意味着她或他的所有对象,例如表、索引、视图等)保持原样。

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