【问题标题】:Optimal db schema and query statement for sqlitesqlite 的最佳数据库模式和查询语句
【发布时间】:2013-12-27 15:52:38
【问题描述】:

我正在为 sqlite 中的以下问题寻找最佳的数据库架构:

我有球员和球队,球员被分配到球队(一名球员可以属于几支球队),我需要能够找到球队,其中指定球员作为参数传递。例如,如果队 2 有球员 1、3 和 4,那么如果我查询球员 1、3 和 4,我需要得到队 2。

此外,查询一个团队并获取其中的球员列表会很有用。

目前我的架构是:

players: id(PK), name
teams: id(PK), name
players_in_teams: player_id(FK), team_id(FK)

但我怀疑这是最好的解决方案,因此需要帮助。

【问题讨论】:

  • "一个玩家可以属于多个团队" . . .同时?
  • 您创建的是一个多对多表,如果一个玩家确实可以属于多个团队(并且一个团队可以有多个成员),那么这是正确的架构.
  • 你的架构很好,这正是你应该做的。要查找玩家所在的团队,您可以:SELECT team_id FROM players_in_teams WHERE player_id = MYID
  • select distinct team_id from players_in_teams where player_id in (1, 3, 4)

标签: sql sqlite database-schema


【解决方案1】:

您的架构很好。中间有一个“联结”或“链接”表是建模多对多关系的标准。

您只需要考虑联结表的索引设计,以最好地支持查询的两个“方向”(您已表明需要)。

  • 可以通过{player_id, team_id} 上的索引来满足查询:“对于给定的球员,查找球队”。
  • 可以通过{team_id, player_id} 上的索引来满足查询:“对于给定的团队,查找球员”。

换句话说,您需要在相同字段上使用两个复合索引,但字段顺序不同。其中一个索引,您可能已经隐式创建(当您创建主键时),因此您只需要显式创建剩余的索引。

【讨论】:

    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2012-05-28
    • 2014-01-01
    • 1970-01-01
    • 2017-03-22
    • 2011-11-26
    相关资源
    最近更新 更多