我想知道在下一个场景中如何在数据库中设计表格的最佳方法:
我有公司,客户和员工,他们有一些共同的领域,而其他人则完全不同。最重要的是他们都有一个用户名,电子邮件和密码,可以在管理系统中登录。然后我想知道在表格中组织所有数据的最佳方法。目前我在想
这样我只需要在用户登录时检查表用户,但我不知道是公司,客户还是员工(我必须检查所有表)。
我对此有点困惑然后我不知道该怎么做......
感谢您的帮助。
答案 0 :(得分:1)
如何删除user_role
和user_role_link
表格,因为您已经在其他表格中获得了所需信息,然后您不必维护所有这些链接:
user (id, email, username, password)
company (id, user_id, name, ...)
client (id, user_id, first_name, last_name, ...)
employee (id, user_id, first_name, last_name, start_date, end_date, ...)
请注意,没有"角色"因为客户,公司和员工都有一个"用户。所以你拥有的是上面的聚合模型。
除此之外,您可能提出的是面向对象的继承方法。通过该过滤器,您可以拥有用户,公司,客户和员工,其中后三者是"""用户。事实上,在这种情况下,公司,客户和员工实际上可以与用户共享相同的ID,因为它们本质上是同一个对象!它们都来自用户并且是用户。 (但除非你知道你正在做什么,否则我不一定会建议这个选项。)
所以这些是我在这里看到的两个选项 - 聚合或继承。
请注意,如果丢失链接表,您仍然可以通过在所有三个表上执行外连接并检查哪个表的ID字段带有ID而不是ID来确定您拥有的对象类型为空。一旦你知道了你的类型,特定于类型的代码就可以非常简单地查询,只需要一个连接,user
就可以得到任何派生表。例如,假设您知道自己拥有client
,client
代码可以直接针对client
表进行查询,只需对用户进行一次加入即可。所有这些都需要。
有关在传统数据库中布置面向对象数据的一些常用方法的更多信息,Python SQLAlchemy上的参考资料提供了一些通用方法:
http://docs.sqlalchemy.org/en/rel_0_9/
SQLAlchemy是一个专门用于帮助解决对象关系映射问题的库,因此您可以看到它们是如何做的。我建议将此作为参考,而不是任何Python连接。
答案 1 :(得分:0)
这是我的方式。我创建了一个Profile表...而users / employ / clients使用它。 并且用户应该获得一个角色。如果您想要创建用户组,则需要创建用户组表。
表"用户": id_user 创建日期 date_deleted id_role id_profile 用户名 别号 密码 password_question password_answer
Table "role":
id_role
date_created
date_deleted
name (35)
description
Table "permission":
id_permission
date_created
date_deleted
name
description
Table "permission_assigned":
id_permission_assigned
date_created
date_deleted
id_permission
id_user
id_role
Table "user_session":
id_user_session
id_user
logon_date
logoff_date
ip_address (45)
user_agent (413)
Table "profile":
id_profile
date_created
date_deleted
first_name (35)
last_name (35)
sex
email (254)
phone (15)
birthday
address (40)
id_country
id_state
id_city
zip_code (10)
description