为ORDER BY添加列或创建新表?

时间:2013-07-29 19:53:23

标签: mysql

我们有一个游戏桌,每个游戏只在该表中添加一次,但其中许多都有几个平台,如PC,PS3,X360和....我们希望为不同平台的发布日期不同的游戏添加不同的发布日期,例如首先在PS3和X360上发布的Resident Evil 6,然后在PC上发布另一个日期版本。

此外,我们有不同类型的发布日期,例如确切日期,例如2012年10月29日,或2014年第1季度,第2季度,第3季度,2014年第4季度或TBA 2014或仅TBA ......

现在,我的问题是:

添加字段和平台数量并将发布日期放在那里并通过LEAST()和GREATEST()选择所有字段会更好吗?

或制作具有游戏ID,发布日期和平台的单独表格?

对数据库来说哪一个更简单,更轻松?

请注意,填写游戏桌的可能性是每年200场比赛。

另请注意,如果针对不同平台发布两次,我们希望在即将发布的页面中显示此游戏两次。如果在同一天发布所有平台,则只显示一次。


这是我的第一个模特:

| id |平台| rdate | rtype | rdate_pc | rdate_x360 | rdate_ps3 |

| 27 | pc,xbox360,ps3 | 20140306 | pc = Q4 | 20140000 | 20140306 | 20140400 |


这是我的第二个模特:

| id |平台| rdate | rtype |

| 27 |电脑| 20140000 | Q4 |

| 27 | ps3 | 20140400 | TBA |


哪一个更好?

3 个答案:

答案 0 :(得分:0)

通常,您希望将一个条目限制为字段(不包含Xbox,PS3作为单个条目)。为此,您应该创建另一个将平台链接到游戏的表格;该平台的发布日期也可以保留在此处。你会得到类似你的第二张桌子的东西,另一张桌子按ID列出所有游戏。

另外,既然你说每年大约有200场比赛,那么可能值得研究一下NoSQL数据库,比如Mongo。这些数据库允许您拥有与表中的某些条目相关联的字段,而不允许其他字段,并允许您根据此进行过滤。

另请注意,SQL LEASTGREATEST查询不适用于与Q4等内容混合的日期,我不相信。

答案 1 :(得分:0)

第二种模式将变得更加灵活。首先,对于第一个模型,如果添加更多平台,则需要为添加的每个新平台添加另一个rdate_ *字段。

答案 2 :(得分:0)

我会使用一个至少包含三个表的数据库结构,如下所示:

Games
(
Id
Name
--any other relevant information, such as ESRB rating that will apply
)

Platforms
(
Id
Name
--any other relevant information
)

Game_Platforms
(
GameId
PlatformId
ReleaseDate
--any other relevant information
)

正如其他海报所述,这可以在添加新平台,更改发布日期(或完全取消)时提供更大的灵活性。