在 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 慢得多。