2009-03-06 2 views
2

Допустим, вы создали приложение, которое должно обслуживать несколько клиентов (данные никогда не используются совместно клиентами), а сами данные клиента чувствительны.Одна схема для всех или разделение схемы для каждого клиента?

Как бы вы создали базу данных, чтобы предотвратить внезапную (например, ошибку) данные от одного клиента, видны другим?

E.g. У нас есть таблица проектов, которая содержит проекты клиента. Теперь мы можем отбросить все проекты (всех клиентов) в эту таблицу или создать схему для каждого клиента.

Мне нравится идея разделения схемы (поскольку она полностью разделяет данные)).

Важно: Приложение содержит основные данные, которые совместно используются для всех клиентов (например, учетные записи клиентов, настройки, шаблоны и т. Д.). Таким образом, еще один недостаток, который я ожидаю, будет поддерживать несколько соединений одновременно ...

UPDATE: Можно ли автоматически копировать только схему?

ответ

2

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

На оборотной стороне. Если вы объединили ASP-страницы без библиотеки бизнес-объектов без стандартной и централизованной логики авторизации; то, конечно, используйте разные базы данных с уникальными входами для каждого клиента.

+0

Я думаю, вы поняли, что ... если его правильно закодировать, я не хочу иметь накладные расходы на поддержание большего количества схем. Если приложение станет больше и столкнется с проблемами безопасности, мы можем переключиться. – Michal

0

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

+0

Знаете ли вы, если бы я мог использовать репликацию для этого как-то? возможно ли тиражировать схему? – Michal

+0

Ну, я думаю, что ваша схема была бы простой для тиражирования в нескольких базах данных. Ключ будет перепрограммировать ваш код для использования разных баз данных для каждого клиента. – Suroot

0

В соответствии с вашими требованиями отдельный код схемы DB клиента является хорошей идеей. Это будет немного головная боль, но не столько, сколько судебный процесс.

0

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

Это упрощает обслуживание, поскольку представления определяют только одно ограничение (на клиента) и не содержат никакой другой информации о схеме.

Вот пример в MySQL (не лучший DB для взглядов, но эй)

CREATE VIEW projects.foocust AS SELECT * FROM projects WHERE customer = 'foocust'; 
0

Мой совет должен был бы разделить данные для каждого клиента как можно больше. Используя SQL Server, я хотел бы хранить данные каждого клиента в отдельной базе данных (у вас может быть много отдельных баз данных в экземпляре SQL Server). Если у вас нет этого параметра, схема может сделать что-то очень похожее.

Смежные вопросы