标题:数据分类管理办法之管见
只看楼主
铁狐狸
Rank: 1
等 级:新手上路
帖 子:19
专家分:1
注 册:2014-4-14
结帖率:100%
已结贴  问题点数:20 回复次数:1 
数据分类管理办法之管见
看到一位朋友发的《请问,如何创建和使用组织机构?》帖子,以及其他高手的回复,觉得有必要将自己的工作心得与大家分享一下。
SQL数据库大多应用于一些管理领域,管理总是针对人和物的,而人的社会属性和物的自然属性,千差万别,种类繁多,要对人和物进行有效乃至高效的管理,就必然要对其分类,这种分类基本都是树形结构。
对于树形结构的理解,有N多的文章介绍,但多数研究的是结构中的枝干,而少有研究叶子的。只有将枝干和叶子一起研究,才能真正理解树形结构的一些理论基础。
本人对树形结构的理解,归纳起来,有以下一些基本要点:
1.    没有叶子的枝干没有存在意义。即任何最底层的分类下都必须有明细。
2.    不存在没有枝干的叶子。即不进行分类管理的数据不在树形结构的讨论范围。
3.    只有1个枝干不能称为树。即只有一级分类的数据也不在树形结构的讨论范围。
4.    每一片叶子到树根的路径长度可以是不同的。即所有分类管理的数据的明细代码长度不等。
5.    任意两片叶子到树根的路径都不相同。即所有分类管理的数据的明细代码是唯一的。为此,必须规定下面这条要点:
6.    叶子必须是所在枝干的最底层。已经长了叶子的枝干下,不能再生长新的枝干,某一个枝干下不能既有枝干又有叶子。在实际应用中,明细和分类不能处于同一级别上。
7.    一种树上的叶子可以在该树的所有枝干上移动。即可以改变明细的某种属性。如某位员工可以在不同单位或部门间调动。

设计数据库表,应坚持3个要点:
1.一个应用系统中所有的分类类别(即所有树的枝干)都可以放在一张表中。
2.不同树种的叶子,放在不同的明细表中。
3.任何明细数据(叶子)都不能放在分类表中。

分类表的设计要点:至少要有3个字段:ID、代码、名称,也可以增加一个“全称”字段, “名称”字段类似于文件夹的名称,“全称”字段类似于文件夹的绝对路径,全称字段中数据,应使用统一的分隔符分隔各级别。“全称”字段不是必须的,它可以用分类的代码作为参数通过一个特定的自定义函数获得。某个分类如果和其他数据有关联关系,也可以设置其他字段记录相应的ID值。

分类表的代码设计要点:

1.如果有多种分类(即多个树种),应增设一个区分分类属性的字段(如“类别”)。
2.不同种类(树种)下各级分类代码长度可以不同,但同一种类(树种)下各级代码长度必须相同。
3.某个种类各级代码长度应按最大所辖下级分类数量设置。实际应用中,每级代码长度2位应该够用,一个分类下面管理超过百种的下级,那种设置是不科学的。
4.某个种类下的明细代码长度必须大于该种类下分类级别的长度。例如,如果每级代码长度为2位,则明细代码长度必须是3位或大于3位。类别代码的长度不可能一致,但明细序号的长度必须一致。

所有叶子(明细)的代码都是由类别代码+明细序号组成,由于叶子的序号长度是固定的,所以完全可以通过叶子的代码获取它所属的类别。


下面以《请问,如何创建和使用组织机构?》帖子中的例子为例,说明数据组织和编码:
(假如不仅有机构组织分类,还有诸于供货商、存货、产品等等分类)
ID     类别      代码      名称         全称
1      机构      01        A集团       A集团
2      客户      02        华中地区     华中地区
3      机构      0101      B单位       A集团\ B单位
4      机构      010101    C1部门      A集团\ B单位\ C1部门
5      机构      01010101  D1科室      A集团\ B单位\ C1部门\ D1科室
6      机构      01010102  D2科室      A集团\ B单位\ C1部门\ D2科室
7      机构      010102    C2部门      A集团\ B单位\ C2部门


假如A集团员工数量较大,全部在职人数超过万人,而且人员流动频繁,再假如A集团\ B单位\ C1部门\ D2科室有个员工叫张三,张三入职时在该集团的序号是006789(注意这个序号是长度是6位,按减少数据冗余的理论,5位序号足够,但考虑企业的发展,在职员工可能突破10万,或者人员流动频繁,若干年后,新员工的序号也可能突破99999的,那时,5位序号就会带来很大麻烦),张三的代码就是01010102006789,假如张三从A集团\ B单位\ C1部门\ D2科室转调到A集团\ B单位\ C1部门工作(叶子在不同枝干上发生移动),张三的代码就变为010101006789。

这种对数据进行分类的最大好处有以下几点:
1.    由于不需要固定叶子的路径长度,树种叶子的分类级次不受限制,可以适用于所有分类管理的应用。
2.    极大的简化了编程,因为所有的分类都集中在一张表中,完全可以设计一个类,适当设计一些类属性,就可以应用于所有的数据分类程序界面。本人就是用这种方法,把分类管理和明细管理设计在一个界面上,在这个界面上,既可以编辑明细,也可以管理分类,而且界面非常简洁直观。
3.    这种分类管理办法,对于操作人员来说,强调的是业务逻辑,要想找到某片叶子,只要会顺藤摸瓜,就会很容易找到,而不需要死记硬背叶子代码。叶子代码不再是操作人员对叶子进行输入输出所必需的,而只是对叶子属性的数字表述。
搜索更多相关主题的帖子: 工作心得 SQL数据库 朋友 文章 机构 
2016-08-24 09:52
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:20 
金蝶的物料编码,就是这种规则。xx.xx.xx.xx.xxxxxxx
2016-08-24 11:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468139-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057825 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved