Как я могу в одном столбце хранить произвольное количество «пользователей» - PullRequest
0 голосов
/ 16 марта 2011

У меня есть таблица, в которой хранятся «Матчи». Эти матчи имеют следующие столбцы: MatchId, TeamA, TeamB, Wager, Winner

Я хочу, чтобы TeamA и TeamB возвращали список игроков длякаждая команда.Число может быть произвольным для каждого, это возможно или даже практично?Я не могу думать ни о каком другом способе разработки этого.Есть ли лучшая схема для всего этого?Игроки будут иметь идентификатор пользователя, а пользователь не привязан к команде, команда относится только к матчу.

РЕДАКТИРОВАТЬ: Например, игрок A, B, C, D, E, F

Матч 1: 3 на 3 ABC против DEF

Матч 2: 3 на 3 DAB против FEC

Игрок не должен быть привязан к какому-либо конкретному TeamId, поскольку он зависит только от матча.Игрок может объединиться с кем угодно в матче.

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Возможная схема базы данных может выглядеть следующим образом: enter image description here

Затем вы можете выбрать из нее вот так:

SELECT M.*, P.*
FROM Matches M
JOIN MatchPlayers MP ON MP.MatchID = M.MatchID
JOIN Players P ON P.PlayerID = MP.PlayerID
WHERE M.TeamA_ID = MP.TeamID OR M.TeamB_ID = MP.TeamID

Извините, если мой SQL груб по краямили схема является мусором - вероятно, она, вероятно, возможно, будет работать незначительно.

Этот конкретный SQL не сообщает вам команду, в которой был игрок, но информация должна быть получена с некоторыми небольшими изменениями..

Для того, что вы хотите, данные, которые относятся к другим данным, сериализация не является ответом - или это не то, что вы думаете ... Я чувствую несоответствие терминологии там.Читайте об использовании баз данных из .NET - в Интернете есть много отличных руководств.Также ознакомьтесь с дизайном реляционных баз данных, опять же, веб-источники отлично подходят для этого.

0 голосов
/ 16 марта 2011

Я предполагаю, что вы используете .NET для потребления ваших данных.Вы можете создать командный класс со свойством Players в виде List.Поместите атрибут [Serializable] в класс.

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

Используйте метод десериализации для десериализации команды обратно в объект в памяти.

См. Эту статью для начинающих: http://msdn.microsoft.com/en-us/library/90c86ass(v=vs.71).aspx

Лично я бы использовал больше таблиц.Иметь сущность Team с отношением 1- * к сущности Player.Соберите команду FK в таблице матчей.

Получите игроков на матч:

SELECT P.PlayerName
FROM Matches M (NOLOCK)
JOIN Team T (NOLOCK)
  ON T.TeamID = M.TeamA_ID
JOIN Players P (NOLOCK)
  ON P.PlayerId = T.PlayerId

UNION ALL

SELECT P.PlayerName
FROM Matches M (NOLOCK)
JOIN Team T (NOLOCK)
  ON T.TeamID = M.TeamB_ID -- NOTE TEAM B
JOIN Players P (NOLOCK)
  ON P.PlayerId = T.PlayerId
0 голосов
/ 16 марта 2011

Два подхода:

1: использовать XML для столбцов TeamA, TeamB - таким образом вы можете создавать полные списки команд в структурированной строке, которую легко обрабатывать в вашем приложении

2: Используйте больше таблиц: Более всеобъемлющей схемой может быть: (Это не предназначено для того, чтобы быть всеобъемлющим и даже может быть чрезмерным, но это иллюстрация того, как вы, возможно, захотите думать)

Матч Имя MatchID Матчи, которые имеют место

Team TeamID MatchID IsHomeTeam Name Команды, которые играют в матче

Player PlayerID Имя TeamID Все игроки для каждой команды

Редактировать: это более простая версия после разъяснения требований

...