2014-01-29 53 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'來存儲他們的行,或者使用一個無模式的數據庫。 –