Ruby on Rails,使用关系数据库简介
之前我们已经成功将web应用请求响应的主流程:从浏览器到控制器-从控制器到视图-从视图到浏览器走通。接下来是时候看看控制器与模型-模型与数据库交互的这个分支上了。
理论上说,MVC架构中本来是没有数据库这个元素的,只不过在世纪项目中模型与数据库总是一起出现的,并且他们之间还有较为紧密的关系。加之大多数情况下数据库还会更先于Model的创建而创建,所以我们先从用于Rails的数据库(模型和数据库谁更先创建的问题不是我们现在关注的重点,不同的设计方式有着不同的侧重点,相关的话题择日再聊)。
Rails为关系数据库的SQL调用提供了较为透明的实现,让我们可以不用书写大量的SQL语句。不过如果对关系数据库有较深的理解的话对开发会是大有裨益的。下面简单介绍一下Rails使用的数据库以及数据库的各个概念与Rails框架各部分的对应关系。
- 数据库:一系列数据库表的集合。一般来说一个Rails应用是和一个数据库相对应的,较为复杂的应用会有与多个数据库交互的情况。一般以小写字母加下划线命名虽然这不是必须的,但这是Rails推荐的方式我们没有必要去违背它。别忘了给数据库赋予足够的访问权限,不通过数据库权限机制而是通过程序限制对数据的访问。
- 数据表:与领域模型对应。表的命名也是使用小写字母加下划线分割,一般来说是一个名词的复数,因为表中存放着这个多个某某东西的记录。比如“users”表就是用来存放所有user对象的。
- 列:与领域模型中的字段对应。比如name,password列与user对象的名称和密码属性对应。
- 行:与领域模型中的对象对应。比如“users”表中的每一行对应一个user对象。
- 关联表:建立数据表与数据表之间的关系,体现领域模型对象与对象之间的关联关系。表与表之间通过外键相互连接建立关系。
- 外键:一个表中的一个列,其中的内容指向了另外一个表中的内容。比如users表中有一个role_id作指向role表中的一条记录。其中role_id的值与role表中的某一个id相同。role_id这个命名是Rails的习惯,写的是表名_表主键。
- 主键:唯一标示某一个记录的字段叫做主键,比如user和role的id字段。引用关系中,被引用的表叫做主表,主表中的键叫做主表中的主键。比如role表中的id列就是被user表引用时的主键。
- 索引:索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容,提高访问性能。
有了这些背景知识,开始建立我们的数据库!