Database design 数据库设计:在一个表中添加两个不同的列还是添加另一个表?

Database design 数据库设计:在一个表中添加两个不同的列还是添加另一个表?,database-design,Database Design,我正在开发一个web应用程序,将有关车祸的数据存储在sql server数据库中 我需要一种方法来储存发生事故的道路。 最初我认为在事故表中有两个不同的列(比如说第一条路,第二条路)(第二条用于十字路口)。 我的一个朋友说,最好有一个不同的路线表 我不知道哪种解决办法更好 据估计,事故表每年大约有1000条记录:与另一个表的连接在性能上会很昂贵吗 应用程序的一个目标是创建统计报告;其中之一是最危险道路的列表,数据库中可能有两列,创建该报告可能会有问题。你觉得怎么样 谢谢 更新: 道路名称不是我需

我正在开发一个web应用程序,将有关车祸的数据存储在sql server数据库中

我需要一种方法来储存发生事故的道路。 最初我认为在事故表中有两个不同的列(比如说第一条路,第二条路)(第二条用于十字路口)。 我的一个朋友说,最好有一个不同的路线表

我不知道哪种解决办法更好

据估计,事故表每年大约有1000条记录:与另一个表的连接在性能上会很昂贵吗

应用程序的一个目标是创建统计报告;其中之一是最危险道路的列表,数据库中可能有两列,创建该报告可能会有问题。你觉得怎么样

谢谢

更新:
道路名称不是我需要存储的唯一信息。一个重要的数据是街道号(如果事故发生在城市内)或英里数(城市外)。在这个阶段我没有地理坐标

让事故表包含这些字段怎么样


意外ID(PK)、Road1Id(FK),最好使用两个表。一个具有两个ID列,每条道路一个。第二个表将包含所有道路名称。这将减少您在长期内必须输入的实际信息量,并减少使用不同名称输入道路名称两次的机会

它还可以使报告速度更快,因为您可以通过道路ID而不是名称进行汇总


这背后有一个完整的数据库理论/数学系统,称为数据规范化。这是学习它的一个很好的起点。

我个人会为每一件事建立单独的表格,尤其是统计分析。道路可以有名称、邮政编码、城镇等,这些都有助于分析。但是,如果您存储的只是道路名称,我认为您没有必要使用单独的表。这么说来,每年1000条记录根本算不了什么。而简单地连接到另一个表对性能的影响应该可以忽略不计。

如果您只希望看到最多两条道路,那么我可能不会将道路标准化到单独的表中,而是在主表中包含Road1和Road2字段。但是,如果您可能会看到2条以上的道路,那么您可能需要考虑事故表(1)和道路表(多)之间的1对多关系


当您计划进行统计分析时,您可能会遇到一些问题,因为这里的英国道路名称不足以确定位置。根据事故位置上的数据量,您可能希望扩展记录物理位置的方式,以便进行分析,而不仅仅是道路名称。

根据当今的数据库设计标准,您希望消除冗余

因此,一个单独的路标绝对是一个好建议

下一个问题是是否使用空值进行修改。空值通常更快,因为您不需要交叉联接,并且如果经常填充空值,则空值更可取

由于一次事故只能发生在一条或两条道路上,我建议使用带有roadA、roadB的事故表和带有roads的道路表

我不知道哪种解决办法更好

第一步。在做其他事情之前,先买一本关于关系数据库设计的好书。认真地这是一个很好理解的问题,你需要更多的背景知识

第二步。在学习了普通数据库设计之后,购买Kimball的数据仓库工具包

据估计,事故表每年大约有1000条记录:与另一个表的连接在性能上会很昂贵吗

这在显微镜下很小。认真地在你谈论100000条记录之前,你并没有一个很大的数据库

应用程序的一个目标是创建统计报告;其中之一是最危险道路的列表,数据库中可能有两列,这可能是创建该报告的一个问题。你觉得怎么样

立即购买Kimball的数据仓库工具包

你有一个“事实”表,这是一个意外。事故可能没有可测量的数量。它变成了一个奇怪的“无事实的事实表”,因为您没有与事故相关的度量。理想情况下,你有一个事实(比如成本或其他)

你有事故的规模:

  • 时间
  • 道路(实际上是从事故事实到该维度的两个参考)
  • 车辆
  • 事故类型(仅限财产损失、伤害、死亡)
  • 原因(驱动器错误、机械问题等)

每个维度都是一个单独的表,就像中心事实表一样。

也许你可以从这样的东西开始——只是为了给你一个想法


我的第一个解决方案与您的类似,我同意您需要一个存储所有道路名称的道路表。我现在将使用这个解决方案,因为它不会对我的设计产生太大影响。我将搜索是否有意大利版本的它:-)也许下一步将是实现事故数据集市。现在我没有那么熟练,也没有时间。无论如何,谢谢。道路名称不是我需要存储的唯一信息。一个重要的数据是街道号(如果事故发生在城市内)或英里数(城市外)。在这个阶段我没有地理坐标。让事故表包含这些字段怎么样?:AccidentId(PK),Road1Id(FK),一个单独的表有用的例子是在一些罕见的情况下,一个点可以有3条(或更多!)道路相交。这不仅使交通信号更加复杂,而且如果它只有两个道路f,它将超过数据库的限制