Разделение пользователей - несколько OpenID - PullRequest
0 голосов
/ 23 сентября 2010

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

Есть ли какое-то решение для этого? StackOverflow поддерживает два OpenID для каждого пользователя, как бы они это сделали?

Если бы пользователи могли использовать только один OpenID, было бы несколько вариантов разделения. С несколькими OpenID у меня есть две таблицы с отношением 1-n.

Есть ли какой-нибудь алгоритм для эффективного разделения в этом случае?

Обновление Как отметил Noon Silk, проблема не является специфичной для OpenID. Я просто заинтересован в разделении, и я упоминаю OpenID, потому что в этом случае он может иметь отношение к созданию функции отображения.

Чтобы попытаться обозначить это как общую проблему.
У меня есть две таблицы A и B с отношением n к 1. Существуют ли какие-либо правила / рекомендации, как сделать разбиение в этом случае, чтобы полная информация находилась в одной базе данных?

если
А1 относится к B1
А2 относится к B1
A3 относится к B1

A4 относится к B2
A5 относится к B2

как поместить A1-A3 и B1 в одну базу данных, а A4-A5 и B2 - в другую базу данных?

Ответы [ 3 ]

1 голос
/ 23 сентября 2010

Если вы поместите это в таблицы Azure (AZT), я бы на самом деле использовал две таблицы. Поскольку вы захотите искать пользователей по OpenId, когда они входят в систему, у меня будет таблица UserOpenId, где ключом раздела является весь их OpenId, ключ строки является пустым или какой-то другой константой, и у вас есть фактический идентификатор пользователя в другом поле. Затем укажите идентификатор пользователя в качестве ключа раздела в основной таблице пользователя (снова с константой для ключа строки). Это даст вам самый быстрый способ поиска этого пользователя. Убедитесь, что вы включили и PartitionKey, и RowKey в свой запрос.

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

0 голосов
/ 20 октября 2010

"как поместить A1-A3 и B1 в одну базу данных, а A4-A5 и B2 - в другую базу данных?"

Один из подходов к выполнению этой работы в реальной жизни - отказаться от автоматической проверки ссылочной целостностии обрабатывать обе таблицы как две совершенно независимые сущности.Таким образом, вы можете разделить, как предложил Noon Silk.Нет необходимости в том, чтобы оба были в одной базе данных (хотя это было бы неплохо), тем более что обе таблицы довольно неизменны.

0 голосов
/ 23 сентября 2010

OpenID - это просто уникальный идентификатор пользователя.Таким образом, очевидно, что вы можете связать более одного из них для каждого «пользователя».

Итак, если вы хотите иметь несколько (с увеличением по некоторым причинам) способов связать пользователя в вашей системе с OpenIDясно, что таблица ссылок имеет смысл (т. е. tblUser -> tblUserOpenIDs или аналогичный подход).

...