1

在 SQL 数据库(更具体地说,MySQL)中有一个表,其中的行可以有两种含义。

为了进入上下文,该表代表了游戏的状态。然后每一行可能是保存状态游戏或初始游戏状态(代表关卡)。

我与我的队友进行了一些讨论,关于如何设计/实现它。我总是被告知这样做:

CREATE TABLE games (
    id INT,
    PRIMARY_KEY (id)
)
CREATE TABLE levels (
    id INT,
    PRIMARY_KEY (id),
    FOREIGN_KEY (id) REFERENCES games(id)
)
CREATE TABLE saved (
    id INT,
    PRIMARY_KEY (id),
    FOREIGN_KEY (id) REFERENCES games(id)
)

比这样做“更好”:

CREATE TABLE games (
    id INT,
    `type` ENUM('level', 'saved')
    PRIMARY_KEY (id)
)

在第一种情况下,将使用“join”从保存中提取,而在第二种情况下,将使用“where type=level”。

那么,在设计和数据库性能方面有什么更好的呢?

我们更关心性能,但我们真的不知道 join 是否比带有 where 的简单 select 慢得多。

4

1 回答 1

1

在性能方面,有几个参数需要考虑,第一个是要知道您要存储的数据量有多大,如果您只有几百个条目,您将不会注意到这两种方法之间的巨大差异.

真正的问题更多是关于您的需求。例如,如果您需要存储有关不同levels(名称,难度,...)的信息,则第二种解决方案显然不是一个选择,因为!如果您想存储有关已保存事件的信息(日期、游戏进程......),情况相同。

在考虑构建将返回所需结果的查询的方法之前,请先考虑需求。

希望这将帮助您更好地理解在需要设计数据库结构时采用的方法。

于 2014-09-03T14:01:04.500 回答