如何构建此关系数据库

问题描述 投票:1回答:2

基本上,我将拥有3个具有关联关系的表。 他们是: usersdepartmentscompany

我的问题是这样的:

  • company可以有很多部门
  • 一个department只能隶属于一个公司
  • user只能是一个公司的一部分
  • user可以是多个部门的一部分

这实际上就是表关系的样子:

                    ____________________
                    | | | |            |
                    | | | |            |
--------      --------------      -----------
| user |      | department |      | company |
--------      --------------      -----------
 |   |         | | | | |               |
 |   |         | | | | |               |
 |   ___________________               |
 |                                     |
 |                                     |
 |                                     |
 _______________________________________

以上倍数| 行显示一个选项,因此上面的“公司”有4个部门,依此类推。

现在我的问题是,我应该如何构建关系表?

我应该有user_departmentsuser_companycompany_departments表吗?

基本上看起来像这样:

--------------------
| user_departments |
--------------------------------
| id | user_id | department_id |
--------------------------------

----------------
| user_company |
-----------------------------
| id | user_id | company_id |
-----------------------------

-----------------------
| company_departments |
-----------------------------------
| id | company_id | department_id |
-----------------------------------

还是有其他选择让我考虑/实施,而不是我要走的路,因为它似乎只会变得越来越复杂?

mysql sql schema erd
2个回答
3
投票

您实际上是在建立多余的关系。 您应该不需要company_departments,company_id只会是Departments表的一个字段,以引用一个部门所属的公司。 同样,您将不需要user_company表,但是将需要user_departments一个。 这是因为用户与部门之间的关系实际上是多对多的。

在给出的示例中,您只需要四个表。

company: company_id, other company info (such as name) 
department: department_id, company_id (referencing the company record), other department info 
user: user_id, company_id (referencing the company record), other user info
user_departments: user_id, department_id, perhaps information such as user's role in department, or if you want historical data preserved dates assigned to and removed from department

2
投票

这是您使用的格式的布局:

---------
| users |
--------------------------------
| id | name | company_id | ... |
--------------------------------

-----------
| company |
-------------------
| id | name | ... |
-------------------

-----------
| departments |
--------------------------------
| id | name | company_id | ... |
--------------------------------

--------------------
| user_departments |
--------------------------------
| id | user_id | department_id |
--------------------------------
© www.soinside.com 2019 - 2024. All rights reserved.