Хранение коллекции в SQL - PullRequest
0 голосов
/ 29 января 2010

[предварительно состояние]
В моем проекте www.twipler.com я хочу разрешить людям связывать аккаунты в Твиттере. Это будет достигнуто за счет того, что они войдут в систему, выбрав «связать учетную запись», а затем войдут снова Это фактически даст мне UserId-1 и UserId-2. Теперь я хочу разрешить пользователю войти в систему с учетными данными UserId-1 или UserId-2, а затем получить учетные данные для другого пользователя. (Не стесняйтесь комментировать, но это не вопрос )

[настройка]
C # 3.5, NHibernate, TweetSharp, SQL 2005.

[вопрос]
Как мне сохранить «пакет» уникальных целых чисел в базе данных, чтобы при запросе одного целого числа возвращались другие связанные с ним.

Например, я мог бы создать таблицу с именем UserLinks и иметь GroupId, который я вычисляю перед вставкой новой ссылки. Это выглядело бы так

UserLinks  GroupId   UserId
              1      12312784
              1      18329139
              2      19319332
              2      14529342
              2      21031023

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

Ниже упомянуто о поиске нового GroupId с использованием Max (GroupId) +1, но я понимаю, что поскольку UserId уникальны, я могу использовать первый вставленный UserId группы в качестве GroupId.

Ответы [ 3 ]

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

Почему это было бы «не-спящий»? NHibernate - это мост между реляционной моделью БД и ОО-моделью вашего бизнес-класса.

Храните данные в БД наиболее эффективным / правильным способом, как вы обычно делаете при использовании реляционной БД. Создайте свои бизнес-классы, чтобы вы могли решить проблему. Используйте NHibernate, чтобы создать мост между этими двумя парадигмами (реляционная модель данных и ОО).

Итак: Создайте свою БД - модель реляционным способом. Создайте свой домен-классы: Вы можете создать класс User, у которого есть свойство LinkedAccounts. Это свойство может быть списком объектов учетной записи. В своем отображении NHibernate вы можете указать, откуда (из каких таблиц) NHibernate должен получать свои данные.

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

кажется, что вам просто нужно типичное отношение "многие ко многим", которое вы бы реализовали в виде таблицы, содержащей user_id_1 и user_id_2 в качестве составного PK, оба из которых являются FK для userID таблицы пользователя.

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

На самом деле эта таблица выглядит как правильный способ связать (на одном уровне) 1..n записей в одной таблице вместе.

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