我正在编写多个多租户应用程序,每个应用程序都有单独的数据库(我决定采用共享数据库的不同模式方法)。每个应用程序都有员工表,用于租户的员工和客户,以及客户。
问题是我所有的应用程序都共享这两个表,因此如果每个数据库都将完全独立,就会有重复项。
我想过拥有一个包含 Staffs 和 Customers 表的公共数据库,并有一个不同的应用程序(如 Oauth2 服务器)处理注册和登录。然后在每个多租户应用程序中有存根表用户,列id
和role
(客户/员工)形成主键,并分别从远程员工和客户获取他们的数据。
我不确定这是一个好方法,所以如果有更好的方法来处理它。
如果不清楚,请在评论中告诉我。
所以这就是我想出的方法。将所有用户信息和详细信息存储到 Oauth2 服务器/登录 API 并使用它进行登录。然后在每个服务表中只存储用户 ID,从登录到 Oauth2 服务器/登录 API 时获取的角色,并将它们保存到特定服务的“用户”表中。这样您就可以在防止重复的同时保持服务数据的完整性。
至于 Oauth2/Login 服务,你可以使用 Party-Roles 模型(也称为 Super-Type/Sub-Type)。该视频很好地说明了这一点,但如果您无法观看,只需创建人员表,然后创建与人员表相关的客户和员工表,并与类型建立一对一的关系。
感谢@Sahap Asci 在评论中指出这一点。