关于连锁公司、部门数据表设计问题

时间:2021-06-20 12:13:37
现在要开发一个集团连锁管理酒店系统,在设计公司、部门表的时候就碰到问题,但都有问题,希望有更好的方法
其中一个酒店的部门可能是多级形式,而且每个酒店下的部门都会在几十个,而且部门设置都差不多
第一种方法设计,一个表实现
编号   名称           父编号   编码
1     集团总部       0       
2     广州某酒店     1       01
3     财务部         2       0101
4     收银部        2       0102
5     公关部         2       0103
6     康乐部         2       0104
7     游泳池         6       010401
8     网球场         6       010402
9     桌球室         6       010403
这种方法存在的问题的是,如果要是新增很多酒店,就会增加很多部门数据
第二种方法  三个表设计
表1,公司表
表2、把所有部门抽出来形成一个不重复的部门表
表3、公司和部门关系表
虽然这种设计添加部门比较容易,但也存在问题,不能很好体现部门各级关系,最终不能形成一个公司、部门树

希望更多的人提出方法

15 个解决方案

#1


个人建议第一种

#2


第一种不错, 你部门表数据再多也多不过1W条吧 ,即便是多过了, 通过索引处理一下 不会影响速度就好, 至于数据的多少应该没什么关系吧

#3


你的表2 可以设计成不重复的部门各级关系表
    编号  部门  父编号

#4


本人觉得第二种方法  三个表设计 
表1,公司表 
表2、把所有部门抽出来形成一个不重复的部门表 
表3、公司和部门关系表
比较好

#5


第二种方法  三个表设计
表1,公司表
表2、把所有部门抽出来形成一个不重复的部门表
表3、公司和部门关系表
虽然这种设计添加部门比较容易,但也存在问题,不能很好体现部门各级关系,最终不能形成一个公司、部门树

这个比较符合范式

至于各级关系,可通过适当sql表达

#6


为什么不考虑用两种表实现呢?
ctlm01  com_id ,dept_id,dept_abbr(主表)
ctlm02  com_id ,dept_id,subdept_id,dept_abbr(次表)
在根造树的过程中,可以根据表ctlm01的dept_id 去对应所ctlm02中的dept_id中的subdept_id 
。。。。。。。。。
这样我觉得比较简单。

#7


这个可以对部门表,创建为一个代码表

然后采用第一种设计方式来创建表,那么公司是一张表,部门是就会有公司和部门代码表的2个外键,这样应该也不会错。
而且对于不同的公司统一的部门也好做数据统计。

实在的也是第一种的设计模式

#8


一个表即可。

#9


一个表是好,但加一个公司,然后就要新增几百个总部或者机构也是很麻烦的事,而且统一的部份实现数据统计也比较麻烦,第二种方法用三张表是可行,但表就比较多了

#10


一个表是好,但加一个公司,然后就要新增几百个部门或者机构也是很麻烦的事,而且统一的部门实现数据统计也比较麻烦,第二种方法用三张表是可行,但表就比较多了

#11


怎么没有人来了,我自己顶一下

#12


第一种方法
A酒店和B酒店的财务部是区别的,不同基础数据应有不同的基本码。

#13


当然这种设计是基于集中型数据管理的。
另外,如果嫌新增麻烦,你可以提供一个类似创建的功能,可以通过程序代码或存储过程实现。

一点意见,作为连锁,必然有业务的独立性,还是建议分布型数据库。

#14


比较一下:
1、表的维护方面:
第一种方法在新增,修改、删除部门时比较麻烦,因为需要检索所有的公司。
第二种方法在修改时非常简单,但在新增、删除时貌似简单,其时不然,因为需要对公司、部门关系表进行相应操作,只比第一种方式简单了一些。
2、表的使用方面:
第一种方式比较容易构建树型,结构简单;在引用时只需一个字段:部门代码(可以通过树获得其它信息)。
第二种方式也可以构建树型结构,但比较繁琐,而且结构复杂;在引用时需要两个字段:公司代码、部门代码。
3、表的扩展方面:
第一种方式可以任意扩展,对程序没有什么影响。
第二种方式有两种可能,一是一级部门可以在各公司不一样,二级部门及以下必须一样,在构建公司部门关系表时只需建立公司与一级部门的关系表,二级及以下部门通过一级部门关联到公司,这样在扩展方面就受到限制,二是不管部门级别,都与公司建立关系,这样做其扩展性与第一种一样,但明显的多此一举。


