Laravel 資料庫命名建議
分類
說明
資料庫命名看似只是小細節,但實際上仍有許多值得遵循的最佳實務。本篇將以 Laravel 的常見習慣為主,同時分享一些適用於大多數資料庫的通用命名原則。
基本原則
資料庫命名最重要的是保持一致。只要團隊有明確規則,並且整個專案都遵守,就可以降低溝通成本。
我會建議遵守以下原則。
- 使用英文命名
- 使用小寫
- 多單字使用底線
_連接 - 名稱要能看出用途
- 避免縮寫過度
- 避免使用保留字
- 同一個專案保持一致
- 遵守開發系統建議的命名方式
例如不要一下使用 userName,一下使用 user_name,一下又使用 UserName,這樣會讓資料庫命名變得很混亂。
閱讀 Laravel 文件和看框架預設的資料庫,你會發現它們存在命名規則,這些規則是會跟程式一起互相搭配使用的,不遵守這些規則輕則需要微調程式的運作邏輯,重則發生錯誤。
資料庫名稱
資料庫名稱通常代表整個系統或服務,建議使用小寫英文,並用底線 _ 組合多個單字。
blog
shop
member_center
order_system
如果同一個專案有不同環境,也可以在資料庫名稱後面加上環境名稱。
shop_dev
shop_test
shop_staging
shop_production
我自己會比較偏好簡單明確,例如正式環境使用 shop,測試環境使用 shop_test,開發環境使用 shop_dev。
資料表名稱
資料表名稱在 Laravel 裡面通常使用小寫、複數、底線命名法,也就是 snake case。
例如 User Model 預設會對應到 users 資料表。
User -> users
Post -> posts
Product -> products
OrderItem -> order_items
PasswordResetToken -> password_reset_tokens
所以我會建議資料表命名使用以下規則。
- 使用複數名詞
- 使用小寫
- 多單字使用底線 _
- 名稱描述資料本身,不描述動作
好的命名如下。
users
posts
products
orders
order_items
product_categories
login_logs
不建議的命名如下。
User
user
user_data
create_order
其中 create_order 比較像動作,不適合當資料表名稱。資料表應該描述「存放什麼資料」,所以用 orders 會比較好。
欄位名稱
欄位名稱建議使用小寫、單數、底線命名法。
id
name
email
password
created_at
updated_at
deleted_at
user_id
product_id
order_number
payment_status
Laravel 預設常見欄位也都是這種風格。
id
created_at
updated_at
deleted_at
如果是外鍵,Laravel 常見習慣是使用「單數資料表名稱 + _id」。
user_id
post_id
product_id
category_id
order_id
需注意,Laravel 有一些習慣的欄位名稱命名方式,這些名稱是會影響程式碼的運作的,這方面可以參考官方文件。
命名全小寫的原因
雖然有些資料庫可以支援大小寫混合,但不同作業系統、不同資料庫設定、不同工具之間可能會出現差異。為了降低不必要的麻煩,我會建議資料庫命名全部使用小寫,並用底線分隔單字。
避免使用保留字
除了最基本的命名應避免使用資料庫語法保留字之外,還需注意有些預設的資料表是有特定用途的,例如:Laravel 預設的 users 資料表是用來存放使用者的。應保留那些資料表給預設的程式使用。
不建議過度縮寫
命名可以簡短,但不要短到看不懂。
不建議:
usr_id
prd_id
amt
qty
addr
建議:
user_id
product_id
amount
quantity
address
有些縮寫如果非常常見,可以接受,例如 id、url、ip。
id
url
ip_address
但如果不是大家都能馬上理解的縮寫,就不建議使用。
命名範例
以下是一個簡單的購物系統命名範例。
users
products
product_categories
orders
order_items
payments
shipping_addresses
orders 資料表欄位範例:
id
user_id
order_number
payment_status
shipping_status
total_amount
paid_at
shipped_at
created_at
updated_at
order_items 資料表欄位範例:
id
order_id
product_id
product_name
quantity
unit_price
subtotal_amount
created_at
updated_at
這樣命名的好處是,只看資料表和欄位名稱,大概就能理解資料之間的關係。
總結
資料庫命名沒有唯一標準,但一定要有一致的規則。若是 Laravel 專案,我會建議資料庫、資料表、欄位都使用小寫 snake case,資料表使用複數,欄位使用單數,遵守 Laravel 資料庫的命名習慣,例如:外鍵使用單數名稱加上 _id。
簡單整理如下。
資料庫名稱:小寫 snake case
資料表名稱:小寫、複數、snake case
欄位名稱:小寫、單數、snake case
外鍵欄位 (Laravel):單數名稱 + _id
時間欄位 (Laravel):事件名稱 + _at
只要命名清楚、一致、符合 Laravel 習慣,後續不管是寫 Model、Migration、Query,或是其他人接手維護,都會輕鬆很多。
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!