Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在数据库中设计用户/角色/人员的最佳实践_Mysql_Database_Database Design_Database Schema - Fatal编程技术网

Mysql 在数据库中设计用户/角色/人员的最佳实践

Mysql 在数据库中设计用户/角色/人员的最佳实践,mysql,database,database-design,database-schema,Mysql,Database,Database Design,Database Schema,我想知道在下一个场景中,在数据库中设计表的最佳方法是什么: 我的公司、客户和员工都有一些共同的领域,而其他领域则完全不同。最重要的是他们都有一个用户名,电子邮件和密码,以便能够登录到一个管理系统。然后我想知道将所有数据组织到表中的最佳方法。当时我在想 用户(id、角色id、电子邮件、用户名、密码) 用户角色(id、家长id、姓名)--公司、客户、员工 用户角色链接(用户id、角色id) 公司(id、用户id、姓名等) 客户端(id、用户id、名字、姓氏等) 员工(id、用户id、名字、姓氏、开

我想知道在下一个场景中,在数据库中设计表的最佳方法是什么:

我的公司、客户和员工都有一些共同的领域,而其他领域则完全不同。最重要的是他们都有一个用户名,电子邮件和密码,以便能够登录到一个管理系统。然后我想知道将所有数据组织到表中的最佳方法。当时我在想

  • 用户(id、角色id、电子邮件、用户名、密码)
  • 用户角色(id、家长id、姓名)--公司、客户、员工
  • 用户角色链接(用户id、角色id)
  • 公司(id、用户id、姓名等)
  • 客户端(id、用户id、名字、姓氏等)
  • 员工(id、用户id、名字、姓氏、开始日期、结束日期等)
这样,当用户登录时,我只需检查表用户,但我不知道是公司、客户还是员工(我必须检查所有表)

我有点困惑,然后我不知道怎么做


谢谢您的帮助。

摆脱
user\u role
user\u role\u 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
,就可以查询到任何一个派生表。例如,假设您知道您有一个
客户机
客户机
代码可以直接查询
客户机
表,只需对用户进行一次连接,就可以了

有关在传统数据库中布局面向对象数据的一些常用方法的更多信息,有关Python的SQLAlchemy的参考资料提供了一些通用方法:


SQLAlchemy是一个专门设计用于帮助解决对象关系映射问题的库,因此您可以看到它们是如何工作的。出于这个原因,我建议将其作为参考,而不是任何Python连接。

这是我的方式。我创建了一个配置文件表。。。用户/雇员/客户使用它。 并且用户应该获得一个角色。如果要创建用户组,则需要创建用户组表

表“用户”: id\u用户 创建日期 删除日期 id_角色 身份证档案 用户名 别名 密码 密码问题 密码与答案

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

不清楚你的意思你能做一个简单的例子,表名和字段我是怎么做的吗?谢谢(添加了其他示例表。)如果您有一个user_role表(这似乎是一个合理的想法),那么我认为在user表中设置role_id列没有任何意义。