2013-07-29 21 views
0

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

同时,我们有不同类型的像确切日期的发布日期,例如29 2012年10月,或Q1,Q2,Q3,Q4 2014年,或者TBA地2014年OR只是TBA ...

现在,我的问题是否存在:

添加领域与平台数量一样多,并在其中添加发布日期并通过LEAST()和GREATEST()选择所有这些更好?

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

哪一个数据库更容易和更轻?

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

另外请注意,我们想要在即将推出的页面中展示两次这个游戏,如果它为不同的平台发布两次。如果在同一日期发布其所有平台,则只展示一次。


这是我的第一个模型:

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

| 27 |电脑,Xbox360,PS3 | 20140306 | pc = Q4 | 20140000 | 20140306 | 20140400 |


,这是我的第二个模型:

| id |平台| rdate | rtype |

| 27 | pc | 20140000 | Q4 |

| 27 | ps3 | 20140400 | TBA |


那么哪一个更好?

+0

如果您的意思更好,那么您的意思就是更有能力长期扩展第二种方法。像数据不应该重复,发布日期的概念是唯一的平台和游戏,所以我可能会有一个游戏桌,一个平台表和一个包含发布日期的平台游戏表。每个游戏/平台/发布日期的平台游戏中将存在单独的行。 – xQbert

回答

0

一般来说,你想限制一个字段(没有Xbox,PS3作为单个条目)。为此,您应该创建另一个将平台链接到游戏的表格;该平台的发布日期也可以保存在这里。你会有类似你的第二张桌子的东西,另一张桌子上会列出所有的游戏。另外,既然你说过每年在dB中会有大约200场比赛,那么可能需要考虑一下NoSQL数据库,比如Mongo。这些数据库允许您在表格中包含与某些条目相关联的字段,但不允许其他字段,并允许您基于此进行过滤。

另请注意,SQL LEASTGREATEST查询将不会与日期混合在一起,如Q4,我不相信。

0

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

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 
) 

正如其他海报指出,这使得在加入新的平台更加灵活,发行日期改变(或完全取消)。