数据库设计(急救)(100分)

  • 主题发起人 主题发起人 gutian
  • 开始时间 开始时间
1)经典型
代码Table1
大类ID 大类NAME

代码Table2
大类ID 小类ID 小类NAME

业务表
.. 类别代码(大类ID + 小类ID) 小类代码 ...

注:假设大类ID2位,小类ID位, 则类别代码为6位,
这里ID均为char, 不足六位补零。

好处:关系清楚,查找快速,易于维护
坏处:代码表庸余。
也有将代码表合二为一的做法,
代码Table
类别ID 内容
XXYYYY

业务Table
类别ID 小类ID ...
XX YYYY

2)嵌套表
可用递归查询,算法简洁,适用初学算法使用。
递归极耗资源,频繁压栈、弹栈速度最慢。一旦数据过多,必死无疑。

3)


 
不用那么复杂的, 数据表中只要存入类名及编码就可以了. 编码时, 保证小类编码包含小类编码, 然后在 Delphi 中可以自己编写一个例程, 把这种包含信息改换成为树状结构, 用 ListVie 生成一个类似 windows 的资源管理器那样的东西, 可以用 + - 号打开或关闭一个子树, 同时对应在表中找到相应的记录, 就可以完成类代码的输入了, 而且用类别查询时特别方便. 我做的一个程序中就用到这样的技术, 各级单位层层包含, 关系极为明确, 反映很好
 
同意Crab。
对Demo的说明:
MAT_id like '010324006',SUBs is '01','03','24','006'
Subs用来在数据库中自动产生id,也可以查询。
SQL查询条件
1 全部子类:MAT_ID like 主类+'%'
2 本级子类:MAT_ID like 主类+'__'
 
可以采用与财务系统中科目编码的方法:
设每级代码为3字节;则基类为100~ZZZ,下一级子类为100000~ZZZZZZ,以此
类推,第四级子类为100000000000~ZZZZZZZZZZZZ。
 
如果采用编码的方法,是不是存在这样的问题,突然有一天,用户觉得
编码的长度不够了,是不是会存在要修改程序的问题。而且,这样要用户先
确定各级的编码的长度
 
对于这样的问题我的处理方式是:
数据表设计:ID(编码) varchar(15)、NAME(名称)varchar(30)、
PARENT(父编码)varchar(15)、Token(备注)varhcar(80)
说明: 其中TOKEN在录入时自动计算:token=父层Totken+本层名称
好处是:依据ID查询下一层类别或所有下层类别速度快
同时ID可随意编码
缺点是:修改NAME时,该层的TOKEN所有下层的TOKEN重新计算赋值
 
对于中小型企业,可采用2+2+4的格式其中前两位为大类编码,中间两位为小类编码
 
接受答案了.
 

Similar threads

后退
顶部