【问题标题】:"Player has spaceships" database\"玩家拥有宇宙飞船\"数据库
【发布时间】:2023-01-13 07:10:24
【问题描述】:

我对建模数据库很陌生,这是一个浏览器游戏。

基本上玩家可以花费资源来建造宇宙飞船。比方说,有 3 种类型的宇宙飞船。

据我了解,这是一种 1-N 关系,但我真的很困惑如何从特定玩家那里保存每种类型的宇宙飞船的数量。

现在我有一个 Player 表,一个 Spaceship 表,Spaceship 表包含 3 行,代表特定类型的宇宙飞船,有它们自己的名称、防御等。这样可以吗?

我知道 Spaceship 会将 Player 的 id 存储为外键,但我想知道我是否只需要使用 COUNT 函数来显示每个 spaceship 的数量,或者使用像“Player-has-Spaceship”表这样具有数量属性的中间关联。后者对我来说更有意义。

没有尝试盲目编码,我首先想要一个清晰的概念。

【问题讨论】:

  • I know that Spaceship will store Player's id as a foreign key - 仅当该表包含宇宙飞船的实例时。您所描述的太空船表是可能的太空船类型表和创建的太空船实例表之间的混合。
  • 我懂了。我想当我需要的只是每种宇宙飞船类型的数量时,有这样的例子是没有意义的。我要尝试使用中间表。
  • 听起来像“外键”这个词让你感到困惑。

标签: sql database innodb one-to-many


【解决方案1】:
CREATE TABLE counts (
    player_id ...,
    spaceship_id ...,
    cnt INT UNSIGNED NOT NULL,
    PRIMARY KEY(player_id, spaceship_id)
) ENGINE=InnoDB;

UPDATE counts SET
        cnt = cnt + 1;
    WHERE  player_id = ?
      AND  spaceship_id = ?

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多