关于用户表的设计

totola147 2013-04-11 09:47:57
使用最频繁的用户表 大一些好 还是小一些好

三种设计方法:

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

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

感谢大家 多多赐教
...全文
1262 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
锦城追影 2013-08-03
  • 打赏
  • 举报
回复
写得好,讨论也精彩,学习了
love灵灵 2013-04-12
  • 打赏
  • 举报
回复
我也学习了。。。
totola147 2013-04-12
  • 打赏
  • 举报
回复
引用 6 楼 shoppo0505 的回复:
引用 4 楼 totola147 的回复:引用 2 楼 shoppo0505 的回复: 1 是否分表 这个要看你的系统设计,如果你只是增删改用户信息,那么在这里,分不分区别不大。 2 依据什么分表,用户类型还是面向业务的使用频率 还是那句话,根据你的系统设计来决定。 概括来说,如果对象的信息不常修改的话,可以设计成一个大表。 1 查询应该是主要……
理解了 谢谢您的回复
totola147 2013-04-12
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
你那个案例有点长,我举个简单的例子把,一个电子商务网站,一般都是先展示商品列表,附带一些图片,而货物的详细信息是点进去才看到,那这种情况下,拆表,这样可以减少一次性返回的数据量。但是如果这个网站每次都需要第一次就加载所有信息,那单表会好,反正都要返回那么多数据,减少表关联可以提高速度
感谢您的回复 我基本明白了应该怎么做
shoppo0505 2013-04-11
  • 打赏
  • 举报
回复
引用 4 楼 totola147 的回复:
引用 2 楼 shoppo0505 的回复: 1 是否分表 这个要看你的系统设计,如果你只是增删改用户信息,那么在这里,分不分区别不大。 2 依据什么分表,用户类型还是面向业务的使用频率 还是那句话,根据你的系统设计来决定。 概括来说,如果对象的信息不常修改的话,可以设计成一个大表。 1 查询应该是主要需求 2 您能否在详细一些 我不能确定依据系统设计的什……
如果你只是练手,那你两种方式都做一下好了。 如果你的数据库设计时针对一个应用程序的,那么你的设计就要符合应用程序的设计。
發糞塗牆 2013-04-11
  • 打赏
  • 举报
回复
你那个案例有点长,我举个简单的例子把,一个电子商务网站,一般都是先展示商品列表,附带一些图片,而货物的详细信息是点进去才看到,那这种情况下,拆表,这样可以减少一次性返回的数据量。但是如果这个网站每次都需要第一次就加载所有信息,那单表会好,反正都要返回那么多数据,减少表关联可以提高速度
totola147 2013-04-11
  • 打赏
  • 举报
回复
引用 2 楼 shoppo0505 的回复:
1 是否分表 这个要看你的系统设计,如果你只是增删改用户信息,那么在这里,分不分区别不大。 2 依据什么分表,用户类型还是面向业务的使用频率 还是那句话,根据你的系统设计来决定。 概括来说,如果对象的信息不常修改的话,可以设计成一个大表。
1 查询应该是主要需求 2 您能否在详细一些 我不能确定依据系统设计的什么来决定
totola147 2013-04-11
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
这个要看你怎么用,比如你每次都一次性查完,那一个表好一点,如果你经常需要查询部分信息,那可以拆小,
应该是查询部分信息 您的意思是拆小 那您认为 应该以什么为标准拆呢 是用户类型 还是业务视频频率
shoppo0505 2013-04-11
  • 打赏
  • 举报
回复
1 是否分表
这个要看你的系统设计,如果你只是增删改用户信息,那么在这里,分不分区别不大。

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


概括来说,如果对象的信息不常修改的话,可以设计成一个大表。
發糞塗牆 2013-04-11
  • 打赏
  • 举报
回复
这个要看你怎么用,比如你每次都一次性查完,那一个表好一点,如果你经常需要查询部分信息,那可以拆小,

34,592

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