# 建立数据库
数据库是任何现代应用的核心。我们要开发的藏书管理程序也不例外。
虽然当今编程有向着[TDD](http://en.wikipedia.org/wiki/Test-driven_development),[DDD](http://en.wikipedia.org/wiki/Domain-driven_design)导向的趋势,但是在我们这个程序中,我们还是遵循最传统的从数据模型出发的流程。
如果我们去浏览Symfony 的官方文档,会发现SF3使用的是从实体(Entity)到数据库(Database)的流程。但是我们这个教程遵照的是一个完全不同的方向:所有数据的来源都是通过RESTful API提供的。换句话说,所有牵涉到数据库的操作都在另外一个应用中实现。关于这个RESTful API的实现,请参见我的另外一个教程[《用Silex开发一个RESTful API》](https://www.gitbook.com/book/taylorr/-silex-restful-api/welcome)中的讲解。
尽管如此,数据库还是整个应用的核心——即使在我们这个应用中不直接对其进行操作。
笔者已经将本应用使用到的数据库的结构SQL语句上传到了本书对应的Github仓库,请下载[该文件](https://github.com/taylorren/symfony/blob/master/sql/rsywx.sql),并在你的开发环境中创建该数据库。
注意:在本文中的写作中,笔者使用的开发机已经有了一个名为`rsywx`的数据库——这是我生产环境使用的数据库的一个本地备份。所以,用于在笔者的开发环境中真正使用的数据库会是`rsywx_tutorial`。不过这不影响本教程的正常使用。读者可以使用`rsywx`也可以用自己喜欢的名字来命名这个数据库。
## 数据库结构
`rsywx`数据库包括了若干表格。从功能来看,有收录书籍信息(以及书籍出版社、购买地点、Tag)的表格,收录书籍评论的表格以及书籍访问记录的表格,还有一个记录我最喜欢的NBA球队湖人队赛程的表格。
该数据库结构以及表之间的相互关系如下图所示:
![](https://box.kancloud.cn/574e0507a98a48ebe9cfcc31157ec7f3_804x705.png)
我不去一一解释各个字段、各个表之间的关联,只是简单地说几句。
这是一个符合3NF的数据库。以`book_book`为核心,其他表格(除`lakers`)之外,都直接或间接地和该表有关联。
`book_visit`用来记录书籍详情页面被访问的情况。目前我只是简单地记录了书籍、访问时间。这些数据会在后台管理中用作各类统计。
这肯定不是一个完美的数据库设计。读者可以根据自己的需求加以改进和修订。
## 数据库用户
一般来说,用`root`来操作数据库总不是一个很好的做法。在开发过程中也许可以出于简单化的考虑,我们可以先用`root`,但是在生产环境这样做是不推荐的——除非你对`root`的密码有充分信心。
我们可以借助相应的工具来创建一个新的用户,只给他相应的CRUD权限或者其它必要的权限。有关数据库用户创建和权限分配的操作,可以参见相应的文档。
在本文中,我们使用的用户和密码是:`tr/trtrtr`。这不是一个很好的用户/密码组合,不过只是作为开发和演示而已。
## 修改数据库配置
SF应用中数据库配置保存在`app\config\parameters.yml`中。我们在安装SF、创建项目时可以制定数据库的连接,也可以在稍后手工修改。
~~~
# This file is auto-generated during the composer install
parameters:
database_host: 127.0.0.1
database_port: null
database_name: rsywx_tutorial
database_user: tr
database_password: trtrtr
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: null
mailer_password: null
secret: ThisTokenIsNotSoSecretChangeIt
~~~
我这里已经将使用到的数据库、用户、密码进行了更新。
这个文件也可以被当成“配置”文件,存放一些供整个应用使用的“全局”变量。我们会在后面的章节看到更详细的介绍。
- 引言
- 1 LAMP
- 1.1 安装虚拟机
- 1.2 安装Vagrant
- 1.3 安装Ubuntu
- 1.4 安装Apache 2
- 1.5 安装PHP
- 1.6 安装MySQL服务器
- 1.7 最后的微调
- 1.8 设置一个虚拟主机
- 1.9 一个趁手的IDE
- 2 Symfony 3和重要构件
- 2.1 Symfony 3
- 2.2 Doctrine
- 2.3 Twig
- 2.4 Composer
- 3 Symfony重要概念
- 3.1 MVC
- 3.2 Bundle/包
- 3.3 Route/路由
- 3.4 Controller/控制器
- 3.5 Entity/实体
- 3.6 Repository/仓库
- 3.7 Template/模板
- 3.8 Test/测试
- 4 藏书管理程序的结构
- 5 创建应用
- 5.1 建立版本管理
- 5.2 建立数据库
- 5.3 应用结构
- 5.4 建立数据库实体
- 5.5 样本数据
- 5.6 路由
- 5.7 模板
- 5.8 开始编写首页
- 5.9 书籍详情页面
- 5.10 书籍列表页面
- 5.11 书籍搜索
- 6 用户和后台
- 7 结语