2

我已经与 Salesforce.com 合作了几年,为了进行心理锻炼/挑战,我试图想出一个类似的解决方案来处理他们的“数据库”(是的,我知道他们并没有真正使用表格和视图,但元数据)。事实证明,这比最初预期的更具挑战性。

请记住,我并不是要重新发明 SFDC。我只是想探索多租户实现的解决方案。

要求

  1. 必须能够处理多个客户/租户,而不会将客户特定数据暴露给其他客户,并且不使用客户特定数据库。
  2. 所有客户都必须具有对一组标准表格的标准化访问权限(即 Select * from Account 返回与请求客户关联的所有帐户)
  3. 所有客户都必须能够将自定义字段添加到所有标准表。
  4. 所有客户都必须能够添加自定义表格。
  5. 任何客户的自定义字段必须只对该客户可见,即使“添加”到标准表中也是如此。
  6. 任何客户的自定义表格只能对该客户可见。
  7. 理想情况下,此解决方案不会特定于一个 RDBMS。(不能依赖 PostgreSQL 的 search_path)

我的解决方案

  1. 创建多模式数据库设计,其中标准表存储在“主”模式 ( Primary.TrueAccounts) 中。
  2. 为每个客户创建一个带有基表的单独模式,以保存将它们链接回Primary.TrueAccounts( Cust1.AccountCustomFields) 的 FK。此表将添加任何自定义字段。
  3. 客户的自定义表只会添加到他们的架构中。
  4. 对于每个标准表,在客户模式中创建一个视图,将标准列与该客户的自定义列 ( CREATE VIEW Cust1.Accounts AS SELECT t1.field1, t1.field2, t2.* FROM Primary.TrueAccounts AS t1 LEFT JOIN Cust1.AccountCustomFields AS t2 ON t1.id = tw.Accountid WHERE t1.CustomerId = 1)

我已经在 MySQL 工作台中模拟了这个基本解决方案,所以我知道它至少是可能的。

我的终极问题是“我是怎么做到的?”。是否有更好/标准/不那么难看/更有效的方式来满足上述要求?

4

0 回答 0