我需要一些建议来实现业务规则 - 是将其保存在数据库中(使用触发器)还是应用程序代码中。
--- 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)
约束是:“用户只有在他的组织可以访问网站时才能访问该网站。”
现在,在第 1 天我们将 Site1 与 Org1 相关联,然后我们能够将 Site1 与 User1 相关联(User1 属于 Org1)。在第 2 天,我从 ORGSITE 中删除了 Site1 和 Org1 之间的关系(这需要我也从 USERSITE 表中删除相应的 User1 和 Site1 关系)。
这是从应用程序代码中处理的。所以,现在我的问题是我应该在哪里保留上述约束处理 -
方法#1:
在将处理事件的 ORGSITE 表和 USER 表上部署 TRIGGER:
ORGSITE 删除后开启(删除 相应的 USERSITE 记录)
USER 的更新后(如果用户的 更改组织然后删除他的所有 来自 USERSITE 的记录)
方法#2:
在代码中处理一切 - 点击触发这些数据库操作的事件并从 USERSITE 中删除记录(必要时)。需要通过事务管理。
方法#3:
简单地说,在 USERSITE 表中添加一个新字段 OrgSiteId,这是对 ORGSITE 的“自动增量 PK:Id”的 FK 引用。接下来,我将为 USERSITE.OrgSiteId FK 部署级联删除。这将处理大部分事情并使其隐式化!
希望我解释得很好。方法#3 真的有用吗?如果不是,您的偏好是什么?为什么?
感谢您的宝贵时间。
最佳答案
如果您认为有人会直接从数据库运行查询(比如 DBA),那么您应该在触发器中处理它。如果您通过该应用程序进行操作,则必须始终通过该应用程序进行操作。
关于c# - 需要 SQL Server 数据库和应用程序设计级别建议。数据库或应用程序中的约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2139648/