我已经开发了一段时间的Web应用程序,我对mySql很满意,事实上,我几乎每天都使用某种形式的SQL。 我喜欢语法,并且在编写查询或优化表时没有问题。 我喜欢这个mysql api。
一直困扰我的是Ruby on Rails使用ActiveRecord并迁移所有内容,因此您可以使用函数来查询数据库。 我想这个想法是你"再也不用看 SQL"。 也许这不是KISS(保持简单愚蠢),但ActiveRecord界面真的是最好的吗?如果是这样,为什么?
无需编写 SQL 语句即可进行开发是否健康? 如果您必须查找尚未定义为 rails 函数的内容怎么办? 我知道他们有一个函数,允许我进行自定义查询。 我想我真的想知道人们认为使用 ActiveRecord 而不是 mySQL 的优势是什么,如果有人像我一样觉得这对 rails 社区来说就像计算器对数学社区一样,有些人可能会忘记如何做长除法。
你说得对,将SQL隐藏在ActiveRecord的层后面意味着人们可能会忘记检查生成的SQL。 我自己也被这个咬了:缺少索引、低效查询等。
ActiveRecord允许的是让简单的事情变得容易:
Post.find(1)
与
SELECT * FROM posts WHERE posts.id = 1
您(开发人员)键入的内容较少,因此出错的机会也较小。
验证是ActiveRecord使另一件事变得容易。 无论如何,您都必须这样做,那么为什么不采取简单的方法呢? 重复的、无聊的部分被抽象出来了吗?
class Post < ActiveRecord::Base
validates_presence_of :title
validates_length_of :title, :maximum => 80
end
与
if params[:post][:title].blank? then
# complain
elsif params[:post][:title].length > 80 then
# complain again
end
同样,易于指定,易于验证。 想要更多验证? 要添加到活动记录模型的单行。 具有多个条件的复杂代码总是更难调试和测试。 为什么不让你轻松呢?
我真正喜欢ActiveRecord而不是SQL的最后一件事是回调。 回调可以使用SQL触发器(仅在MySQL 5.0或更高版本中可用)进行模拟,而ActiveRecord从那时起就有回调(我从0.13开始)。
总结一下:
- 活动记录使简单的事情变得容易;
- 活动记录删除了无聊,重复的部分;
- ActiveRecord不会阻止您编写自己的SQL(通常是出于性能原因),最后;
- ActiveRecord在大多数数据库引擎上是完全可移植的,而SQL本身不是(有时)。
我知道在你的情况下,你是在专门谈论MySQL,但仍然如此。 有选择是很好的。
这里的想法是,通过将数据库逻辑放在活动记录中,您可以在一个地方处理SQL代码,而不是分散在整个应用程序中。这使得应用程序的各个层更容易遵循单一责任原则(对象应该只有一个更改原因)。
下面是一篇关于活动记录模式的文章。
当您决定更改数据库方案时,避免使用 SQL 会有所帮助。抽象对于各种事情也是必要的,比如验证。我并不是说你不会写SQL:如果你觉得需要它,你总是可以这样做。但是您不必编写一个 5 行查询,您只需要 user.save。这是避免不必要的代码的轨道哲学。