浅谈erp系统数据库设计

  最近在做一个erp系统的项目,从进公司开始接手这个项目已经有半年多了,这套系统运用的是新技术,老系统的需求,数据是原来已经建好的。

  背景:100多家分店,每个分店有着相同的数据表,按照城市来建立数据库,都是sqlserver数据库。需求,我们这里有统计报表类需求,也有切换到各个城市源查询数据。

   报表类需求,是需要获取所有的分店数据,用多线程去切换数据源查询,太麻烦。迁移到drds数据库中间件,不能直接用,因为drds只支持mysql数据库。还有一个问题,老数据迁移成功了,但是,还有一个数据同步的问题。事情还是回归到原始状态。

  最后考虑使用当当网开源的shardingjdbc数据库中间件。只需要配置所有的数据源,然后需要一个sdid,全局唯一id,还要一个scity数据库路由字段,这里不用分表,分库就可以,每张表都要加上这两个字段,这里需要触发器统一配置,添加一个新记录会加上sdid和scity,触发器中写好了算法,保证sdid唯一。因为jpa entity中只能指定一个主键,如果将sdid作为主键,那么原来的业务主键就没有了,导致aio中app运行不了,数据持久层放弃使用jpa,最后选择了mybatis作为持久层框架,在使用过程中,shardingjdbc对于sql支持仅仅部分,or,虚表,分页不支持,由于是老系统二次开发,这给我们造成了极大的苦难,很多情况只能多次查询,在业务层做处理,特别苦恼的地方是,不支持sqlserver的分页,只支持很简单的,跨库操作的关联,分页就不支持。后来我们只是在springbatch中使用shardingjdbc,对查询性能无要求的业务中使用。

当然最好的方法还是要迁移到阿里云drds中,这里就需要一个数据同步问题,消息队列,或者是sqlserver日志解决毫秒级数据更新的方式正在尝试中,如果解决了及时同步,我们彻底打通数据源整合到阿里云drds当中,对于后期的维护和扩展相对容易很多。

Manage( 管理员表) "列名 "列的数据类型 "是否能为"默认值 "说明 " " " "空 " " " "Manger_Id "int "0 " "主键,自增 " "Manger_Name "Nvarchar(10) "0 " "管理员登录 " " " " " "名 " "Manger_Pwd "Nvarchar(32) "0 " "管理员MD5加" " " " " "密后的密码 " "Manger_RealName "Nvarchar(5) "0 " "管理员的真 " " " " " "实姓名,这 " " " " " "里考虑到复 " " " " " "姓 " "Manger_Address "Nvarchar(50) "0 " "管理员的住 " " " " " "址 " "Manger_Mobile "Nvarchar(11) "0 " "管理员的手 " " " " " "机号 " "Manger_Tel "Nvarchar(11) "0 " "管理员的办 " " " " " "公电话(带 " " " " " "区号) " "Manger_Gender "bit "1 "0 "管理员的性 " " " " " "别0为男性," " " " " "1为女性 " "Manger_IdNum "Nvarchar(18) "0 " "管理员的身 " " " " " "份证号 " "Manger_AddTime "Date "0 " "管理员添加 " " " " " "的时间 " "Manger_UpdateTime "Date "1 "和添加时 "管理员修改 " " " " "间相同 "的时间 " "Manger_TypeGroupId "Nvarchar(3) "0 " "管理员权限 " " " " " "组 " "Manger_TypeId "Nvarchar(50) "0 " "管理员所有 " " " " " "的权限用"," " " " " ""分割 " "Manger_IsLock "bit "0 " "管理员是否 " " " " " "禁用 " "Manger_MsgUnReadId "Nvarchar(max) "1 "您的消息 "管理员未读 " " " " "已经读完 "消息id用"," " " " "了 ""分割 " "Manger_CustomerUnDo"Nvarchar(max) "1 "暂时还没 "管理员尚未 " " " " "有 "完成的安排 " " " " " "客户的任务 " "Manger_ShouldData "Int "1 "0 "管理员应该 " " " " " "完成的任务 " " " " " "数量 " "Manger_HasDoneData "Int "1 "0 "管理员已经 " " " " " "完成的任务 " " " " " "数量 " Message表(网站公告表) "列名 "数据类型 "是否能为 "默认值 "说明 " " " "空 " " " "Msg_Id "Int "0 " "公告ID,主键" " " " " ",自增 " "Msg_FromMangerId "Int "0 " "发送公告的 " " " " " "管理员Id " "Msg_ToGroupId "Int "0 " "管理员发送 " " " " " "到的用户组I" " " " " "d " "Msg_Title "Nvarchar(25) "0 " "公告的标题," " " " " "最长25个中 " " " " " "文字符 " "Msg_Summary "Nvarchar(255) "1 "文件内容 "公告的摘要 " " " " "的前255个"部分,最长 " " " " "字 "为255个中文" " " " " "字符 " "Msg_Coutent "Nvarchar(max) "0 " "公告的主题 " " " " " "部分 " "Msg_IsTop "bit "1 "0 "公告是否置 " " " " " "顶 " "Msg_IsImportent "Bit "1 "0 "公告是否为 " " " " " "重要类型 " "Msg_IsEmergent "Bit "1 "0 "公告是否为 " " " " " "紧急类型 " Customer表(客户表) "列名 "数据类型 "是否可 "默认值 "说明 " " " "为空 " " " "Customer_Id "Int "0 " "客户的id " "Customer_MangerID "Int "0 " "客户所属的" " " " " "管理员的id" "Customer_CompanyId "Int "0 " "客户所属公" " " " " "司id
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值