Многопользовательские базы данных с единой общей базой данных - PullRequest
0 голосов
/ 06 июля 2011

мы используем .net mvc и sqlserver db.

EDIT

Мы также используем NHibernate для доступа к данным. Я упоминаю об этом, потому что мы не будем писать наш собственный sql или делать хранимые процедуры. триггеры в БД могут работать, но я не знаю, можете ли вы сделать это между базами данных.

КОНЕЦ РЕДАКТИРОВАНИЯ

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

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

Я прошу любой совет о том, как управлять тем фактом, что у арендаторов будут ссылки на общую базу данных, но нет ссылочной целостности. Или, если есть альтернативный подход или что-то еще. Спасибо, Raif

1 Ответ

2 голосов
/ 06 июля 2011

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

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

...