如何构建这个关系数据库

时间:2015-05-06 00:30:21

标签: mysql sql schema erd

基本上我会有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 |
-----------------------------------

还是有其他选择供我考虑/实施,而不是我要去的路径,因为它似乎只会继续变得复杂?

2 个答案:

答案 0 :(得分:3)

您实际上是在建立冗余关系。您应该不需要company_departments,company_id将只是department表的一个字段,以引用一个部门所属的公司。同样,您不需要user_company表,但是您需要user_departments一个;这是由于用户 - 部门关系实际上是多对多的。

根据你给出的例子,你应该只需要四张桌子。

j = {'collection': [{'id': 1, 'user_id': 1}]}

def get_qualified_users(users):
    qualified_users = []
    for user in users:
        if user and user['user_id']:
            qualified_users.append((user['user_id'], user['id']))
    return qualified_users

print(get_qualified_users(j['collection']))

答案 1 :(得分:2)

以下是您使用的格式的布局:

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

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

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

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