基本上我会有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 |
-----------------------------------
还是有其他选择供我考虑/实施,而不是我要去的路径,因为它似乎只会继续变得复杂?
答案 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 |
--------------------------------