日期:2014-05-18  浏览次数:20494 次

想就"管家婆"数据库结构设计的,与大家讨论!
想就"管家婆"数据库结构设计的,与大家讨论!
最近从网上下载了管家婆网络版,sql版,装上研究学习.
虽然程序代码看不到.但是sql存贮过程,还有数据库表结构是可以看到的.
我发现一个现象,想与大家讨论一下.

我发现所有表都增加了一个列,做为主键,但是这个列不是自增列,而且普通varchar型列,这个列的值也是递增的,诸如:
000001
000002
000003
这种形式,很明显,这是在管家婆程序中实现的自动编号(而不是数据库表本身的自增列,再说自增列只能用int型实现)
我发现,数据的更新,删除都是以这个列做为标识列的.
举个例子,比如员工表,就有以下几列,
其中序号列就是我上面所说的那个varchar型递增列
序号列,员工编码,员工姓名,性别,部门
000001,aaa,张小人,财务
000002,bbb,王红,劳资

我想问,为何这样设计呢?我理解用员工编码就可以呀,为何再多一个序号列呢?
而且我发现,员工编码也可以改??不解中


------解决方案--------------------
............
据我的观察:
1,基本信息表中都有一个类似于 typeid 的列,是用于标识该基本信息的一个关键字(不是数据库表的主键),整个账套中的对于该资料的引用都是用的该关键字,并且它的值是系统自动生成的(程序或存储过程中,不是数据库表自增).该字段的长短随类别级次的不同而不同(比如,你在管家婆的客户端做了一个资料的分类,那么新类别的长度就更长,并且是以父类的typeid 打头).

2,这么做的好处在于,无论你在用户端怎么修改资料(货品,员工,部门,仓库等的编号,名称,地址,电话等的数据 .)它都以 typeid 为关键字更新,就不会对已经存在的引用引起混乱.

3,比如你理解的员工编码,其实在管家婆的员工资料表中,它的员工编码就是该序列号(typeid),并且是用户不能更改的.但是你讲的可以更改的编码,其实修改的是 usercode 字段,而不是 typeid.

................
------解决方案--------------------
这个自定义的00001 00002列,当有数据被删除,可以很清晰的发现。
估计是用于查询的。

员工编号可以更新,如果做为唯一标识,处理起来也比较麻烦,要有唯一约束。

ps:一般的唯一标识是用户不能修改也无法看到的列。