【无中生有】---2---数据库设计-1
任何一个系统目前都需要人的参与,电商系统需要客户,企业系统需要雇员,无人值守的系统也需要操作员。
所以在业务对象中,人是一个必要的设计对象,不管是不是核心业务对象
Person表
| 字段名 | 类型 | 作用 |
| Id | 整型 | 人数据id |
| Name | 字符 | 用户姓名 |
| Sex | 整型 | 性别 |
| Birthday | 日期 | 出生日期 |
| IDCard | 字符 | 身份证号 |
| Status | 整型 | 数据状态 |
| CreateTime | 长高精度日期 | 数据创建时间 |
| CreateBy | 整型 | 创建人:人数据id |
| ModifyTime | 长高精度日期 | 数据修改时间 |
| ModifyBy | 整型 | 修改人:人数据id |
| IsDelete* | 布尔 | 数据是否逻辑删除 |
数据用户id之所以选择整型而不是guid类型,是为了索引优化。最后一个逻辑删除字段的使用,可以依据业务规则而改变,通常情况不建议直接物理删除人的数据,这样可能会造成业务数据找不到关联的人,但是,逻辑删除又存在一个问题,就是如果是一个人员变化较快的系统,可能会产生大量冗余数据,基于性能、运维、业务维护考虑,数据最好采用先逻辑删除然后物理转存废弃数据的方式。
另外,从数据安全性和业务安全考虑,创建时间和修改时间字段、创建人和修改人字段,都是必要,而且每个表都需要。但是更高安全性要求的数据则需要一个专门的操作记录维护表,而且人员的数据采用id而不是字符的姓名,是因为数据可变性的考虑。
这是一个人员的基础自然属性表,系统用户业务对象可以基于此表建立,但是不适合和此表完全融合。
User表
| 字段 | 数据类型 | 作用 |
| UserName | 字符 | 用户名 |
| Picture | 字符 | 头像地址 |
| PersonId | 整型 | person表数据的id |
| Id | 整型 | 数据id |
| Status | 整型 | 数据状态 |
| CreateTime | 长高精度日期 | 数据创建时间 |
| CreateBy | 整型 | 创建人:人数据id |
| ModifyTime | 长高精度日期 | 数据修改时间 |
| ModifyBy | 整型 | 修改人:人数据id |
| IsDelete | 布尔 | 数据是否逻辑删除 |
UserName,通常此表也作用登录信息基础表,此字段也作为登录名,但是这样会有一些问题,尤其是登录方式多样化的时候,比如手机号、邮箱也可以登录,所以这个表就作为一个单纯的用户对象储存
而用户对象通常不会有惟一性,一个人会有多个用户名,因此personid字段不能做惟一性约束
LoginUser表
| 字段 | 数据类型 | 作用 |
| LoginName | 字符 | 登录名 |
| Password | 字符 | 登录密码 |
| UserId | 整型 | User表数据的id |
| Id | 整型 | 数据id |
| Status | 整型 | 数据状态 |
| CreateTime | 长高精度日期 | 数据创建时间 |
| CreateBy | 整型 | 创建人:人数据id |
| ModifyTime | 长高精度日期 | 数据修改时间 |
| ModifyBy | 整型 | 修改人:人数据id |
| IsDelete | 布尔 | 数据是否逻辑删除 |
User表的数据和LoginUser表的数据是一对多的关系,尤其是目前登录方式多样化的情况下。所以以前流行的user表和loginuser表融合的设计不太适合了。
由于loginName不具备数据不变性,可能由于各种原因发生改变,所以数据变更需要确定一个原则,新增数据的登录名不能侵犯原有数据,否则,被侵犯数据的用户将发现自己登录名或者登录方式丢失的问题。
Contacts表
| 字段 | 数据类型 | 作用 |
| 字符 | 人员的邮箱 | |
| Mobile | 字符 | 手机号 |
| Address | 字符 | 人员联系地址 |
| 字符 | qq号 | |
| CityName | 字符 | 所在城市 |
| ZipCode | 字符 | 邮编 |
| PersonId | 整型 | Person表数据的id |
| UserId | 整型 | User表的数据id |
| Id | 整型 | 数据id |
| Status | 整型 | 数据状态 |
| CreateTime | 长高精度日期 | 数据创建时间 |
| CreateBy | 整型 | 创建人:人数据id |
| ModifyTime | 长高精度日期 | 数据修改时间 |
| ModifyBy | 整型 | 修改人:人数据id |
| IsDelete | 布尔 | 数据是否逻辑删除 |
处于查询性能考虑,此处把用户表和人员表的id储存了
此系列以技术积累一般(没有超级牛人)的组织为目标,数据量根本就不打算向阿里和企鹅的方向去想,设计目标够用就行,没成为GCC流传度软件那样的妄想。
所以,如果不是那种会害人产生经济损失或者技术上确实太丢人的bug,希望大家拿砖轻砸。版权声明:本文为博主原创文章,未经博主允许不得转载。
浙公网安备 33010602011771号