浅谈的数据库设计原则-之账户体系的分析

2019-01-23  本文已影响0人  fkxuexi

本文不讲具体的技术点,谈一点设计这也是在本次项目当中的一点心得体会。本文的一些观点主要是我平时的项目实践以及阅读和学习到,希望能够启发大家的思考,只有不断的思考才能不断的去领悟,他山之石可以攻玉,才会形成自己独特的理解并根据实际情况加以利用,形成自己的只是体系。主要是本次的项目部分的数据库的设计看的太蛋疼,所以写一写自己的感想。

一、账户体系:

账户体系:任何一个带有权限的多用户系统,账户体系都是必备的基础体系基础。我们这里将结合这个具体的来分析数据库的设计。
账户体系包含的内容

二、感想:

这个目前是我们公司设计的表,当然不是我设计的,不然也不会有这篇博文,多的咱就不提了,咱们下面就说一说该如何正确的拆分和设计。

2.1 数据库的设计原则(这个标题有点大,这里我只提我用到过的):

基本上我在设计数据库的时候会结合这些来考虑。有可能读者会看到,哎…… 这里并没有说怎么主键、外键、索引、视图、字段类型选择、约束性…… 呃,我只能说这些会在后面提升数据库性能的一章中提到。单一原则吗~~~

三、我们结合上面的来具体的设计一下表:

3.1、用户登录信息表

①:普通类型的

类型 长度 common
id unsigned int 11 primary key auto_incremetn
user_id unsigned int 11
phone varcher 15 这个长度为15的原因是防止要存储区号
pwd varcher 30 这个设计长一点因为一般都是混淆加密的
salt varcher 10

②:第三方登录的

类型 长度 common
id unsigned int 11 primary key auto_incremetn
user_id unsigned int 11
oauth_name varcher(40)
oauth_id varchar 40 一般第三方的OpendId 都比较长

3.2、个人信息表

类型 长度 common
user_id unsigned int 11 primary key auto_incremetn
phone varcher 15 这个地方就是冗余,因为登录表我们只做登录获取token,后续就不用了,但是电话号码我们需要做营销或者通知,所以还是添加到个人信息表里面,迪米特法则,尽量少与其他实体发生相互作用
nick_name varcher 30
birth datetime
img varcher 100 有的第三方图像巨长
user_from unsigned int 11 用户来源,用于统计推广的转化率

后面肯定还有具体的用户信息,我们就不在写了,这个表大多只是展示用的,只做查询之用。

3.3、用户账户表

类型 长度 common
user_id unsigned int 11 primary key
vip_level unsigned int 11 会员等级
discount decimal(3,2) 11 可享受的折扣,这个肯定也是别的表计算的结果,但是在这个地方依旧是冗余字段
total_score unsigned int 11 会员总消费积分
eff_score unsigned int 11 有效会员积分

这里也会有很多的具体的业务字段,这个大家根据具体业务具体的分析。

四、小结一下

数据库设计的如何直接决定整个应用程序的逻辑的复杂程度、稳定性。但是由于这个业务并不复杂,不可能将所有的原则技巧都使用上,只是看到我们的用户那部分的数据库设计比较糟糕,有感而发顺带总结一下数据设计的技巧。

上面主要用到了单一的设计原则,开闭原则,迪米特法则以及适当的冗余等。

ER图这个东西是没有具体的答案的,数据库设计的如何取决以下方面:

今天的分享就到这里,接下来还有很多的欠账都没有补上,rabbitmq的内容是还没有写完的,我这里正在重新整理当中,因为后来我又重读了我的博客,我感觉还是没有讲清楚和讲明白,所以后面打算重写整个系列,有兴趣的请大家多关注一下。

用场景驱动的方式,讲述能看的懂能落地的技术。加入java技术进阶交流群(570980002)一起纯粹的讨论技术(非培训机构)。

博客首发地址csdn:https://blog.csdn.net/weixin_42849915
简书地址:https://www.jianshu.com/u/4b48be4cf59f
希望结识更多的大牛一同学习一同进步

上一篇下一篇

猜你喜欢

热点阅读