首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一家公司具有管理权的员工RBDMS设计

一家公司具有管理权的员工RBDMS设计
EN

Stack Overflow用户
提问于 2016-05-28 17:59:25
回答 2查看 50关注 0票数 0

我们有两种型号,CompanyEmployee。一家公司有很多员工。

Employees的绝大多数成员没有任何管理权限,但可能有一名或多名雇员拥有该公司的管理权力。

在DB中这样做的最好方法是什么?我可以想到以下两种方式,两者都有缺点和好处。

1)在Employee表中指示管理状态,即使这对于大多数员工来说是假的。好处是不必做任何联接来确定员工是否有管理员。

代码语言:javascript
复制
Company
-------
ID

Employee
--------
ID
Company ID
Is Admin 

2)在公司和员工之间创建一个连接表,并且只包括那些拥有管理权的员工。这需要一个连接,每次我们想要确定一个雇员是否有管理权限。

代码语言:javascript
复制
Company
-------
ID
Name

Employee
--------
ID
Company ID

AdminEmployee (Is there a better name for this?)
-------------
ID
Company ID
Employee ID
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-28 18:31:14

这样做的通常方法是创建可以与roles相关联的users。以下是您所需的最低要求:

列出所有公司的company表:

代码语言:javascript
复制
company
    id                  unsigned int(P)
    name                varchar(255)
    ...
+----+--------------------+
| id | name               |
+----+--------------------+
|  1 | Acme Brick Company |
|  2 | ABC Widgets Inc    |
| .. | .................. |
+----+--------------------+

列出所有可能角色的role表:

代码语言:javascript
复制
role
    id                  unsigned int(P)
    description     varchar(15)

+----+---------------+
| id | description   |
+----+---------------+
|  1 | Administrator |
|  2 | Clerk         |
| .. | ............. |
+----+---------------+

保存所有公司的所有用户信息的user表:

代码语言:javascript
复制
user
    id          unsigned int(P)
    company_id  unsigned int(F company.id)
    username    varchar(255)
    password    varbinary(255)
    etc.

+----+------------+----------+----------+-----+
| id | company_id | username | password | ... |
+----+------------+----------+----------+-----+
|  1 |          1 | bob      | ******** | ... |
|  2 |          2 | mary     | ******** | ... |
|  3 |          2 | john     | ******** | ... |
| .. | .......... | ........ | ........ | ... |
+----+------------+----------+----------+-----+

最后是一个关联表,将用户和角色绑定在一起。在示例数据中可以看到,用户bobACME Brick CompanyAdministrator,而用户maryABC Widgets IncAdministratorClerk,用户johnABC Widgets IncClerk

代码语言:javascript
复制
user_role
    user_id    unsigned int(F user.id)\_(P)
    role_id    unsigned int(F role.id)/

+----+---------+---------+
| id | user_id | role_id |
+----+---------+---------+
|  1 |       1 |       2 |
|  2 |       2 |       1 |
|  3 |       2 |       2 |
|  4 |       3 |       2 |
| .. | ....... | ....... |
+----+---------+---------+
票数 3
EN

Stack Overflow用户

发布于 2016-05-29 03:20:01

补充本尼上面的答案。

采用这种角色方法的一个重要原因是,用户可以通过不同的权限获得许多不同的角色。然后,您可以大大提高权限的粒度,而不需要大量增加成本(按db加载)。例如,您可以有一个采购职员和一个销售人员。或者,您可以拥有不同类型的管理员,拥有不同的权力领域,并且可以授予员工一个或多个权限。

它也避免了不必要的虚无等等,而且角色可以在你想要的时候懒洋洋地拉出来。这并不意味着其他方法必然是错误的,但它们通常不那么灵活。

对于另外两种方法,通常我会添加标志,如果我走那条路。通常,当应用程序是,而且您没有多个角色的域空间时,这会很有帮助(例如,我可以看到这样做适用范围有限的特定业务工具)。从理论上讲,分开的桌子比较干净,但实际上我不认为是这样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37502219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档