2013-04-25 4 views
0

У меня есть база данных mssql с таблицей пользователей и таблицами для примерно 6 различных приложений. Каждое приложение имеет свою собственную схему внутри базы данных. Когда пользователь входит в систему, пользователь показывает список приложений, на которые у него есть права.Запросы на одиночный вход и базу данных

Я хотел бы разделить пользовательские таблицы и приложения в свои собственные базы данных по двум основным причинам.

  1. Масштабируемость
  2. Обслуживание

Первый шаг в этом проекте, чтобы переместить таблицу пользователей в своей собственной базе данных. Затем используйте веб-службы api, чтобы любое приложение могло взаимодействовать с данными. Например, IsUserValid, CreateUser, UpdatePassword ....

Проблема, которую я вижу, заключается в том, что в некоторых приложениях хранились процедуры, вызывающие таблицу пользователя с соединением. Например: SELECT user.username, user.firstname, user.lastname, app.column1, app.column2 от пользователя внутреннего соединения app на users.username = app.username

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

+0

Это та самая проблема, с которой я столкнулся раньше, желая использовать базу данных членства asp_net (так как у нее была вся крутая функциональность). Вы не можете использовать FK из другой базы данных. Одним из предлагаемых решений было создание таблицы dbo.UserInfo в каждой базе данных. И мы бы создали пользователей в базе данных членства asp_net ...... У THEN была небольшая утилита, которая «связывает» пользователей asp_net с приложениями. Но в нашей «ссылке» мы написали только ПК для пользователей в отдельные базы приложений. Таким образом, у каждого db была своя «копия», из которой он был бы выключен. Мы также включили столбец статуса «soft-delete» – granadaCoder

+0

, когда пользователь получил «несвязанный» из приложения. (Вы можете написать больше кода для каскадного удаления информации в каждом приложении db (когда пользователь был удален из базы данных членства asp_net) ......., но мы просто использовали тег soft-delete. – granadaCoder

+0

Другое примечание. таблица MyApplication.dbo.UserInfo очень «тонкая». Только таблица FK для asp_net memmbership (Users) и тег soft delete. Если бы у нас были дополнительные «данные о свойствах» о любом пользователе в конкретной базе данных приложения, у нас был дополнительный MyApplication.dbo.UserExtraInfo стол. Это спорный вопрос, но это то, что мы свернули с. – granadaCoder

ответ

0

Вы всегда можете создать linked servers и запросить данные на нескольких серверах.

SELECT * FROM schema.Table1 t1 JOIN server2.schema2.Table2 t2 ON t1.UserId = t2.UserId 

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

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