Ing*_*ngo 0 ruby sql ruby-on-rails
很久以前我学过sql,在应用程序开发的最后几年里,我意识到我很少真正使用真正的sql控制台或sql命令,特别是因为我现在主要使用rails应用程序一段时间了.
但是现在我正在努力获得一些微软认证,所以为此我最终还是从头开始重新学习sql.因此,有许多事情浮现在脑海中 - 我不得不承认 - 这些年来我已经忘记了.是的,从开发人员的角度来看,sql很重要,但不知怎的,我不需要太多...就像存储过程,函数,触发器等...
虽然我已经从Nasir找到了一个关于使用Rails中的视图的好博客,但我仍然想知道我是否可以使用
在Rails中.
触发器:当然我不需要在rails应用程序中定义触发器.我会直接在数据库管理控制台上创建它们.我只需要记住"自动"完成的事情.我想将这些用于记录目的或快速访问表的预计算......
功能:我认为它们应该易于使用.是否可以通过ActiveRecord的'select'方法添加它们?
存储过程:如何使用Rails中的那些,我的意思是,如果您有多个具有多个连接和基于计算的依赖关系的复杂查询,它们可能很有价值.我想知道a)如何调用一个和b)如何接收结果
好吧,如果你对Rails与sql相关的内部工作方式有更深入的了解,并且可以指出这些本机sql-elements是否适用于Rails应用程序,那么如果你能指出一些Howto's,Tutorials那将是很可爱的.
我想知道的另一件事是使用外键.Rails没有在sql端显式使用它们...将它们手动添加到数据库关系是否有用/有用?或者他们会阻碍Rails的数据访问?
感谢任何回复,我很想知道我可以在Rails和Sql之间做些什么来以更有效的方式组合它们.
正如您将注意到的那样,并提到自己:rails可以很好地隐藏大部分sql /实现细节.
不过,我认为明智地使用你的sql和数据库是非常重要的.
应尽可能在数据库中定义验证,而不仅仅是在rails中.您可以在Rails中定义它,以便在需要时提供良好的用户反馈.但最终你不知道数据如何进入数据库:一些操作员可以使用sql,也许其他程序可以与数据库连接,或者更频繁:两个rails进程几乎可以同时插入数据.
绝对应该在您的数据库上定义.对于rails不需要,它将正确编写查询,但这将保护您的数据库免受错误数据的影响.这将保护您的数据完整性.如果有人删除了一条记录而另一条记录仍然指向该记录,那么您的数据库会抱怨.
这更容易被忽视:创建索引!在主键上(自动),name在外键字段上搜索很多字段(如),!!
尽管rails在检索项目时可以帮助您,但对于某些查询,自己编写查询会更有效.虽然我会尽可能地避免它,但它find_by_sql是一个强大的工具.
并且rails非常强大/有助于将结果find_by_sql视为正常结果.
通常在使用导轨时不需要它们.但是有一些非常有效的案例,它们非常有用.例如,我创建了一个地理信息系统,我们使用存储过程来创建各种空间对象.在rails中你可以直接用sql执行sql
YourModel.connection.execute(' .. your sql here .. ')
Run Code Online (Sandbox Code Playgroud)
所以即使执行存储过程.它并不适合所有人,但有一些非常有效的理由将工作转移到数据库.例如,如果必须对大量表或行执行操作,则调用存储过程而不是检索所有数据,更改行并将其保存回来可能非常有效.这取决于你手头的问题.
我想绝对清楚地知道Rails很好地抽象了数据库,而且对于日常使用来说这很棒.您应该在数据库上定义外键,索引和约束.对于像函数,存储过程,复杂的查询更先进的东西:Rails会不从,如果需要做复杂的事情阻止你.人们应该像Rails一样将您的数据库视为一种工具.但要记住:
过早优化是万恶之源. - 唐纳德克努特
因此可以使用这些选项,但只有在必要时才使用它们.