0

我有一个存储“比赛”的表格,这些比赛有以下列:MatchId、TeamA、TeamB、Wager、Winner

我希望能够让 TeamA 和 TeamB 返回每支球队的球员名单。每个人的数量都可以是任意的,这可能甚至实用吗?我想不出任何其他的设计方式。有没有更好的模式呢?球员将是 UserId 的,用户不绑定到球队,球队只是相对于比赛。

编辑:例如,玩家 A、B、C、D、E、F

第一场比赛:3v3 ABC vs DEF

比赛2:3v3 DAB vs FEC

玩家不应绑定到任何特定的 TeamId,因为它仅取决于比赛。玩家可以在比赛中与他或她想要的任何人组队。

4

3 回答 3

2

一个可能的数据库模式可能如下所示: 在此处输入图像描述

然后,您可以像这样从中选择:

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 中的数据库 - 网络上有很多很棒的教程。还阅读了关系数据库设计,再次网络资源非常适合这一点。

于 2011-03-15T23:20:56.770 回答
0

两种方法:

1:对 TeamA、TeamB 列使用 XML - 这样您就可以在结构化字符串中创建完整的团队列表,这在您的应用程序中易于处理

2:使用更多的表:更全面的模式可能是:(这并不是为了全面,甚至可能是最重要的,但它说明了您可能想要如何思考)

匹配 MatchID 发生的名称 匹配

Team TeamID MatchID IsHomeTeam Name 参加比赛的球队

球员 PlayerID TeamID Name 每个球队的所有球员

编辑:在澄清要求后,这是一个更简单的版本

于 2011-03-15T23:11:53.303 回答
0

我假设您正在使用 .NET 来使用您的数据。您可以创建一个具有 Players 属性的团队类作为列表。在类上放置一个 [Serializable] 属性。

使用序列化方法将团队转换为字符串。将字符串写入数据库。

使用反序列化方法将团队反序列化回内存中的对象。

请参阅这篇文章了解入门: http: //msdn.microsoft.com/en-us/library/90c86ass (v=vs.71).aspx

我个人会使用更多的桌子。拥有一个与 Player 实体具有 1-* 关系的 Team 实体。让 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
于 2011-03-15T23:12:46.163 回答