对于数据库来说,允许应用程序始终通过SP执行CRUD操作是最佳做法吗?

Vin*_*Vin 3 database database-design linq-to-sql

我听说过背后的推理,如果其他人认为这是一个最好的做法/好主意,我很好奇.

一个原因是,限制直接访问数据库表,并强制应用程序/用户使用SP(存储过程)执行CRUD操作将允许DBA

  1. 在将SP转移到生产之前批准/审查SP的细粒度控制
  2. 避免开发人员编写的随机查询可能导致服务器负载/其他服务器问题

这意味着开发人员无法在表上编写Linq查询(尽管可能涉及SP的Linq查询)这也意味着开发人员必须忘记编译时检查以及完全控制数据,而主要是使用其他语言( SQL)处理数据.

我并不反对这一点,也不认为这是一个好主意.我很想知道其他人的想法.这种方法的任何其他优点和缺点是什么.

更新:正如托马斯在他的回答中所提到的,我倾向于认为SP是逻辑并且使用"SQL中的数据库编程"来做逻辑是可以的,只要它不是"业务逻辑".业务逻辑需要分离,编译时检查和集成检查点,什么不需要.

Joh*_*yre 7

就个人而言,我从来没有发现过程对于CRUD中的'R'足够灵活.我经常使用观点.但是通过视图和过程访问数据库还允许您抽象出数据库表,为将来的数据模型提供更大的灵活性 ......几乎就像对接口一样.