首页

文章

用友财务软件的数据库设计

发布网友 发布时间:2022-04-19 10:52

我来回答

1个回答

热心网友 时间:2023-08-26 18:23

采用自增长主要是性能

早期的数据库系统,经常采用某种编号,比如身份证号码,公司编号等等作为数据库表的

然而,很快,大家就发现其中的不利之处

比如早期的医院管理系统,用身份证号码作为病人表的

然而,第一,不是每个人都有身份证;第二,对于国外来的病人,不同国家的病人的证件号码并不见得没有重复

因此,用身份证号码作为病人表的是一个非常糟糕的设计

考虑到没有医生或者*会刻意去记这些号码,使用自增长是更好的设计

公司编号采用某种特定的编码方法,这也是早期的数据库系统常见的做法

它的缺点也显而易见:很容易出现像千年虫的软件问题,因为当初设计数据库表的时候设计的位数太短,导致系统使用几年后不能满足要求,只有修改程序才能继续使用

问题在于,任何人设计系统的时候,在预计某某编号多少位可以够用的时候,都存在预计不准的风险

而采用自增长则不存在这种问题

同样的道理,没有人可以去记这些号码

使用自增长另外一个原因是性能问题

略有编程常识的人都知道,数字大小比较比字符串大小比较要快得多

使用自增长可以大大地提高数据查找速度

2

避免用复合主键(compound)这主要还是因为性能问题

数据检索是要用到大量的值比较,只比较一个字段比比较多个字段快很多

使用单个从编程的角度也很有好处,sql语句中where条件可以写更少的代码,这意味着出错的机会大大减少

3

双主键双主键是指数据库表有两个字段,这两个字段独立成为主键,但又同时存在

数据库系统的双主键最早用在用户管理模块

最早的来源可能是参照操作系统的用户管理模块

操作系统的用户管理有两个独立的主键:操作系统自己自动生成的随机ID(Linux,windows的SID),loginid

这两个ID都必须是唯一的,不同的是,删除用户test然后增加一个用户test,SID不同,loginid相同

采用双主键主要目的是为了防止删除后增加同样的loginid造成的混乱

比如销售经理hellen本机共享文件给总经理peter,一年后总经理离开公司,进来一个普通员工peter,两个peter用同样的loginid,如果只用loginid作操作系统的用户管理主键,则存在漏洞:普通员工peter可以访问原来只有总经理才能看的文件

操作系统自己自动生成的随机ID一般情况下面用户是看不到的

双主键现在已经广泛用在各种数据库系统中,不限于用户管理系统

4

以固定的数据库、表应付变化的客户需求这主要基于以下几个因素的考虑:4

1大型EPR系统的正常使用、维护需要软件厂商及其众多的合作伙伴共同给客户提供技术服务,包括大量的二次开发

如果用户在软件正常使用过程中需要增加新的表或者数据库,将给软件厂商及其众多的合作伙伴带来难题

4

2软件升级的需要

没有一个软件能够让客户使用几十上百年不用升级的

软件升级往往涉及数据库表结构的改变

软件厂商会做额外的程序将早期版本软件的数据库数据升级到新的版本,但是对于用户使用过程中生成的表进行处理就比较为难

4

3软件开发的需要

使用固定的数据库库表从开发、二次开发来说,更加容易

对于用户使用过程中生成的表,每次查找数据时都要先查表名,再找数据,比较麻烦

举例来说,早期的用友财务软件用Aess作数据库,每年建立一个新的数据库

很快,用户和用友公司都发现,跨年度数据分析很难做

因此这是一个不好的设计

在ERP中,很少有不同的年度数据单独分开

一般来说,所有年份的数据都在同一个表中

对于*公司甚至整个集团公司都用同一个ERP系统的时候,所有公司的数据都在一起

这样的好处是数据分析比较容易做

现在大多数数据库系统都能做到在常数时间内返回一定量的数据

比如,Oracle数据库中,根据在100万条数据中取10条数据,与在1亿条数据中取10条数据,时间相差并不多

5

避免一次取数据库大量数据,取大量数据一定要用分页

这基本上是现在很多数据库系统设计的基本守则

ERP系统中超过100万条数据的表很多,对于很多表中的任何一个,一次取所有的会导致数据库服务器长时间处于停滞状态,并且影响其它在线用户的系统响应速度

一般来说,日常操作,在分页显示的情况下面,每次取得数据在1-100之间,系统响应速度足够快,客户端基本没有特别长的停顿

这是比较理想的设计

这也是大型数据库系统往往用ODBC,ADO等等通用的数据库联接组件而不用特定的速度较快的专用数据库联接组件的原因

因为系统瓶颈在于数据库(Database)方面(数据量大),而不在于客户端(客户端每次只取少量数据)

在B/S数据库系统中,分页非常普遍

早期的数据库系统经常有客户端程序中一次性取大量数据做缓冲

现在已经不是特别需要了,主要原因有:5

1数据库本身的缓冲技术大大提高

大部分数据库都会自动将常用的数据自动放在内存中缓冲,以提高性能

5

2数据库联接组件的缓冲技术也在提高

包括ADO在内的一些数据库联接组件都会自动对数据结果集(resultset)进行缓冲,并且效果不错

比较新颖的数据库联接组件,比如Hibernate也加入了一些数据结果集缓冲功能

当然,也有一些数据库联接组件没有对数据结果集进行缓冲,比如JDBCDriver,不过几年之内情况应该有所改观

也有些不太成功的数据缓冲,比如EJB中的实体Bean,性能就不尽如人意,实体Bean数据也是放在内存中,可能是因为占用内存过多的缘故

相对来说,今天的程序员写客户端数据缓冲,能够超过以上两个缓冲效果的,已经比较难了

土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 做豆沙包的方法与步骤 用友T3如何做数据库附加?请各位高手指教啊,急!!! 豆沙包的做法 用友t3还未审核的记账凭证录入错误怎么修改 豆沙包做法 用友T+对电脑配置有什么要求 自制豆沙包的做法大全 用友t3 存货档案 在数据库sql2000是哪一张表 豆沙包的包法怎么包 用友t3标准版数据库 家常豆沙包的做法 用友t3用友通标准版用什么版本的数据库 豆沙包子的做法和包法是什么? oppoa9s电池 OPPO A9的电池是否可以拆卸? RX5504G显卡能玩使命召唤战区吗? 显卡gt1030. 和rx550. 哪个好 NVIDIA GeForce GTX 750适不适合我的电脑 迪兰RX550显卡值得买吗 华硕RX550-4G怎么样?华硕RX550-4G好吗 用友T3数据库如何安装? 豆沙包子的做法和包法 豆沙包的花样做法简易 用友T3标准固定资产模块固定资产主要涉及的表有哪些 用友t3标准版如何查询已生成报表 如何制作豆沙包? 请问用友T3都有哪些功能呢? 豆沙包的家庭制作方法 用友T3怎么生成财务报表 谢谢 豆沙包怎么制作 用友软件工资表如何更改人员编号 怎么做豆沙包? 用友T3财务软件里面的资料怎么倒出来 豆沙包有营养? 用友T3如何出具资产负债表,利润表,现金流量表? 豆沙包的制作方法和步骤 用友 应收 手工核销保存在哪张表? 用友T3项目帐,如何给某个科目设置项目大类 用友软件的单据储存在哪里 用友t3软件如何导出会计科目余额汇总表
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com