2017-07-18 123 views
0

为多租户应用程序,我们有以下的数据库设计: enter image description here数据库设计的多租户应用

它是基于共享数据库的方法。既然我们确定使用公司ID租户(每个公司都有一套不同的员工和他们的任务等),我的问题是

我们需要在任务表中的companyId键也让每一个记录 的任务可以使用公司Id或OR明确标识,我们应该始终使用Join?

因为如果我们在任务中使用companyId将不会是一个适当规范化的数据库,因为任务将涉及公司和员工,这也与公司有关。

回答

0

这是一个意见。我的看法是将companyId作为主键的一部分,因此是每个表中的必填字段。

在多租户应用程序中,我们应该确保数据不会在没有公司代码的情况下添加到表中。没有将它作为主键或非空字段的一部分,就需要程序逻辑来确保这一点。在我看来,DB也应该保证。第二个问题是与表任务ID。 2家公司有可能拥有相同的员工编号和相同的任务ID。数据库不应限制这一点。

+0

任何id(Employeeid,CompanyId,TaskId)是数据库工件,对用户不可见,不能由用户以任何方式操作。 –

+0

同意它不能被用户操纵。当你有新的租户将使用类似的ID给现有的租户时,麻烦就会发生。要么你的应用程序逻辑必须覆盖,否则你可能会突然间出现错误的结果。我的建议是在桌面上确保不同的租户数据可以存活,而不会对数据施加任何条件。 –

+0

他们不会使用相同的ID:例如,在不同的公司中有两名同名的员工:**公司A的员工James **的ID为45,但Z公司的詹姆斯的ID为678.用户访问员工:James,但如果他是A公司的用户,ID是45,但如果来自Z公司的用户是678. –