使用者表可以說是每個專案立項動工時首要考慮的一件事情。使用者表結構的設計直接影響著專案的可靠性和擴充套件性,與其待以後需要滿足需求不斷改動,倒不如一開始就設計一個易於擴充套件的使用者表,爭取一步到位。
基礎設計
大部分初學者所學到的,以及不少框架自帶的使用者表都是類似下面這種結構的。
id
name
password
這是一個相當簡單的使用者表,只包含了使用者ID、名稱、密碼等必要的資訊。假如需要在這基礎上加上一些欄位,比如生日、住址甚或使用者狀態等,就只能繼續加欄位,變成了下面這樣。
id
name
password
birthday
address
status
這樣做在初期是沒有什麼大問題的,頂多就是麻煩點。然而,隨著越來越多應用開放第三方登入,我們自己的專案也得加上第三方資訊表,於是,我們有了第二個表。
socials
-------
id
user_id
type
value
credential
我們用 type
和 value
存放第三方型別以及第三方使用者標識,用 credential
來存放密碼、Token等資訊。
以上這種方式毫無疑問是可以解決問題的,可就是過於麻煩了。
正式內容
users
-------
id
nickname
avatar
status
socials
-------
id
user_id
type
value
credential
union_id
user_auths
-------
id
user_id
type
identifier
credential
user_extends
-------
id
user_id
field
value
users
表僅儲存一些必要的使用者資訊,其他額外資訊如生日、住址等存放於 user_extends
表,使用者繫結的第三方資訊存放於 socials
表。認證資訊存放於 user_auths
表,其中的 type
欄位是登入的型別,如手機號、郵箱、使用者名稱等,比如手機號登入的時候只要找出 type = 'phone' AND identifier = 123456789
的記錄,然後判斷密碼(或驗證碼)即可。
結語
我承認,寫一半的時候我就不知道自己在說什麼了(捂臉)。大佬們輕點噴。
參考資料
可擴充套件的使用者表設計 by franktrue
淺談資料庫使用者表結構設計 by 一步一步向上爬
本作品採用《CC 協議》,轉載必須註明作者和本文連結