iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 2
1
Software Development

30天開發與部署 Laravel 專案系列 第 2

事前規劃(2) 資料庫規劃

前言

資料庫規劃與設計標準眾多,也有許多方法論討論如何規劃一個完整資料庫開發生命週期。
例如常見的ACID : 基元性(atomicity)、一致性(consistency)隔離性(isolation)、持續性(durability)等等。

這次專案使用關聯式資料庫(Relational Database Management System,縮寫為RDBMS)提供討論資料庫的 CRUD 基本功能(create / read / update / detele )。
藉由資料表正規化,加上 dbdiagram 規劃初步實現上一篇(functional map)所需欄位,也是在開發前先確認功能所需欄位並可加以調整。

資料庫正規化(database normalization)

目的

(A) 降低資料重複性
(B) 避免資料更新的異常

第一正規化(1NF)

定義:在一個資料表內,所屬欄位的內容都是單元值(Atomic Value),則稱該資料表滿足 1NF。
白話:每個欄位都是最小單元,不可再分割

第二正規化(2NF)

定義:一個資料表,除了符合第一正規化特性外,所有主鍵以外的欄位都必須與主鍵功能相依,則稱該資料表滿足 2NF。

白話:每張表的所有欄位須與主鍵之間存有功能性相依性

第三正規化(3NF)

定義:一個資料表,除了符合第二正規化特性外,所有主鍵以外的欄位都僅能與主鍵功能相依,且沒有與其它欄位相依,則稱該資料表滿足 3NF。

白話:所有欄位除了功能性相依於主鍵之外,與其它欄位不能有相依特性存在

線上資料庫設計工具:dbdiagram.io

這套線上工具可以簡單快速地設計並定義資料表,並顯示資料庫關係圖(database relationship diagram)。
雖然語法是DSL,不過官方有提供範例可以快速上手,e.g. foregin key 、auto increment、 default 等等。

以這次專案範疇的為例,可以快速建立使用者資料表(user)、生理紀錄(bio_profile)、飲水紀錄表(user_water)、飲食紀錄表(user_diet)

https://ithelp.ithome.com.tw/upload/images/20200916/20125263mXL3w97V6w.png

雖然距離完整的實體關聯圖還略顯不足,但可以讓Backend RD之間、甚至Backend與Frondend討論或是往上拉置技術與業務討論時,都可以紀錄每一個功能頁面可能需要提供哪些資料庫欄位。

個人秉持多用圖示,就能少用文字說明的原則來進行討論。
熟悉這套工具之後,一樣能快速跟夥伴們線上分享/討論、即時修正調整命名方式等等。

還可以產生MySQL指令,快速建立資料庫各種環境!!!
有沒有看到網頁上有個「Export」

https://ithelp.ithome.com.tw/upload/images/20200916/20125263L39eHhPJY7.png

輸出後可看到 dbdiagram.io 已經幫忙轉譯為基本的資料表設計MySQL語法。

https://ithelp.ithome.com.tw/upload/images/20200916/20125263d5ckyAGAHS.png

(驚不驚喜、意不意外)

雖然進入Laravel框架後,會有其他快速建立資料庫的方式。

但未使用Laravel、想用PHP原生、或是其他框架(e.g. Codeigniter)等,能夠再討論資料庫初期就能快速建立一個基本的開發用資料庫,私心認為 dbdiagram.io 是一套好用的工具,而且它也是免費的。(免費仔又上身)。

參考資料
https://dbdiagram.io
https://zh.wikipedia.org/wiki/ACID
https://en.wikipedia.org/wiki/Database_normalization
https://progressbar.tw/posts/265
https://medium.com/@moojing/%E5%89%8D%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%B8%AB%E5%BE%8C%E7%AB%AF%E4%B9%8B%E6%97%85-4-%E8%B3%87%E6%96%99%E5%BA%AB%E9%97%9C%E4%BF%82%E8%A8%AD%E8%A8%88-76dc83170950
http://www.tsnien.idv.tw/DataBase_WebBook/%E7%AC%AC%E4%B9%9D%E7%AB%A0%20%E8%B3%87%E6%96%99%E5%BA%AB%E7%9A%84%E9%82%8F%E8%BC%AF%E8%A8%AD%E8%A8%88.html


上一篇
事前規劃(1) 需求確認
下一篇
事前準備(3) 基本開發環境確認
系列文
30天開發與部署 Laravel 專案30

尚未有邦友留言

立即登入留言