SegmentFault 用戶表結(jié)構(gòu):必要字段與項(xiàng)目代碼分析,它是怎么設(shè)計(jì)的?

SegmentFault 用戶表結(jié)構(gòu):必要字段與項(xiàng)目代碼分析,它是怎么設(shè)計(jì)的?

segmentfault 用戶表結(jié)構(gòu)解析

segmentfault 是一個(gè)問(wèn)答社區(qū),想必其用戶表結(jié)構(gòu)設(shè)計(jì)也別具匠心。本問(wèn)答將從必要字段和項(xiàng)目代碼的角度,為大家深入剖析 segmentfault 的用戶表結(jié)構(gòu)。

必要字段

對(duì)于任何用戶表而言,以下字段都是不可或缺的:

  • id:用戶的唯一標(biāo)識(shí)符
  • 用戶名:用戶的登錄名稱
  • 密碼:用戶用于登錄的哈希密碼
  • 電子郵件:用戶聯(lián)系方式
  • 注冊(cè)時(shí)間:用戶注冊(cè)的時(shí)間
  • 更新時(shí)間:用戶信息的最后更新時(shí)間

項(xiàng)目代碼分析

segmentfault 已開(kāi)源其問(wèn)答社區(qū)軟件 answer。我們可以在其項(xiàng)目代碼中找到用戶表結(jié)構(gòu)的具體實(shí)現(xiàn)。

打開(kāi)項(xiàng)目代碼倉(cāng)庫(kù)中的 answer/internal/migrations 目錄,可以看到一系列與創(chuàng)建用戶表相關(guān)的 sql 遷移腳本。其中,文件 1_create_users.sql 定義了用戶表的初始結(jié)構(gòu):

CREATE TABLE `users` (   `id` bigint(20) NOT NULL AUTO_INCREMENT,   `username` varchar(255) NOT NULL,   `password` varchar(255) NOT NULL,   `email` varchar(255) NOT NULL,   `register_time` timestamp NOT NULL,   `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,   PRIMARY KEY (`id`),   UNIQUE KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

通過(guò)代碼分析,我們可以發(fā)現(xiàn) segmentfault 的用戶表結(jié)構(gòu)與我們預(yù)測(cè)的必要字段一致,并且定義了額外的字段:

  • register_time:記錄用戶的注冊(cè)時(shí)間,類型為時(shí)間戳
  • update_time:記錄用戶信息的最后更新時(shí)間,類型為時(shí)間戳,并默認(rèn)采用當(dāng)前時(shí)間戳

此外,username 字段設(shè)置了唯一鍵索引,確保每個(gè)用戶名在數(shù)據(jù)庫(kù)中都是唯一的。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊12 分享