基本上,我将拥有3个具有关联关系的表。 他们是: users
, departments
和company
。
我的问题是这样的:
company
可以有很多部门 department
只能隶属于一个公司 user
只能是一个公司的一部分 user
可以是多个部门的一部分 这实际上就是表关系的样子:
____________________
| | | | |
| | | | |
-------- -------------- -----------
| user | | department | | company |
-------- -------------- -----------
| | | | | | | |
| | | | | | | |
| ___________________ |
| |
| |
| |
_______________________________________
以上倍数|
行显示一个选项,因此上面的“公司”有4个部门,依此类推。
现在我的问题是,我应该如何构建关系表?
我应该有user_departments
, user_company
和company_departments
表吗?
基本上看起来像这样:
--------------------
| user_departments |
--------------------------------
| id | user_id | department_id |
--------------------------------
----------------
| user_company |
-----------------------------
| id | user_id | company_id |
-----------------------------
-----------------------
| company_departments |
-----------------------------------
| id | company_id | department_id |
-----------------------------------
还是有其他选择让我考虑/实施,而不是我要走的路,因为它似乎只会变得越来越复杂?
您实际上是在建立多余的关系。 您应该不需要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
这是您使用的格式的布局:
---------
| users |
--------------------------------
| id | name | company_id | ... |
--------------------------------
-----------
| company |
-------------------
| id | name | ... |
-------------------
-----------
| departments |
--------------------------------
| id | name | company_id | ... |
--------------------------------
--------------------
| user_departments |
--------------------------------
| id | user_id | department_id |
--------------------------------