Организация БД для нескольких компаний?

Идея такая:
Есть некий сайт site.com
1. Пользователь регистрирует компанию
1.1 создается поддомен с именем компании
1.2 создается БД (вопрос ниже)

Немного подробнее
при создании компании, в таблицу компании записывается имя компании и ключ (это ключевая пара, для доступа например к базе данных)

Вопросы:
1. Как организовать БД?
a. множество БД создавать не хочется, при том, что поддреживать будет сложно (миграции)
b. Для всех компаний все хранить в одной таблице? - как мне кажется не безопасно, но проще всего
с. Для каждой компании создавать новые таблицы в текущей БД с префиксом имени компании. - та же проблема что и в варианте а.

2. Может есть какие то более адекватные и лаконичные решения данной задачи?
Проект будет на писан на YII2
  • Вопрос задан
  • 2756 просмотров
Решения вопроса 1
begemot_sun
@begemot_sun
Программист в душе.
На самом деле при должном процессе разработки наличие у вас одной таблицы для всех кампаний или нескольких не должно вызывать головную боль, т.к. по хорошему все изменения в таблицах (их структура) при релизе должны происходить с помощью миграций, т.о. ничего не должно помешать вам запустить все миграции для каждой из кампаний чтобы актуализировать структуру всех таблиц.

Если вы делаете "глобальный" продукт, я бы на вашем месте выбрал бы вариант: много таблиц с множеством кампаний, когда в каждой таблице может хранится набор данных для нескольких кампаний, но таких таблиц может быть много. Это даст распределение нагрузки (разные таблицы могут хранится, обрабатываться на разных серверах), т.о. вы всегда сможете легко выделить новые ресурсы для новой кампании.

С другой стороны, вы можете хранить все данные в одной БД (одной таблице). На начальном этапе для вас это будет проще, но чем дольше вы будете разрабатывать продукт, тем сложнее будет переход на другую архитектуру. Поэтому лучше подумать обо всем заранее. По крайней мере увидеть подводные камни, и приготовится решать их в будущем.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
edinorog
@edinorog
Троллей не кормить!
если по феншую, то вариант а. остальное от лукавого.
Ответ написан
Комментировать
0neS
@0neS
Не совсем ясна архитектура. Вы пишете что-то вроде CRM? Т.е., создав компанию, пользователь получает доступ к определенным таблицам (к примеру: клиенты, платежи, товары, задачи, заметки). Структура БД для каждой компании одинакова?
Тогда Вам стоит поискать, как это делают в популярных CRM-системах, я думаю там вариант с хранением данных всех компаний в общих таблицах с полями company_id, с целостностью проблем не должно быть.
Ответ написан
azretik
@azretik
web, xen, vlan, cisco, wiki
Можно сделать префиксы для наименования таблиц, если храниться все же данные будут в разных таблицах, но в одной бд. Хотя вариант А, как и писали выше тут был бы наиуместнейшим.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час