关于用户表的设计
使用最频繁的用户表 大一些好 还是小一些好
三种设计方法:
1 大表设计思路
将用户相关的信息都设计在一张用户表中
2 常用和不常用做分离设计
将用户常用的和不常用的做分离设计,这样可以达到更好的性能,比如说用户详细信息,只有用户编辑个人信息时才会修改,用户在使用其他功能时,是不需要这部分的;
3 按用户类型做分离设计
用户ID,用户名,密码;等基本信息放在一个表中,这样满足不同应用的需求,将不同用户独有的信息设计到不同的表中,和基本信息表1对1关系
举例:
用户现有 老师 学生 家长
按照设计思路1:
用户表是老师,学生,家长三个实体属性的并集,并且有一个用户类型字段,标识不同的用户
User(userID,..........userType)
优点:可以减少数据库请求次数
缺点:用户表的写锁频率较高
按照设计思路2:
将使用频繁的用户属性和只在特定场景才会使用的用户属性,分离至不同的表
优点:用户表基本无更新操作,所以无写锁
缺点:
User(userID,userName,userType,email,password)
UserDetail(userID,gender,portrait,accountStatus,level,score,address,telephone,degree,college)
按照设计思路3:
将表分为用户表,老师表,学生表,家长表,其中用户表分别和老师表,学生表,家长表,一对一关系
用户表只存最基本的信息,登录名,密码,用户ID
User(userID,loginName,password)
Teacher(userID,school,course)
Student(userID,school,grade,class)
Parent(userID,address,occupation,age)
优点:利于拓展某一类型用户
缺点:由于修改不同用户的信息时,要操作不同的表,程序逻辑略微复杂;
问题主要是关于用户表的设计,如何设计最为合理
1 是否分表
2 依据什么分表,用户类型还是面向业务的使用频率
请大家帮忙看一下 那种更利于高并发 海量数据的应用
感谢大家 多多赐教