我们有一个游戏桌,每个游戏只在该表中添加一次,但其中许多都有几个平台,如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 |
哪一个更好?
答案 0 :(得分:0)
通常,您希望将一个条目限制为字段(不包含Xbox,PS3作为单个条目)。为此,您应该创建另一个将平台链接到游戏的表格;该平台的发布日期也可以保留在此处。你会得到类似你的第二张桌子的东西,另一张桌子按ID列出所有游戏。
另外,既然你说每年大约有200场比赛,那么可能值得研究一下NoSQL数据库,比如Mongo。这些数据库允许您拥有与表中的某些条目相关联的字段,而不允许其他字段,并允许您根据此进行过滤。
另请注意,SQL LEAST
和GREATEST
查询不适用于与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
)
正如其他海报所述,这可以在添加新平台,更改发布日期(或完全取消)时提供更大的灵活性。