Я работал над приложением расписания в MVC 2 для внутреннего использования в нашей компании. Теперь другие небольшие компании проявили интерес к приложению. Я не рассматривал это использование приложения, но оно заинтересовало меня тем, что оно может означать.
Я полагаю, что смогу заставить его работать на нескольких клиентах, изменив базу данных (Sql Server, доступный по модели Entity Framework). Но я читал некоторых людей, выступающих за несколько баз данных (по одной для каждого клиента).
Интуитивно понятно, что это хорошая идея, поскольку я бы не рискнул смешать данные разных клиентов в одной базе данных (что, конечно, не должно происходить, но что, если это произойдет ...). Но как конкретно реализовать решение для нескольких баз данных?
т.е. с одной базой данных я мог бы просто зарегистрировать клиент, и все необходимые данные были бы добавлены приложением так же, как сейчас, когда есть только один клиент (моя собственная компания).
Но с решением для нескольких баз данных, как мне создать новую базу данных программно, когда пользователь регистрируется? Обратите внимание, что я выполнил всю работу с базами данных, используя Linq to Sql, и я не очень знаком с обычным программированием на SQL ...
Я был бы очень признателен за четкое подробное объяснение того, как это можно сделать (а также за информацию о том, является ли это хорошей идеей или если по какой-то причине лучше будет одна база данных).
EDIT:
Я также видел дискуссии об одной альтернативе базы данных, предлагая затем добавить ClientId в каждую таблицу ... Но разве это не трудно поддерживать в коде? Я должен был бы добавить условия "где" к большому количеству запросов linq, которые я предполагаю ... И я предполагаю, что наличие ClientId в каждой таблице будет означать, что каждая таблица должна иметь отношение многие к одному с таблицей Client? Разве это не будет очень сложная структура базы данных?
Как сейчас (без таблицы Client) у меня есть следующие таблицы (1 -> * обозначает отношение один ко многим):
Клиент 1 -> * Проект 1 -> * Задача 1 -> * Временной сегмент 1 -> * Сотрудник
Кроме того, Клиент имеет непосредственное отношение к TimeSegment, чтобы упростить некоторые запросы.
До сих пор это работало очень хорошо. Разве нельзя было бы просто иметь таблицу Client (или UserCompany или как ее можно назвать) с отношением один-ко-многим с таблицей Customer? Разве целостность данных не будет достаточной для других таблиц, поскольку остальное обрабатывается отношениями?