Как разработать базу данных SaaS

У меня есть веб-приложение, которое я создал для транспортной компании, которую я хотел бы предложить как SaaS. Что лучший способ состоит в том, чтобы разработать базу данных?

Я должен создать новую базу данных для каждой компании? Или я должен использовать одну базу данных с таблицами, которые имеют префикс названия компании? Или я должен Использовать одну базу данных с одной из каждой таблицы и просто добавить идентификационное поле компании к таблицам? Или есть ли некоторый другой способ сделать это?

18
задан givanse 6 February 2014 в 07:29
поделиться

4 ответа

Столкнувшись с аналогичной ситуацией около 10 лет назад, мы выбрали базу данных для каждого клиента. у нас сотни (не тысячи) клиентов. Оглядываясь назад, это было одно из лучших решений, которые мы приняли. резервное копирование легко. скопировать одного клиента в наш офис для анализа легко (просто сделайте последнюю резервную копию). масштабирование выполняется легко (перемещение одного большого клиента на другой сервер может высвободить ресурсы на загруженном сервере sql). Джоэл и Джефф обсуждали это в подкасте о переполнении стека (не недавнем), и Джоэл сделал то же самое, что и я ... каждый клиент получает свою собственную базу данных. Сторонники чистоты баз данных часто приводят доводы в пользу объединения всех в одну базу данных, но я бы никогда этого не сделал.

-don

28
ответ дан 30 November 2019 в 06:42
поделиться

Это зависит от того, как я работаю в компании, в которой много «внутренних бизнес-единиц» рассматриваются как другие компании. Итак, некоторые отчеты должны включать все компании, учетные записи клиентов также должны быть общими для компаний. Здесь у нас есть поле CompanyId в таблицах, которое требует его. Решение с префиксом, безусловно, следует избегать.

1
ответ дан 30 November 2019 в 06:42
поделиться

Здесь у нас есть несколько баз данных с общими клиентами, а в некоторых случаях у каждого клиента есть свой сервер и своя база данных. Те, где клиент находится на собственном сервере, наиболее просты в управлении и наименее вероятны проблемы, когда какой-нибудь разработчик забыл добавить клиента и случайно отправил данные клиента a клиенту b (пример НЕ выбран случайным образом).

Хранение каждого из них на своем собственном сервере или экземпляре сервера позволяет нам сохранять структуру базы данных с одинаковыми именами и облегчает распространение изменений на все серверы, потому что нам не нужно менять имя базы данных.

Если вы используете отдельные экземпляры для каждого клиента, убедитесь, что вы разработали и внедрили хорошую систему для распространения всех изменений на всех клиентах. Если эти базы данных выйдут из синхронизации, их обслуживание может стать ужасным. Вы обнаружите, что если вы позволите им выйти из синхронизации, каждый клиент запросит изменения, и у вас будет 27 способов сделать то же самое. Вы должны обобщить, когда они находятся в одной базе данных, когда они раздельные, вы должны использовать самоконтроль, чтобы гарантировать, что новая функциональность будет одинаковой для каждого клиента.

3
ответ дан 30 November 2019 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: