聊天软体实作(1): 从资料储存开始

对于一个简单的聊天室而言,大致上只需要User资料表记录使用者,Message资料表纪录讯息内容、发送方使用者、接受方使用者、时间戳等等。
http://img2.58codes.com/2024/20139626Hkcb4xi3J0.png

问题是,如果是多人聊天室,当A发一笔讯息时,聊天室有500个成员,这时Message资料表就会瞬间新增至少499笔,显然有优化的选项。

资料库正规化

换个角度想,把要发送的对象抽出来,由另外一张表负责记录聊天室的成员。这样一来,不管讯息新增几笔,Message资料表只需要记住是哪一个聊天室Id,便可以知道该发送给谁。
也就是资料库正规化的第二级原则。
http://img2.58codes.com/2024/20139626NmPDHxBqIF.png

*上图的Message资料表,我先省略"发送方使用者"的栏位及关连,让图示更清楚些。

在设计资料库时,正规化的原则可以增进资料库效能、减少储存记忆体浪费。

正规化有三个阶段:

(1) 第一级正规化      1.消除每个资料表中同类型的栏位         (例如: Message资料表有两个栏位-接受者1、接受者2,合併成接受者一个栏位)      2.使用一个**主键值(PK)**来识别每一笔资料         (例如: Message资料表有Id,跟身分证一样,可以区分不同笔资料)
(2) 第二级正规化       1.会重複出现的栏位资料,拆分独立的资料表       2.透过一个外来键值(Foreign key)来关联这些资料表的资料
(3) 第三级正规化       1.消除与主键无关的栏位           (例如: Message表有使用者资讯UserPhone,很容易在资料异动时出错)       2.**消除递移关係**            ( X->Y,Y->Z 所以X->Z。例如: 总金额 = 商品单价* 数量,             这时可能不适合把总金额栏位和数量放在同一张表,             数量异动时可能会造成总金额错误)

http://img2.58codes.com/2024/emoticon06.gif正规化就是减少资料重複、减少资料错误,但同时会造成查询变複杂(需要JOIN),所以依照需求和资料量设计资料库才是王道。

下一篇: 聊天软体实作(2):从读写需求评估资料储存


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章