2014-01-29 3 views
0

Я работаю в системе, где среди требований являются:Multitenancy с неизвестными динамическими данными на арендатор

  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 effect и Enterprisey design.

Остановитесь и отойдите оттуда, затем перейдите к своим предположениям о , почему вам нужно делать все так.

Кое-что должно дать здесь; либо:

  • Использовать бесплатную базу данных без условных обозначений, без свободной формы;

  • Разрешить пользователям-арендаторам определять полезную схему для своих данных в зависимости от их потребностей; или

  • Компромисс с чем-то вроде hstore или json хранения

Пожалуйста, пожалуйста, пожалуйста, не создать базу данных в пределах EAV модели базы данных. Developers everywhere in the world will cry, и ваш дизайн скоро в конечном итоге поговорит о The Daily WTF.

+0

Благодарим вас за быстрый ответ. Я знаю, что я направляюсь к зверю кодирования, вопросам и работе. Все было бы проще, если бы я мог фиксировать столбцы одинаковыми для всех арендаторов, но моя ситуация здесь, арендаторы должны иметь возможность загружать любые данные, которые они хотят, а затем обрабатывать эти данные. Любые мысли о том, как я могу разместить различные данные/арендаторы в db? – aiiwa

+0

Кстати, угадайте, ваша ссылка «Enterprisey design» не привела меня к намеченной странице. – aiiwa

+0

@nsk Динамически таблицы 'CREATE' и' ALTER' на основе того, что им нужно, используйте 'hstore' или' json' для хранения своих строк или использования базы данных schemaless. –

Смежные вопросы