我需要一些建议来实现一个业务规则-是将它保存在db(使用触发器)中还是应用程序代码中。

--- Table structure:---

# ORG - Master table for Organizations
# USER - Master table for Users (each user belongs to an Org so there's a field OrgId which is FK ro ORG)
# SITE - Master table for Sites

# ORGSITE - {OrgId, SiteId} links Site(s) with Org(s)
# USERSITE - {UserId, SiteId} links Site(s) with User(s)

约束条件是:“只有当用户的组织可以访问站点时,用户才能访问该站点。”
现在,在应用程序中,我们在第一天将site1关联到org1,然后我们就可以将site1关联到user1(user1属于org1)。在第2天,我从orgsite中删除site1和org1之间的关系(这要求我也从usersite表中删除相应的user1和site1关系)。
这是在应用程序代码中处理的。所以,现在我的问题是,我在哪里保持上述约束处理-
方法1:
在ORGSITE表和USER表上部署触发器,用于处理以下活动:
在为OrgSite删除后打开(删除
相应的用户站点记录)
用户更新后(如果用户
组织已更改,然后删除所有HIS
来自用户站点的记录)
方法2:
处理代码中的所有内容—点击触发这些DB操作的事件并从用户站点删除记录(必要时)。需要通过交易进行管理。
方法3:
简单地说,在usersite表中添加一个新字段orgsite id,它是对orgsite的“auto increment pk:id”的fk引用。接下来,我将为usersite.orgsiteid fk部署级联删除。这将处理大多数事情,使它含蓄!
希望我能解释清楚。方法3真的有用吗?如果没有-你的偏好是什么?为什么?
谢谢你抽出时间。

最佳答案

如果您认为有人会直接从数据库(比如DBA)运行查询,那么您应该在触发器中处理它。如果你是通过应用来完成的,你必须始终通过应用来完成。

10-06 12:41
查看更多