Должен ли я создать новую базу данных для каждой компании?
Да - Дон Дикинсон был на деньги. Тем не менее, см. Уточнение ниже.
Или я должен использовать одну базу данных с таблицами, которые имеют префикс
название компании?
Господи, нет! Изменение запросов к базе данных на разные для клиента заставит вас сойти с ума! Кроме того, вы почти наверняка запустите динамический SQL (где имя таблицы изменяется в коде перед выполнением запроса), что может снизить производительность, так как большинству серверов нравится кэшировать планы запросов и промежуточные результаты - это не работает, если имена таблиц продолжай меняться.
Или я должен использовать одну базу данных с одной
каждой таблицы и просто добавить компанию
поле id для таблицы?
Возможно, вы захотите сделать это, если хотите иметь какую-то масштабируемую модель для ваших клиентов. Хотя предоставление новой базы данных для каждого клиента дает вам большую гибкость, оно также связано с затратами и сложностью. Вы должны создать новое расписание резервного копирования, иметь модель жизненного цикла для работы с просроченными клиентами и т. Д.
Таким образом, вы можете сказать, что «бесплатные пробные» и «бронзовые» клиенты объединены в одну базу данных, используя идентификатор компании для их разделения; «Серебряные» пользователи получают свою собственную базу данных (но вы все равно сохраняете поле customer_id в схеме, поэтому вам не нужно менять запросы между двумя уровнями клиентов), а «золотые» клиенты получают свой собственный сервер базы данных.
Несколько лет назад я проделал нечто подобное в компании SaaS - и клиенты, как правило, рады возможности обновления инфраструктуры (читай: производительность и отказоустойчивость), а также функций.