我正在编写一些存储过程来创建表和添加数据.其中一个字段是指示百分比的列.该值应为0-100.我开始想,"这方面的数据验证应该在哪里进行?一般来说,数据验证应该在哪里进行?是逐案进行的吗?"

我突然想到,虽然今天我决定0-100是百分比值的有效值,但明天我可能会决定任何正值都是有效的.所以这可能是一条商业规则,不是吗?业务规则是否应该在数据库级别实现?

只是想寻求指导,我们这里已经没有dba了.

推荐答案

通常,我会在多个地方进行验证:

  1. 客户端使用ASPX页面上的验证器
  2. 后台代码中的服务器端验证

我使用数据库验证作为最后手段,因为数据库旅行通常比上面讨论的两个验证更昂贵.

我绝对不是说"不要将验证放入数据库",但我会说,不要让它成为您放置验证的唯一位置.

如果您的数据由多个应用程序使用,那么最合适的位置应该是由多个应用程序使用(应该)的中间层.

当您开始根据业务规则考虑整个应用程序时,您在业务规则方面的要求将呈现出完全不同的维度.如果验证的问题足够小,那么就在各个地方进行验证,而不是构建一个集中的业务规则系统.如果它是一个相当大的系统,那么你可以为它研究一个业务规则引擎.

Database相关问答推荐

为什么postgres枚举需要4个字节?

我们可以出于不同目的在同一 postgres 数据库上同时进行物理和逻辑复制吗?

[mongodb],如何通过聚合获得具有许多不同字段的文档的最大值?子字段名称相同

MySQL FIND_IN_SET 的对面

用于存储人与聊天消息的数据库设计

PostgreSQL WHERE IN LIKE 查询

Android:我可以对多个数据库文件使用一个 SQLiteOpenHelper 类吗?

MySQL 慢查询日志(log) - 慢有多慢?

无法使用命令行运行 liquibase

按纬度/经度进行半径搜索

如何识别 DB2 端口号

如何在 VS 2012 的 SQL Server 数据库项目中存储静态数据

将 `tsv` 文件插入 postgresql 数据库

使用varchar作为主键?

单父实体的核心数据性能

获取错误函数 to_date(timestamp without time zone, unknown) 不存在

如果表不存在,如何使用 Derby Db 创建表

为 PHPMyadmin DB 自动生成数据库图?

Rails 控制台 - 查找在某天创建的位置

数据库效率 - 每个用户的表与用户表