2014-01-29 198 views
0

未知的动态数据,我的工作系统,用于需要在哪里上:多租户,每个租户

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

    • 例如用于帐户表,

    承租人1> account_no上| date_created | DUE_DATE

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

唯一的解决办法,我可以看到这种情况下,使用键 - 值对的数据库结构: - 例如

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 

有了这样说,我会很感激的建议,以及是否有其他的方法,我可以用它来实现这一目标。

回答

2

警告,你走进inner platform effectEnterprisey design

慢慢停下,然后重新回到你的假设为什么你必须这样做。

事情已经给这里;或者:

  • 使用用于无模式,自由形式的数据的结构描述的自由形式的数据库;

  • 允许租户用户定义的根据自己的需求自己有用的数据模式;或

  • 妥协的东西,如hstorejson存储

请,请,请不要在数据库的EAV模型中创建一个数据库。 Developers everywhere in the world will cry和你的设计很快会结束在The Daily WTF谈论。

+0

感谢您的迅速回复。我知道我正在走向编码,查询和工作的野兽。如果我可以修复所有租户的列,事情会更容易,但在这里我的情况是,租户应该可以灵活地上传他们想要的任何数据,然后再处理这些数据。有关我如何将不同的数据集/租户纳入数据库的想法? – aiiwa

+0

顺便说一句,猜你的链接“企业设计”没有把我带到预定的页面。 – aiiwa

+0

@nsk基于他们需要的动态'CREATE'和'ALTER'表,使用'hstore'或'json'来存储他们的行,或者使用一个无模式的数据库。 –