日期:2014-05-17  浏览次数:20552 次

关于用户表的设计
使用最频繁的用户表   大一些好  还是小一些好

三种设计方法:

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 依据什么分表,用户类型还是面向业务的使用频率

请大家帮忙看一下  那种更利于高并发  海量数据的应用

感谢大家  多多赐教
数据库 设计

------解决方案--------------------
这个要看你怎么用,比如你每次都一次性查完,那一个表好一点,如果你经常需要查询部分信息,那可以拆小,
------解决方案--------------------
1 是否分表
这个要看你的系统设计,如果你只是增删改用户信息,那么在这里,分不分区别不大。

2 依据什么分表,用户类型还是面向业务的使用频率
还是那句话,根据你的系统设计来决定。


概括来说,如果对象的信息不常修改的话,可以设计成一个大表。

------解决方案--------------------
你那个案例有点长,我举个简单的例子把,一个电子商务网站,一般都是先展示商品列表,附带一些图片,而货物的详细信息是点进去才看到,那这种情况下,拆表,这样可以减少一次性返回的数据量。但是如果这个网站每次都需要第一次就加载所有信息,那单表会好,反正都要返回那么多数据,减少表关联可以提高速度
------解决方案--------------------
引用:
引用:
1 是否分表
这个要看你的系统设计,如果你只是增删改用户信息,那么在这里,分不分区别不大。

2 依据什么分表,用户类型还是面向业务的使用频率
还是那句话,根据你的系统设计来决定。


概括来说,如果对象的信息不常修改的话,可以设计成一个大表。

1 查询应该是主要需求


2 您能否在详细一些   我不能确定依据系统设计的什……


如果你只是练手,那你两种方式都做一下好了。
如果你的数据库设计时针对一个应用程序的,那么你的设计就要符合应用程序的设计。