У меня есть сложное решение по созданию базы данных, касающееся многопользовательской аренды для растущего числа веток моего клиентского интернет-CRM, который я активно поддерживаю.
Я принял решение на раннем этапе использовать отдельные приложения с отдельными базами данных для каждой ветки, поскольку это был самый простой способ обслуживать три разных ветки с разрозненными данными и требованиями к коду. Я также хотел избежать управления идентификаторами арендаторов в каждом запросе, например, мне пришлось использовать устаревшее приложение ASP.NET(cringe), которое я построил в 2007 году... ужас.
Но теперь требования к данным для веток сходятся, и по мере расширения бизнеса мне нужно иметь возможность быстро развертывать новые ветки и совместно использовать глобальные SKU продуктов.
Поскольку таблицы и представления одинаковы для всех ветвей, и теперь лучше управлять инструментами ORM для управления приложениями с несколькими арендаторами, интересно, было бы лучше иметь общую базу данных для нескольких ветвей.
Соображения для централизованной базы данных:
- Глобальные продукты SKU
- Упрощенные заявки на инвентаризацию
- Легче резервное копирование
- Разверните один раз вместо каждой ветки
Соображения против централизованной базы данных:
- Легче дифференцировать требования к ветки с отдельными БД
- Модульное развертывание (одна сбитая ветвь не разбивает все)
- Сложнее управлять и разрабатывать для общего БД
- Мне нужно повторно спроектировать нумерацию счетов (последовательность, сгенерированная семенем)
- Меньше предложений WHERE везде
- Восстановление одной разбитой ветки имеет большое значение для других ветвей.
Вряд ли когда-либо будет 10 веток. Сейчас 3.
Разработчики, имеющие опыт работы в этой области в реальном мире, что бы вы сделали в моей ситуации? Хранить приложения и базы данных отдельно или объединяться в одну гигантскую систему?
Изменить: Великая статья Microsoft о преимуществах и недостатках мульти-аренда. Следует отметить, что изоляция данных между веткими не является серьезной проблемой.