【问题标题】:Table structure for reporting SQL Performance用于报告 SQL 性能的表结构
【发布时间】:2018-12-19 08:14:56
【问题描述】:

我不确定这是否是我想要做的最好的结构。

我有 2 张桌子。

名为 Team 的第一个表包含 3 列,Team ID、Team Name 和 Kit Colour。此表仅包含有关团队的数据。

第二个表名为玩家名称,包含 3 列,玩家 ID、玩家名称和团队 ID。更多列将很快添加。玩家表仅与玩家有关。团队 ID 是将两个表链接在一起的外键。一个团队最多只能有 15 名球员,因此每支球队可以有 15 名球员参赛。

可以有数千支球队,每支球队最多有 15 名球员。

我有一个需要填写的横向报告,如下所示:

Team Name | Player 1 Name | Player 2 Name | Player 3 Name....| Player Name 15

我的问题是,我为报表设置了这个最好的表结构吗?考虑到绩效,我如何获取某个团队的数据?例如,我想要 A 队及其所有球员的信息。可以有15个玩家。如果我可以在一个 select 语句中从左到右显示信息,我可以轻松填写​​报告,但如果不使用可能会对性能产生负面影响的多重选择,则无法做到这一点。

建议的另一个表结构是将两个表连接在一起而不是 2 个表。每个玩家及其属性的列也会有一个列,但这看起来不正确,因为表格会很大并且可以添加更多玩家属性。

我正在使用 SQL 2008

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    您需要有两个单独的表,一个用于团队,一个用于玩家,因为团队属性对于多个玩家来说可能是通用的,最好将它们分开而不是全部放在一起并复制,在您的情况下,TeamID 充当两者之间的链接球队和球员表。因此,我认为具有一对多关系的两张表是您的理想选择。

    要检索特定团队的信息,您可以使用简单的联接和选择语句

    SELECT *
    FROM TEAM T
    INNER JOIN Player P
    on T.TeamID=P.TeamID
    WHERE T.TeamID=''
    

    【讨论】:

    • 然而,这会为每个团队返回多行,并且很难填写横向报告。我知道表格结构是有益的,但我对报告部分感到困惑。
    • 您的意思是团队表中相同团队 id 的两条记录
    • 没有团队 ID 是唯一的。我的横向报告需要球队名称,然后是他们自己列中的所有球员姓名。都在一排。这就像将示例中的多行合并为一行
    • 现在我明白了,你的报告工具是什么。
    • 报告涉及我编写SQL代码,然后代码将添加到水晶报告中的报告中,用户将运行该报告。
    猜你喜欢
    • 2018-02-19
    • 2022-01-20
    • 1970-01-01
    • 2020-02-20
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    相关资源
    最近更新 更多