Echo的數(shù)據(jù)庫表是如何設(shè)計(jì)的
Echo 這個(gè)項(xiàng)目數(shù)據(jù)庫設(shè)計(jì)并不復(fù)雜,需要我們手動(dòng)設(shè)計(jì)的只有四張表:
帖子表: discuss_post評(píng)論表: comment用戶表: user私信表: message
用戶表

解釋一下各個(gè)字段的含義:
id:用戶的唯一標(biāo)識(shí) username:用戶名 password:存儲(chǔ)加鹽加密后的密碼 salt:隨機(jī)生成的鹽,用于密碼的加鹽加密 email:郵箱 type:用戶類型 0 - 普通用戶(用戶注冊(cè)默認(rèn)是普通用戶) 1 - 超級(jí)管理員:具有刪除帖子、訪問數(shù)據(jù)統(tǒng)計(jì)界面的權(quán)限 2 - 版主:具有置頂、加精帖子權(quán)限 status:用戶狀態(tài) 0 - 未激活(默認(rèn)):用戶點(diǎn)擊注冊(cè)后未點(diǎn)擊郵箱中的激活鏈接進(jìn)行驗(yàn)證,就會(huì)處于這個(gè)狀態(tài)。未激活的用戶同樣無法正常使用某些功能比如發(fā)表帖子等 1 - 已激活:用戶點(diǎn)擊郵箱中的激活鏈接進(jìn)行驗(yàn)證成功,就會(huì)將狀態(tài)從未激活改成已激活 activation_code:激活碼。用戶點(diǎn)擊注冊(cè)后,隨機(jī)生成一串激活碼,則在本地環(huán)境下: http://localhost:8080/greatecommunity/activation/用戶id/激活碼成為該用戶的激活鏈接;在服務(wù)器上:http://1.15.127.74/activation/用戶id/激活碼成為該用戶的激活鏈接。點(diǎn)擊該激活鏈接則激活用戶。激活的邏輯也很簡單,就是檢查一下這個(gè)鏈接中的用戶 id 和激活碼是否和數(shù)據(jù)庫中存儲(chǔ)的一樣。
帖子表

解釋一下各個(gè)字段的含義:
id:帖子的唯一標(biāo)識(shí) user_id:發(fā)表該帖子的用戶的 id title:帖子標(biāo)題 content:帖子內(nèi)容 type:帖子類型 0 - 普通帖子(默認(rèn)) 1 - 置頂帖子 status:帖子狀態(tài) 0 - 正常(默認(rèn)) 1 - 精華:為帖子加精可以使其在熱度計(jì)算中得到一定的加分 2 - 拉黑:管理員刪除帖子后,就將這個(gè)帖子的狀態(tài)設(shè)置為拉黑 create_time:帖子發(fā)表時(shí)間 comment_count:帖子的評(píng)論數(shù)量(因?yàn)闀?huì)頻繁的顯示帖子的信息,比如創(chuàng)建時(shí)間、創(chuàng)建人、評(píng)論數(shù)量、點(diǎn)贊數(shù)量等,創(chuàng)建時(shí)間和創(chuàng)建人信息這張表中已經(jīng)有了,所以此處再將評(píng)論數(shù)量存進(jìn)來就好??赡軙?huì)有同學(xué)會(huì)問啥不把點(diǎn)贊數(shù)量也緩存到帖子表中,因?yàn)辄c(diǎn)贊數(shù)量是存在 Redis 中的,獲取點(diǎn)贊數(shù)量咱連數(shù)據(jù)庫都不用進(jìn)的,還費(fèi)勁在這存一份干啥) score:熱度 / 分?jǐn)?shù)(用于按照熱度排行帖子)

評(píng)論表
這個(gè)表應(yīng)該是相對(duì)來說最復(fù)雜的一張了。因?yàn)椴粌H有評(píng)論(對(duì)帖子的評(píng)論),還有對(duì)評(píng)論的回復(fù),都放在這一張表里面了。

id:評(píng)論/回復(fù)的唯一標(biāo)識(shí) user_id:用戶 id(哪個(gè)用戶發(fā)布了這個(gè)評(píng)論/回復(fù)) entity_type:實(shí)體類型(表示這條 comment 是針對(duì)哪個(gè)類型的,如果是針對(duì)帖子的,那么這個(gè) comment 就是評(píng)論;如果是針對(duì)評(píng)論的,那么這條 comment 就是回復(fù)) entity_id:實(shí)體的 id(如果是對(duì)帖子的評(píng)論,就存儲(chǔ)帖子的 id;如果是對(duì)評(píng)論的回復(fù),就存儲(chǔ)評(píng)論的 id;還有對(duì)回復(fù)的回復(fù),存儲(chǔ)的仍然是所屬評(píng)論的 id。也就是說,「某個(gè)帖子下的所有評(píng)論,它們的 entity_id 都是這個(gè)帖子的 id。某條評(píng)論下的所有回復(fù),它們的 entity_id 都是這條評(píng)論的 id」。) target_id:目標(biāo)用戶 id(表示這條評(píng)論/回復(fù)是針對(duì)哪個(gè)用戶的。比如用戶 admin 發(fā)了一個(gè)帖子,用戶 master 評(píng)論了這個(gè)帖子,那么這里的 target_id 存儲(chǔ)的就是用戶 admin 的 id。) content:評(píng)論/回復(fù)的內(nèi)容 status:評(píng)論/回復(fù)狀態(tài) 0 - 正常(默認(rèn)) 1 - 禁用(暫未使用) create_time:評(píng)論/回復(fù)發(fā)布時(shí)間

私信表
這張表不僅存儲(chǔ)用戶之間的私信,也存儲(chǔ)系統(tǒng)通知,不同的是,系統(tǒng)通知的 from_id 特定為 1。用于發(fā)送系統(tǒng)通知的角色(用戶) SYSTEM 已內(nèi)置。

下面來看私信表的結(jié)構(gòu):

id:私信/系統(tǒng)通知的唯一標(biāo)識(shí) from_id:私信/系統(tǒng)通知的發(fā)送方 id to_id:私信/系統(tǒng)通知的接收方 id conversation_id:標(biāo)識(shí)兩個(gè)用戶之間的對(duì)話。比如用戶 id 112 給 113 發(fā)消息,或者 113 給 112 發(fā)消息,這兩個(gè)會(huì)話的 conservation_id都是112_113。這樣,通過這個(gè)字段我們就能查出來 112 和 113 之間的私信往來了。當(dāng)然,這個(gè)字段是冗余的,我們可以通過 from_id 和 to_id 推演出來,但是有了這個(gè)字段方便后面的查詢等操作content:私信/系統(tǒng)通知的內(nèi)容 status:私信/系統(tǒng)通知的狀態(tài) 0 - 未讀(默認(rèn)) 1 - 已讀 2 - 刪除(暫未使用) create_time:私信/系統(tǒng)通知的發(fā)送時(shí)間
評(píng)論
圖片
表情
