# 建立數據庫
數據庫是任何現代應用的核心。我們要開發的藏書管理程序也不例外。
雖然當今編程有向著[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球隊湖人隊賽程的表格。
該數據庫結構以及表之間的相互關系如下圖所示:

我不去一一解釋各個字段、各個表之間的關聯,只是簡單地說幾句。
這是一個符合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 結語