Изначально я написал приложение Ruby on Rails для одного клиента. Сейчас я меняю его, чтобы его можно было использовать для разных клиентов. Моя конечная цель состоит в том, чтобы какой-нибудь пользователь (не я) мог нажать кнопку и создать новый проект. Затем все необходимые изменения (новая схема, новые таблицы, обработка кода) генерируются, и мне никому не нужно редактировать файл database.yml или добавлять новые определения схемы. В настоящее время я использую доступ SCOPED. Итак, у меня есть модель проекта, а у других связанных моделей есть столбец project_id.
Я просмотрел другие сообщения о мультитенантных приложениях в Rails. Многие люди предлагают создавать разные схемы для каждого нового клиента в Postgres. Для меня, однако, для нового клиента не очень полезно иметь другую схему с точки зрения модели данных. У каждого клиента будут одинаковые таблицы, строки, столбцы и т. Д.
Мое видение для каждого клиента состоит в том, чтобы в моей производственной базе данных сначала была таблица различных проектов / клиентов. И каждая из этих таблиц связана с набором таблиц, которые почти одинаковы с разными данными. Другими словами, таблица таблиц. Или, другими словами, первая таблица будет отображать разные наборы данных для каждого клиента с одинаковой структурой.
Похож ли способ, которым я объяснил свое видение, на то, как Postgres реализует различные «схемы»? Это похоже на вложенные таблицы? Или Postgres все равно должен запрашивать всю информацию в базе данных? В настоящее время я не использую Postgres, но я хотел бы узнать, подходит ли он для дизайна. Если вам известно о программном обеспечении для баз данных, которое работает с Rails и которое соответствует моим потребностям, пожалуйста, дайте мне знать.
Прямо сейчас я использую области для создания мультитенантных приложений, но это не кажется масштабируемым или чистым. Тем не менее, это очень упрощает для нетехнических пользователей создание нового проекта при условии, что я даю им заполняемую информацию. Знаете ли вы, возможно ли с определением Postgres с несколькими схемами, чтобы он работал автоматически после того, как пользователь нажимает кнопку? И я бы предпочел, чтобы это выполнялось Rails, а не внешним скриптом, если это возможно? (пожалуйста, посоветуйте в любом случае)
Самое главное, порекомендуете ли вы какие-либо плагины или мне следует принять другую структуру для этой задачи? Я обнаружил, что Rails ограничен в некоторых случаях абстракции, как указано выше, и это первый раз, когда я столкнулся с проблемой масштабирования Rails.
Любые советы, касающиеся мультитенантных приложений или моей ситуации, приветствуются. Также приветствуются любые вопросы для разъяснения или дополнительных советов.
Спасибо, - Дэйв