我正在使用MySQL,InnoDB,并在Ubuntu 13.04上运行它。
我的一般问题是:如果我不知道我的数据库将如何发展或最终需要什么,我现在不应该担心冗余和关系吗?
以下是我的情况:
我目前正在从头开始建立棒球数据库,但我不确定应该如何进行。现在,我正在以模块化的方式接近设计。例如,我目前正在编写一个python脚本来解析体育博彩网站的XML提要,该网站告诉我钱线和上/下。由于我需要开始记录信息,我想知道我是否应该继续填充表格并担心密钥等等。
因此,例如,我的python体育赔率抓取脚本会填充三个表(游戏,金钱线,大/小),如下所示:
DateTime = Date and time of observation
Game
+-----------+-----------+--------------+
| Home Team | Away Team | Date of Game |
+-----------+-----------+--------------+
Money Line
+-----------+-----------+--------------+-----------+-----------+----------+
| Home Team | Away Team | Date of Game | Home Line | Away Line | DateTime |
+-----------+-----------+--------------+-----------+-----------+----------+
Over/Under
+-----------+-----------+--------------+-----------+-----------+----------+----------+
| Home Team | Away Team | Date of Game | Total | Over | Under | DateTime |
+-----------+-----------+--------------+-----------+-----------+----------+----------+
我觉得我应该对冗余(主队,客队,比赛日期)信息栏做些什么,但我真的不知道我的数据库将如何扩展,以及我将以何种方式把所有东西连在一起。我基本上是建立一个数据库,所以我可以回答复杂的问题,如:
当Justin Verlander在对阵Verlander之前的20场比赛中平均每场比赛5次或更少的球队投球时,底特律的天气如何影响投注线? (如您所见,复杂的问题会产生复杂的关系和查询。)
如果我继续开始收集如上所示的数据,那么这样做是否正常,或者这会不会让我头疼?
答案 0 :(得分:2)
未来校对数据库的主题很大。一般而言,数据库越成功,就越有可能遭受任务蔓延,因此有了新的要求。
一个非常基本的问题是:谁将提供新的要求?从您编写问题的方式来看,听起来您已经构建了数据库以满足您自己的要求,并且您还将发明或发现新的需求。如果不是这样,那么你需要研究客户需求的演变模式,以便至少猜测任务蔓延可能会引导你的位置。
归一化是答案的一部分,这个方面已经在先前的答案中得到了解决。通常,部分非规范化数据库的未来证明比完全规范化的数据库更少。非规范化数据库已经过调整以满足需求,而适应性越强,其适应性就越低。但正常化远不是完整的答案。未来打样还有其他方面。
这就是我要做的。了解分析和设计之间的区别,特别是在数据库方面。了解如何使用ER建模来捕获当前需求,而不包括当前设计。警告:并非所有ER建模专家都使用它来表达需求分析。特别是,您从分析模型中省略了外键,因为外键是解决方案的一个特性,而不是问题的一个特征。
同时,维护一个符合ER模型要求的关系模型,并符合规范化规则和其他简单声音设计规则。
当出现更改时,首先要查看您的ER模型是否需要更新。有时答案是否定的。如果答案是肯定的,首先更新您的ER模型,然后更新您的关系模型,然后更新您的数据库定义。
这是很多工作。但如果新要求真正至关重要,它可以为您节省大量工作。
答案 1 :(得分:1)
尝试规范化您的数据(以便您没有冗余信息),例如:
Game
+---+-----------+-----------+--------------+
|ID | Home Team | Away Team | Date of Game |
+---+-----------+-----------+--------------+
Money Line
+-----------+-----------+--------------+-----------+
| Game_ID | Home Line | Away Line | DateTime |
+-----------+-----------+--------------+-----------+
Over/Under
+-----------+-----------+--------------+-----------+-----------+
| Game_ID | Total | Over | Under | DateTime |
+-----------+-----------+--------------+-----------+-----------+
您可以阅读有关NORMALIZATION here
的更多信息