鍍金池/ 問答/PHP  數(shù)據(jù)庫/ 數(shù)據(jù)表設(shè)計(jì)的一個(gè)小小疑問

數(shù)據(jù)表設(shè)計(jì)的一個(gè)小小疑問

最近在看別人的項(xiàng)目,發(fā)現(xiàn)有的項(xiàng)目將用戶表和用戶余額表分開來創(chuàng)建

用戶 -----> user 表
用戶余額 ----> user_balance 表(里面包含了用戶id和用戶的余額數(shù)量)

741824-20160816002632156-637059328.png

但是有的人又將用戶余額表和用戶表創(chuàng)建為一張表

所以就懵逼了,不知道哪種更好一點(diǎn)??

分開來創(chuàng)建的話不是冗余了???
而且每次查詢用戶余額的時(shí)候先去用戶表查詢用戶ID再去用戶余額表查詢余額 不是查詢了兩次 讓數(shù)據(jù)庫開銷更大嗎????

回答
編輯回答
短嘆

從領(lǐng)域模型來看,余額不是用戶自身的屬性,【用戶】依賴【余額】,【余額】關(guān)聯(lián)【用戶】,所以分開存儲(chǔ)更合理。如果因?yàn)橛囝~的變更而引起用戶信息改變,或刪除用戶后造成用戶余額不可訪問,這個(gè)聽起來是有問題的。況且用戶和余額可能分別有各自的狀態(tài)。

2017年5月3日 16:10
編輯回答
風(fēng)清揚(yáng)

余額最好是分開 如果把余額寫在user表里 事實(shí)上隱患很大,而且在進(jìn)行接口設(shè)計(jì)和開發(fā)的時(shí)候也會(huì)有很多額外工作量。
譬如說展示用戶個(gè)人主頁的時(shí)候,我們就需要對于公開頁面 banlance信息進(jìn)行移除。

這里應(yīng)該要將banlance獨(dú)立出來,我的做法是這樣的,請參考:

user_account   核心賬戶 userid,username,password,nickname...
user_info      賬戶信息 userid,city,wxopenid,company...
user_pocket    錢包    userid,cash,points,type...
user_comment   評論 ...
user_collect   ...
user_like      ...
user_follow    ...

通過幾個(gè)拆分反而可以有效控制單個(gè)表的空間大小優(yōu)化查詢效率,同時(shí)也降低了安全風(fēng)險(xiǎn),何樂不為
查詢的時(shí)候使用聯(lián)表查詢每次 1+1 , 1+2對于mysql來說是很輕松的事情

2018年1月3日 18:56
編輯回答
假灑脫

分開,為未來業(yè)務(wù)擴(kuò)展做準(zhǔn)備

2017年4月30日 05:16
編輯回答
我以為

建議是分開

主要是看自身業(yè)務(wù)要求形態(tài),具體情況具體分析

分開好處:

  1. 不是用戶表自身屬性
  2. 分開,更容易控制金額的變化(尤其是分布式下)
2017年7月22日 08:52
編輯回答
朕略萌

用戶余額字段如果只有一個(gè)的話建議放在用戶表,余額不是大字段,沒必要拆分.
數(shù)據(jù)庫設(shè)計(jì)的兩個(gè)基本要求:

  1. 能實(shí)現(xiàn)需求
  2. 能保證性能
2017年6月9日 22:31
編輯回答
六扇門

看業(yè)務(wù)需求,余額并非用戶屬性,而是屬于比較敏感的數(shù)據(jù),分開比較好

2017年5月17日 21:51
編輯回答
小眼睛

范式和反范式都需要看業(yè)務(wù)需求。

2018年2月23日 09:11
編輯回答
笨尐豬

這是一種取舍,余額如果特別重要,比如有些業(yè)務(wù)場景下和錢有關(guān)系,很敏感下,應(yīng)該單獨(dú)存放在擴(kuò)展表里,如果僅僅是和user表內(nèi)數(shù)據(jù)差不多的,那就放user表里好了,

2018年6月16日 16:01
編輯回答
陌南塵

頂樓上。。。

2018年8月19日 21:20