2

我正在使用 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)在对阵维兰德之前的 20 场比赛中与场均 5 次或更少得分的球队投球时,底特律的天气如何影响投注线?(如您所见,复杂的问题会产生复杂的关系和查询。)

那么,如果我继续并开始收集如上所示的数据,是否可以,或者这会给我带来很大的麻烦?

4

2 回答 2

3

未来验证数据库的主题是一个很大的主题。一般来说,数据库越成功,就越有可能遭受任务蠕变,从而产生新的需求。

一个非常基本的问题是:谁将提供新的要求?从您编写问题的方式来看,听起来您已经构建了数据库以满足您自己的需求,并且您还将在未来发明或发现新的需求。如果这不是真的,那么您需要研究客户需求的演变模式,以便至少猜测任务蔓延可能会将您引向何方。

规范化是答案的一部分,这方面已经在之前的答案中处理过。通常,部分非规范化的数据库比完全规范化的数据库更不经得起未来的考验。一个非规范化的数据库已经适应了当前的需求,越适应的东西,它的适应性就越差。但规范化远非全部答案。还有其他方面的未来证明。

这就是我要做的。了解分析和设计之间的区别,尤其是在数据库方面。了解如何使用 ER 建模来捕获当前需求而不包括当前设计。警告:并非所有 ER 建模专家都使用它来表达需求分析。特别是,您从分析模型中省略了外键,因为外键是解决方案的一个特征,而不是问题的一个特征。

同时,维护一个关系模型,该模型符合您的 ER 模型的要求,也符合规范化规则和其他简单声音设计的规则。

当发生变化时,首先查看您的 ER 模型是否需要更新。有时答案是否定的。如果答案是肯定的,首先更新您的 ER 模型,然后更新您的关系模型,然后更新您的数据库定义。

这是很多工作。但如果新要求确实至关重要,它可以为您节省大量工作。

于 2013-05-17T11:00:23.007 回答
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  |
+-----------+-----------+--------------+-----------+-----------+

您可以在此处阅读有关标准化的更多信息

于 2013-05-17T07:41:45.340 回答