C# 我怎么能让一列存储任意数量的;“用户”;

C# 我怎么能让一列存储任意数量的;“用户”;,c#,asp.net,sql,database-schema,schema-design,C#,Asp.net,Sql,Database Schema,Schema Design,我有一个存储“匹配项”的表。这些匹配项有以下列: MatchId,TeamA,TeamB,打赌,赢家 我希望能够让TeamA和TeamB返回每个球队的球员名单。每个人的人数可能是任意的,这是可能的,甚至是实际的吗?我想不出任何其他的设计方法。对于这一切,有更好的模式吗?玩家将是用户ID,用户不绑定到团队,团队只与比赛相关 编辑: 例如, 球员A、B、C、D、E、F 比赛1:3v3 ABC vs DEF 匹配2:3v3 DAB与FEC 球员不应该绑定到任何特定的TeamId,因为它只依赖于比赛。球

我有一个存储“匹配项”的表。这些匹配项有以下列: MatchId,TeamA,TeamB,打赌,赢家

我希望能够让TeamA和TeamB返回每个球队的球员名单。每个人的人数可能是任意的,这是可能的,甚至是实际的吗?我想不出任何其他的设计方法。对于这一切,有更好的模式吗?玩家将是用户ID,用户不绑定到团队,团队只与比赛相关

编辑: 例如, 球员A、B、C、D、E、F

比赛1:3v3 ABC vs DEF

匹配2:3v3 DAB与FEC

球员不应该绑定到任何特定的TeamId,因为它只依赖于比赛。球员可以在比赛中与他或她想要的任何人合作。

两种方法:

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

2:使用更多的表格:一个更全面的模式可能是:(这不是为了全面,甚至可能是过度的,但它是一个关于你可能想要如何思考的说明)

匹配 火柴 名称 发生的比赛

团队 TeamID 火柴 异烟肼 名称 参加比赛的球队

玩家 PlayerID TeamID 名称 每个队的所有队员


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

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

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

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

有关入门知识,请参阅本文:

就我个人而言,我会使用更多的桌子。拥有与玩家实体具有1-*关系的团队实体。让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

可能的数据库架构如下所示:

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

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阅读有关使用数据库的知识-网上有很多很棒的教程。另外,请阅读关系数据库设计,同样,web资源也非常适合于此。

根据玩家与团队或比赛的关系,您可能需要一个带有TeamID外键的玩家表,或者某种形式的映射表,将玩家链接到团队中的比赛。您到底想实现什么?您想在一列中为每个团队创建一个以逗号分隔的团队成员列表吗?序列化是将内存对象转换为适合在磁盘上写入/通过网络传输的字节流的过程。反序列化则相反。有了这些信息,序列化与从SQL获取数据有什么关系?我对这个问题进行了一些更新,希望它有意义now@OMG当然,嘿,非常感谢您的快速响应,但问题是,我不知道拥有一个团队表是否可行,因为用户不会绑定到一个团队。。例如,每场比赛都是一支新的球队。我可以在一场比赛中与一些球员一起比赛,然后在另一场比赛中与另一名球员一起比赛。不管怎样,每场比赛都有两队。您可以从UI中抽象出这一点,但最终数据模型是合适的。。。我使用的在线工具在这里,我打印屏幕以获得图片:很好-有点嫉妒你漂亮的图片!Silverlight应用程序也是如此,我似乎没有在野外遇到太多这样的应用程序:-)