因此,应该用哪种方式楼主还是应根据情况自己分析了。

#15


另:
1、既能是连锁集团,部门的配置应该是一样的才对(由于地域不同,有些部门为空部门而已,并且表报应该一致,即便是空部门也应该列上)。
2、公司(或者称为法人)和部门的对象是不一样的,不能归并到一个表中,公司有地址、帐号等等,部门有办公室等。

#1


个人建议第一种

#2


第一种不错, 你部门表数据再多也多不过1W条吧 ,即便是多过了, 通过索引处理一下 不会影响速度就好, 至于数据的多少应该没什么关系吧

#3


你的表2 可以设计成不重复的部门各级关系表
    编号  部门  父编号

#4


本人觉得第二种方法  三个表设计 
表1,公司表 
表2、把所有部门抽出来形成一个不重复的部门表 
表3、公司和部门关系表
比较好

#5


第二种方法  三个表设计
表1,公司表
表2、把所有部门抽出来形成一个不重复的部门表
表3、公司和部门关系表
虽然这种设计添加部门比较容易,但也存在问题,不能很好体现部门各级关系,最终不能形成一个公司、部门树

这个比较符合范式

至于各级关系,可通过适当sql表达

#6


为什么不考虑用两种表实现呢?
ctlm01  com_id ,dept_id,dept_abbr(主表)
ctlm02  com_id ,dept_id,subdept_id,dept_abbr(次表)
在根造树的过程中,可以根据表ctlm01的dept_id 去对应所ctlm02中的dept_id中的subdept_id 
。。。。。。。。。
这样我觉得比较简单。

#7


这个可以对部门表,创建为一个代码表

然后采用第一种设计方式来创建表,那么公司是一张表,部门是就会有公司和部门代码表的2个外键,这样应该也不会错。
而且对于不同的公司统一的部门也好做数据统计。

实在的也是第一种的设计模式

#8


一个表即可。

#9


一个表是好,但加一个公司,然后就要新增几百个总部或者机构也是很麻烦的事,而且统一的部份实现数据统计也比较麻烦,第二种方法用三张表是可行,但表就比较多了

#10


一个表是好,但加一个公司,然后就要新增几百个部门或者机构也是很麻烦的事,而且统一的部门实现数据统计也比较麻烦,第二种方法用三张表是可行,但表就比较多了

#11


怎么没有人来了,我自己顶一下

#12


第一种方法
A酒店和B酒店的财务部是区别的,不同基础数据应有不同的基本码。

#13


当然这种设计是基于集中型数据管理的。
另外,如果嫌新增麻烦,你可以提供一个类似创建的功能,可以通过程序代码或存储过程实现。

一点意见,作为连锁,必然有业务的独立性,还是建议分布型数据库。

#14


比较一下:
1、表的维护方面:
第一种方法在新增,修改、删除部门时比较麻烦,因为需要检索所有的公司。
第二种方法在修改时非常简单,但在新增、删除时貌似简单,其时不然,因为需要对公司、部门关系表进行相应操作,只比第一种方式简单了一些。
2、表的使用方面:
第一种方式比较容易构建树型,结构简单;在引用时只需一个字段:部门代码(可以通过树获得其它信息)。
第二种方式也可以构建树型结构,但比较繁琐,而且结构复杂;在引用时需要两个字段:公司代码、部门代码。
3、表的扩展方面:
第一种方式可以任意扩展,对程序没有什么影响。
第二种方式有两种可能,一是一级部门可以在各公司不一样,二级部门及以下必须一样,在构建公司部门关系表时只需建立公司与一级部门的关系表,二级及以下部门通过一级部门关联到公司,这样在扩展方面就受到限制,二是不管部门级别,都与公司建立关系,这样做其扩展性与第一种一样,但明显的多此一举。


因此,应该用哪种方式楼主还是应根据情况自己分析了。

#15


另:
1、既能是连锁集团,部门的配置应该是一样的才对(由于地域不同,有些部门为空部门而已,并且表报应该一致,即便是空部门也应该列上)。
2、公司(或者称为法人)和部门的对象是不一样的,不能归并到一个表中,公司有地址、帐号等等,部门有办公室等。