- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想知道在下一个场景中设计数据库表的最佳方式是什么:
我有一些公司、客户和员工具有一些共同领域,而其他领域则完全不同。最重要的是他们都有用户名、电子邮件和密码,以便能够登录管理系统。然后我想知道在表格中组织所有数据的最佳方式。此刻我在想
这样我只需要在用户登录时检查表 user 但我不知道是公司、客户还是员工(我必须检查所有表)。
我对此有点困惑,然后我不知道该怎么做......
感谢您的帮助。
最佳答案
如何摆脱 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 而不是空值来确定您拥有的对象类型。一旦您知道了您拥有的类型,特定于类型的代码就可以非常直接地进行查询,只需将 user
连接到任何派生表即可。例如,假设您知道您有一个 client
,client
代码可以直接查询 client
表,并且只需执行一个 join 到 user这就是所有需要的。
有关在传统数据库中布置面向对象数据的一些常见方法的更多信息,Python 的 SQLAlchemy 引用资料提供了一些通用方法:
http://docs.sqlalchemy.org/en/rel_0_9/
SQLAlchemy 是专门设计用于帮助解决对象关系映射问题的库,因此您可以了解它们是如何做事的。出于这个原因,我建议将其作为引用,而不是用于任何 Python 连接。
关于mysql - 在数据库中设计用户/角色/人员的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28597123/
是否有用于手动测试的代码覆盖工具?比如我新写了30行代码,编译,然后运行,有什么办法可以快速验证这30行都运行了吗? 另外,后来,在我将代码 checkin 正式版本后,有什么方法可以验证测试部门在进
老实说,这是一个家庭作业问题,但我已经浪费了好几个小时,而且无法正确解决。它返回错误数量的结果或错误的数据: 我需要选择参与指导电影和/或在电影中表演的每个人以及他们所做的次数,如果至少 5 次。 有
我正在尝试测试 MacOS 的应用内购买。输入测试用户凭据后,App Store 提示:“当前收据无效或 ds 人员 ID 不匹配。”并且购买失败。 最佳答案 我尝试了很多方法来解决这个问题。 Get
我正在为 Jenkins 使用 ActiveDirectory 插件,因此用户必须使用他们的凭据登录到 Jenkins。然后用户在 Jenkins 中被称为 joe.doe,这很完美。 当同一个人 c
如何从 Infopath 人员/组选取器检索电子邮件地址?当我将人员/组选取器添加到 infopath 表单时,我只得到 3 个字段 DisplayName、AccountId、AccountType
在 Snow Leopard 中,可以在 iCal 事件中显示空闲/忙碌时间。我搜索了 CalStore.framework 的 header ,但找不到任何描述该字段的属性。如何检索日历事件的忙/闲
是否有人成功地从专门针对 SharePoint 2013 的新建或编辑表单中获取用户(个人或组)字段的值? 我已经尝试了通过搜索互联网找到的所有解决方案以及我自己能想到的所有解决方案,所有结果都为空白
所以我需要将一个 Twitter 帐户添加到 ABRecordRef 中。然而,最快的方法似乎是获取社交资料属性的多值引用,创建它的可变版本,查找它是否有 Twitter 条目,如果已经有,则创建
我正在尝试将使用 Tomcat(最初是 5.5,但可以与 7 一起使用)在 MyEclipse 中开发的应用程序部署到我们的演示服务器 (Sun Java Web Server 7)。不幸的是,所有设
我是一名优秀的程序员,十分优秀!