PHP與MySQL學習筆記8:重要概念與設計Web數據庫

一、存儲引擎
MySQL支持許多不一樣的「存儲引擎」,也叫做「表格類型」。每一個表但是使用不一樣的存儲引擎,並且能夠輕鬆地對它們進行轉換。
建立表時能夠選擇一個表格類型:
CREATE TABLE table TYPE = type....
修改表類型:
alter table orders type = innodb;

1)MyISAM,默認類型
它基於傳統的ISAM類型,Indexed Sequential Access Method(有索引的順序訪問方法)的縮寫,它是存儲記錄和文件的標準方法。
MyISAM特色:
MyISAM具備檢查和修復表格的大多數工具,表格能夠被壓縮,支持全文搜索。可是它們不是事務安全的,也不支持外鍵。

2)InnoDB
該類型表是事務安全的,也就是說,它提供了 COMMIT 和 ROLLBACK功能。InnoDB支持外鍵。 雖然比MyISAM表要慢些,可是若是應用程序須要一個事務安全的存儲引擎,建議使用。

注:在大多數Web應用程序中,一般都會使用MyISAM或InnoDB表格或者兩者的結合。

3)MEMORY (之前的 HEAP
該類型表,存儲在內存中,表的索引是哈希分佈的。
MEMORY表格運行速度很是快,可是若是發生崩潰,數據將丟失。
建議:MEMORY表格適合保存臨時或者派生的數據,應該在CREATE TABLE語句中指定MAX_ROWS,不然這些表可能吞噬全部內存。一樣,它們不能加入BLOB、TEXT或AUTO INCREMENT列。

4)MERGE
這些表容許你爲了查詢目的,把MyISAM表的集合做爲一個單個表。所以,你可在某些操做系統中,避開最大文件大小限制。

5)ARCHIVE
這些表保存了大量數據,可是隻有少許腳註(footprint)。這種類型的表只支持INSERT 和SELECT 查詢。不支持DELETE、UPDATE 和 REPLACE。此外,也不使用索引。

6)CSV
這些表保存在服務器的單個文件中,它包含用逗號隔離的數據。
能夠方便地用Excel等第三方工具打開。

建議:
當對一個表格使用大量的SELECT  和 INSERT 語句(或者兩者結合)時,應該使用MyISAM 表格,由於在執行這兩種命令時,MyISAM是最快的。對於不少Web程序(例如分類)來講,MyISAM是最佳選擇。若是須要全文搜索功能,也應該使用MyISAM功能。
當事務很是重要(例如存儲財務數據),或在INSERT 和 SELECT 語句是交錯執行的狀況下(例如在線的消息欄或論壇系統),應該使用 InnoDB。InnoDB在MySQL5.6版本中好像支持全文索引了。

二、事務
事務是確保數據庫一致的機制,尤爲是在發生錯誤或服務器崩潰狀況下確保數據庫一致的機制。
事務是一個或一系列的查詢,這些查詢能夠保證可以在數據庫中做爲一個總體所有執行或者所有不執行。這樣,數據庫才能在不管事務是否完成的狀況下保持一致狀態。
好比,銀行轉帳,好比保證從一個帳戶減小和另外一個帳戶增長的操做完整完成。

ACID原則,就是描述事務安全性的4個需求:
Atomicity(原子性)---一個事務必須是原子性的,它必須是做爲一個總體徹底執行或者徹底不執行。
Consistency(一致性)---一個 事務必須可以使數據庫處於一致的狀態。
Isoltion(孤立性)---未徹底完成的 事務不能被數據庫的其餘用戶所見,也就是說,在事務徹底完成以前,它們都是孤立的。
Durability(持續性)---一旦寫入到數據庫後,事務必須是永久的並且持續的。
注意:一個事務被永久地寫入到數據庫中稱做該事務被提交了。一個沒有寫入到數據庫中的事務(所以數據庫將狀態重置到事務開始以前的狀態)稱做事務被回滾了。

三、關係數據庫
關係數據庫代替普通文件的優勢:
1)關係數據庫比普通文件的數據訪問速度更快。
2)關係數據庫更容易查詢並提取知足特定條件的數據。
3)關係數據庫具備專門的內置機制處理併發訪問。
4)關係數據庫能夠提供對數據的隨機訪問
5)關係數據庫具備內置的權限系統。

四、關係數據庫的一些基本概念
1)關係數據庫由「關係」組成,這些關係一般稱爲「表格」

2)列
「列」又叫作「域」或者「屬性」
每一列都有一個惟一的名稱,和一個相關的數據類型。
3)行
每一行具備相同的格式,也具備相同的屬性。行也叫「記錄」。
4)值
每一個值必須與該列定義的數據類型相同。
5)鍵
咱們必須有一個可以識別每個特定記錄的方法。
表中的標誌列成爲「鍵」或「主鍵」。
數據庫由多個表組成,可使用鍵做爲表格之間的引用。


6)模式
數據庫整套表格的完整設計稱爲數據庫的「模式」。它是數據庫的設計藍圖。
一個模式應該顯示錶格及表格的列、各個表的主鍵和外鍵。
能夠包含示例數據來解析這些數據的含義。


7)關係
關係數據庫中有3種基本的關係類型,一對1、一對多、多對多。

四、設計Web數據庫
知道何時須要一個新表,以及須要哪些鍵,須要掌握很高的技巧。可是在大多數狀況下,咱們能夠遵循一些基本的原則。

1)考慮實際建模的對象,現實世界對應的對象
2)避免冗餘數據
冗餘數據將致使兩個主要問題:
a. 空間的浪費
b. 數據更新的不一致,數據的完整性將被破壞。(修改、插入和刪除時容易致使)
c. 使用原子列值:每一行的每一個屬性只存儲一個數據。
若是咱們想在格子裏存多個數據值,其實至關於建立了一個表中表,這樣系統就不能只計算匹配字段了,而必須分析每一個屬性值,看系統中是否包含一個匹配。因此,看狀況而定吧。
d. 選擇有意義的鍵
e. 考慮須要詢問數據庫的問題,想想咱們但願數據庫回答什麼問題,而後確認數據庫中是否已經包含全部須要的數據,而且在表之間要有適當的關聯。
f. 避免多個空屬性的設計。
數據庫裏有不少空值,很糟糕。首先,浪費空間。其次,在統計列總量或對其餘數值列應用計算函數時可能致使錯誤。還有,當用戶看到表中一部分爲空時。也很迷惑,他們也不知道是否由於該屬性是無關的,仍是數據庫中有錯誤,或者是數據還沒有輸入。

五、表類型總結
1)描述現實世界對象的簡單表
2)描述兩個現實世界對象的多對多關係的關聯表。

六、Web數據庫的架構 數據庫

一般,Web服務器軟件,PHP引擎和數據庫服務器都在同一臺機器上運行。可是數據庫服務器在另一臺機器上運行也很常見,這樣是出於安全性、提升性能以及負載均衡的緣由。
隨着應用程序在大小和複雜度上不斷增長,咱們可能會將PHP應用程序分紅不一樣的層,一般,包括與MySQL交互的數據庫層、包含了應用程序的業務邏輯成、管理HTML輸出的表示層。
相關文章
相關標籤/搜索