Создать новую базу данных программно в приложении Asp.Net MVC? - PullRequest
2 голосов
/ 29 января 2011

Я работал над приложением расписания в 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? Разве целостность данных не будет достаточной для других таблиц, поскольку остальное обрабатывается отношениями?

Ответы [ 2 ]

1 голос
/ 29 января 2011

Смотрите мой ответ здесь, это относится и к вашему делу: c # архитектура базы данных

1 голос
/ 29 января 2011

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

Что касается создания базы данных, прочитайте эту запись в блоге . он описывает, как использовать SMO (объекты управления sql) в c # .net для создания базы данных. это действительно аккуратный инструмент, и вам обязательно захочется с ними ознакомиться.

Чтобы ответить на следующий вопрос, да, одних отношений на высшем уровне между клиентами и клиентами должно быть достаточно, чтобы ограничить новых клиентов соответствующими данными.

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

это имело какой-то смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...