请教多用户的数据库设计 多公司+多用户+多权限

时间:2022-08-29 11:49:02
正在做一个系统,系统为10个公司提供相同的服务,然各公司只能看到自己的信息
各个公司有自己的几个用户名,各个用户名的权限限制不同

我在做的时候几乎为每张表都加入了corpId 公司编号。  
每次做任何的数据库查找都要带上corpId。
请问是否有更好,更科学的方法?

11 个解决方案

#1


用户表(user):username,password,position,corpid;
公司表(corp):corpid,corpname;

前端的登陆界面,除了用户名、密码之外,添加一个下拉框选择公司名称
使用两个表的联合查询
sql = "SELECT a.position FROM user a,corp b WHERE a.corpid = b.corpid AND a.username
 = ? AND a.password = ? AND b.corpname = ?";
把输入的用户名、密码、公司名称这三个数据代入到三个?号中。

根据查询到的position值来提供不同的服务。



#2


根据position值提供不同服务?
如何判定记录属于哪个公司的数据?
如果A公司产生的数据  加一个position字段吗?

#3


引用 1 楼 liuhuabai100 的回复:
用户表(user):username,password,position,corpid;
公司表(corp):corpid,corpname;

前端的登陆界面,除了用户名、密码之外,添加一个下拉框选择公司名称
使用两个表的联合查询
sql = "SELECT a.position FROM user a,corp b WHERE a.corpid = b.corpid AND a.u……


#4


这难道不比拆10个表科学 ?
嫌麻烦就做视图,select * from View_ where corpid = decode(login_user,用户1,公司1,用户2,公司2......)开发人员把视图当单表。

#5


写个对象把登入的用户加载进去就好了

#6


给每个公司都建立一个数据库的用户名,所有数据库用户下得表结构什么的都一样,再做一个公共的数据库用户,里面做一些公共的功能,比如登陆,权限划分之类的,每次登陆时,判断登陆用户属于哪一个数据库用,直接指过去就行了。

你这个功能相当于我们原来做得电信系统,比如广东有21个地市,每个地市的数据都不一样,每个地市都建立一个用户就解决了

#7


每个表加公司ID,这样就可以,6楼也行,其他的方式都不可取,要清楚,数据很重要,从最底层的数据层面区分开是最好

#8


建议分开,一个公司一个表空间,里面的表结构一样。
非要揉在一起的话,可以用分区表,按公司编号做分区键。 查询的时候 加上 partition(part_id)关键字即可。

#9


引用 8 楼 fmjwn 的回复:
建议分开,一个公司一个表空间,里面的表结构一样。
非要揉在一起的话,可以用分区表,按公司编号做分区键。 查询的时候 加上 partition(part_id)关键字即可。


同意8楼,如果一定要在一起就用分区表

#10


同意,用分区表

#11


学习了`,感谢各位

#1


用户表(user):username,password,position,corpid;
公司表(corp):corpid,corpname;

前端的登陆界面,除了用户名、密码之外,添加一个下拉框选择公司名称
使用两个表的联合查询
sql = "SELECT a.position FROM user a,corp b WHERE a.corpid = b.corpid AND a.username
 = ? AND a.password = ? AND b.corpname = ?";
把输入的用户名、密码、公司名称这三个数据代入到三个?号中。

根据查询到的position值来提供不同的服务。



#2


根据position值提供不同服务?
如何判定记录属于哪个公司的数据?
如果A公司产生的数据  加一个position字段吗?

#3


引用 1 楼 liuhuabai100 的回复:
用户表(user):username,password,position,corpid;
公司表(corp):corpid,corpname;

前端的登陆界面,除了用户名、密码之外,添加一个下拉框选择公司名称
使用两个表的联合查询
sql = "SELECT a.position FROM user a,corp b WHERE a.corpid = b.corpid AND a.u……


#4


这难道不比拆10个表科学 ?
嫌麻烦就做视图,select * from View_ where corpid = decode(login_user,用户1,公司1,用户2,公司2......)开发人员把视图当单表。

#5


写个对象把登入的用户加载进去就好了

#6


给每个公司都建立一个数据库的用户名,所有数据库用户下得表结构什么的都一样,再做一个公共的数据库用户,里面做一些公共的功能,比如登陆,权限划分之类的,每次登陆时,判断登陆用户属于哪一个数据库用,直接指过去就行了。

你这个功能相当于我们原来做得电信系统,比如广东有21个地市,每个地市的数据都不一样,每个地市都建立一个用户就解决了

#7


每个表加公司ID,这样就可以,6楼也行,其他的方式都不可取,要清楚,数据很重要,从最底层的数据层面区分开是最好

#8


建议分开,一个公司一个表空间,里面的表结构一样。
非要揉在一起的话,可以用分区表,按公司编号做分区键。 查询的时候 加上 partition(part_id)关键字即可。

#9


引用 8 楼 fmjwn 的回复:
建议分开,一个公司一个表空间,里面的表结构一样。
非要揉在一起的话,可以用分区表,按公司编号做分区键。 查询的时候 加上 partition(part_id)关键字即可。


同意8楼,如果一定要在一起就用分区表

#10


同意,用分区表

#11


学习了`,感谢各位