工作学习中碰到一些老表,有些不同想法。
举例说明:
用户登录系统:
传统: id, uId, uPs, uName, uDesc, uMail, uLogo, regTime, isBlocked, lastInTime一般一个表就可以。
对于并发用户多的话,那么就点问题。
每次用户登录时,都会对该表进行读操作。登录成功后,都会更新用户的lastInTime(最后登录时间),也就是写操作,中间用户还可能修改其uDesc, uMail, uLogo(用户简要描述,用户mail,用户的logo图片来个性化自己).
这是读写的差异,实际上按照我们功能定义,对表的操作也可以分为经常读,很少读,经常写,很少写。
那么如何分?
我记得sql语句使用时大家都很清楚select * 和select需要的字段这两者的差别。那么在表格设计时也可以这么做。每个表只包括需要的信息。
比如
table1: id, uId, uPs, uName, isBlocked(经常读,难得写(因为block很少用,如果用的很频繁,那就另外建表))
table2: uid, uDesc, uMail , uLogo, regTime(偶尔写,偶尔读)
table3: uid, lastInTime...(经常写,除了lastInTime最后登录时间经常要写外,还有其他字段需要经常写)
这样的设计在大数据量和并发多的情况下会比较明显。小数据量和很少并发情况下,这样会增加联表操作的成本。
说的不对还请大家纠正,目前我自己是按照这个思维方式来设计表的。主要是针对爬虫表。
当然这应该适用大多数情况。