1 of 9

資料庫索引、外鍵和DAO實作

Jimmy

2 of 9

B tree�

平衡二元搜尋樹

B tree

4KB

  • 每個節點內最多有 m - 1 個內部節點。
  • 每個節點最多有 m 個子樹。
  • 每個內部節點都有儲放完整資料。
  • 每個節點內的內部節點,都是依順序排序。

資料放在硬碟裡會導致I/O問題

在一個節點內,多塞些東西,為了減少 i/o 讀取次數

3 of 9

B+ tree ( InnoDB )�

  • 只有最下面的節點有資料,其它上面的節點只存索引

  • 層級更少
  • 查詢更穩定
  • 自帶排序

4 of 9

索引 (index)

  • 普通索引 �(CREATE INDEX <indexname> ON tablename)�
  • 唯一性索引 (主鍵)�(CREATE UNIQUE INDEX <indexname> ON tablename)�
  • 全文索引�
  • 單列索引 & 多列索引

5 of 9

單列索引 & 多列索引

select * from student

where first_name = 'Paul'

and last_name = 'George'

and age = 18

ALTER TABLE student ADD INDEX fname_lname_age (first_name,last_name,age)

6 of 9

最左字首 Leftmost Prefixing

  • where first_name = XX and last_name = XX and age = XX

  • where first_name = XX and last_name = XX

  • where first_name = XX

7 of 9

外鍵

  • 用來確定資料的參考完整性,也是一種table之間的約束

customer => PK: id

order=> FK: customer_id ( 確保有這個 customer 才可以新增這筆訂單 )

  • 級聯操作�ON UPDATE 、 ON DELETE
    • CASCADE (子表產生連鎖更新動作)
    • RESTRICT(禁止主表變更) *default
    • SET NULL(子表相應欄位設定為空)

可以利用�show create table <tablename>�看到現在外鍵的狀態

8 of 9

DAO (Data Access Object)

  • MVC => Model
  • 抽象介面的物件
  • 封裝需要與 DB 溝通以及整理撈出後的資料的邏輯
  • 提供應用程式一個存取資料的介面,但應用程式不須知道DAO內部的工作細節

9 of 9

/dao/products.js