我对Oracle和数据库设计一般都很陌生,但我有一个问题。我有两个基本的表叫做员工和部门。 employee表包含salary属性。现在我需要实施一项新的业务规则:一个部门(员工是部门的一部分)的所有员工工资总额不得超过20万。我知道这可以通过物化视图完成,但也可以使用唯一索引来完成吗?如果是这样,人们将如何处理这种特殊情况?
答案 0 :(得分:1)
不,您不能使用唯一索引来强制执行此类规则。
您可以尝试通过触发器强制执行此类规则,但在多用户环境中往往会变得相当困难。您需要执行锁定department
行的操作,以确保一次只能有一个会话修改特定employee
的{{1}}信息,这往往会带来显着的可扩展性的问题。它还倾向于涉及相当多的代码来处理所有潜在的情况。
答案 1 :(得分:0)
这不能用任何索引完成。但可以使用触发器来完成。
如果您在maxDeptSalary
表格中添加了departments
列,那么您可以在Insert
和Update
上创建一个触发器
maxDeptSalary
并获取值Sum
sum + new.value <= maxDeptSalary
但实际情况是,这应该在应用程序级别完成,而不是数据库