多租户,每个租户拥有未知的动态数据

时间:2014-01-29 04:01:53

标签: php postgresql multi-tenant

我正在研究一个系统,其中要求是:

  1. PHP + PostgreSql
  2. 多租户系统,为所有租户使用单个数据库(tenantId)。
  3. 每个租户的数据都是未知的,因此他们应该可以灵活地添加他们想要的任何数据:

    • e.g。对于帐户表,

    租户1> account_no | date_created | DUE_DATE

    租户2> account_holder | start_date | end_date | customer_name | ...

  4. 我能看到的唯一解决方案是使用键值对数据库结构:      - 例如

    accounts table
                id  | tenant_id  | key          | value
                1   1             account_no    12345
    
    
    
    accounts_data table
                account_id | key                | value
                1           date_created        01-01-2014
                1           due_date            30-02-2014
    

    从长远来看,我看到这种方法的缺点:

    - Monster queries
    - Inefficient with large data
    - Lots of coding to handle data validation, since no data types are there and everything is saved as string
    - Filtering can be lots of work
    

    话虽如此,我会很感激建议,以及我可以用来实现这一目标的任何其他方法。

1 个答案:

答案 0 :(得分:2)

警告,您正走进inner platform effectEnterprisey design

慢慢停下来,然后重新审视你对为什么你必须这样做的假设。

必须在这里给予一些东西;之一:

  • 将无模式自由格式数据库用于无模式自由格式数据;

  • 允许租户用户根据他们的需求为他们的数据定义有用的架构;或

  • hstorejson存储

  • 等妥协

请不要在数据库的EAV模型中创建数据库。 Developers everywhere in the world will cry您的设计很快就会在The Daily WTF上讨论。