我需要你的智慧,我正在和另一个人辩论什么时候建议将业务规则的代码放入数据库约束或应用程序业务层内部?
有一个特定的字段用于工厂中机器设置的多个计算。今天,我们遇到了一个问题,因为文件维护人员没有指定必填字段,而该字段不知何故未在 ERP 的用户界面中验证。该字段会在计算中导致被零除错误,从而导致 PLC 机器崩溃并停止生产以重新启动 PLC 机器。
因此,我填写了一个文件维护请求,以填充所有值为零的字段,并向数据库管理员提出了第二个请求,要求在数据库中为该字段创建一个约束,以便如果必填字段为 0,则该记录将被拒绝。
DBA 拒绝了我的请求并告诉我验证 UI 或业务逻辑层中的特定字段。我告诉他,即使我这样做,Microsoft Access 中的某个人或任何其他具有正确权限的工具都可以将零分配给特定字段,这将再次停止生产。他回答我:“那又怎样?你希望我将业务逻辑层的所有业务规则重新编程为数据库约束吗?”
之后,我就在想“什么时候把业务规则放到业务应用层,或者放到数据库约束中”这个问题?
谢谢!塞巴斯蒂安
我的 2 美分,虽然我没有这个网站上的许多其他人那么有经验。
如果它与数据完整性有关(无论是从关系的角度还是从标准化格式的角度),那么我坚信它应该由数据库处理。如果只是为了漂亮的展示,那我觉得应该交由展示层来处理。
在您网站的示例中,该值导致计算中除以 0 错误。如果该计算发生在数据库外部,那么我认为此时对数据库中数据的约束是无效的。数据库不需要知道代码用它的值做了什么,代码也不需要知道数据库用它的值做了什么......
简短的回答(同样,在我看来)——数据库应该负责以标准化格式提供干净可靠的数据……这些数据会发生什么取决于请求它的人/代码。