2011-02-01 83 views
2

我正在开发一个Web应用程序,用于在SQL Server数据库上存储关于车祸的数据。数据库设计:在一个表中添加两个不同的列或添加另一个表?

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

我不知道哪个解决方案更好。

事故表每年估计约有1000条记录:与另一张表的连接在性能方面是否可能很昂贵?

该应用程序的目标之一是创建统计报告;其中之一就是最危险的道路列表,可能在数据库中有两列是创建该报告的难题。你有什么想法?

谢谢。

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

什么具有这些领域事故表:

AccidentId(PK),Road1Id(FK),< - 点到路表存储所有的路名Road2Id(FK),Road1_StreetNumber_or_Mile,Road2_StreetNumber_or_Mile等...

+0

道路名称不是我需要存储的唯一信息。重要的数据是街道号码(如果事故发生在城市内)或英里(城市外)。在这个阶段,我没有地理坐标。 什么具有这些领域事故表: AccidentId(PK), Road1Id(FK),< - 点到路表中存储所有的路名 Road2Id(FK) Road1_StreetNumber_or_Mile, Road2_StreetNumber_or_Mile 等等 – Liuc 2011-02-02 11:39:25

回答

0

最好使用2个表格。一个带有2个ID列,每个道路一个。第二个表格将包含所有道路名称。这会减少您长期输入的实际信息量,并减少以不同名称输入道路名称两次的机会。

它也会使报告更快,因为您可以通过道路的ID而不是名称进行求和。

这是一个完整的数据库理论/数学系统,称为数据标准化。这个,http://en.wikipedia.org/wiki/Database_normalization是了解它的一个很好的起点。

+0

我的第一个解决方案是类似的,我同意你的需要房颤路表中存储所有的道路名称。我现在将使用此解决方案,因为它不会对我的设计造成太大影响。 – Liuc 2011-02-01 13:36:18

1

我个人会为所有事情分开表格,尤其是统计分析。一条路可以有一个名字,邮编,城镇等,每一个都可以帮助分析。但是,如果你所存储的只是道路名称,我认为你不需要有独立的桌子。在说,每年1000条记录绝对没有。一个简单的连接到另一个表应该对性能有微不足道的影响。

0

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

正如你打算做统计分析,那么你可能会有问题,当然在这里英国道路名称是不足以确定一个位置。根据您在事故现场的数据量,您可能需要扩展记录物理位置的方式,以便进行分析,而不仅仅是道路名称。

+0

一个单独表格可能有用的例子是在一些罕见的情况下,可能有3个(或更多!)个道路相交在一个点上。这不仅使交通信号更加复杂,而且如果它只有两个道路区域,它将超过数据库的限制。 – StockB 2013-10-02 16:28:45

0

从今天的数据库设计标准,你想消除冗余。

所以一个单独的路表绝对是一个很好的建议。

接下来的问题是是否修改有或没有空值。空值通常更快,因为您不需要交叉连接,并且如果它们经常被填充,则优选它们。

由于一次事故只能在一两条道路上发生,因此我会推荐一条与roadA,roadB和路面道路交通事故表。

+0

有些交叉路口没有2个,但是3个(或更多)路口相交呢?这是罕见的,但并不是闻所未闻的。 – StockB 2013-10-02 16:30:32

0

我不知道哪个解决方案更好。

第1步。在做另一件事之前先购买关于关系数据库设计的好书。认真。这是一个很好理解的问题,你需要更多的背景。

第2步。在了解普通数据库设计之后,购买Kimball的The Data Warehouse工具包。

事故表估计每年约有1000条记录:与另一张表的连接在性能方面是否可能很昂贵?

这在显微镜下很小。认真。在你谈论10万条记录之前,你并不是真的有一个非常大的数据库。

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

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

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

你有意外的尺寸:

  • 时间
  • 路(实际上是两个引用从事故其实这个尺寸)
  • 车辆?
  • 类型事故的(财产损失只,损伤,死亡)
  • 原因(驱动程序错误,机械故障等)

每个尺寸是一个单​​独的表,由于是中央事实表。

+0

我会搜索是否有意大利版本:-) 也许下一步将是实现事故数据集市。现在我不是很熟练,我没有时间。不管怎样,谢谢你。 – Liuc 2011-02-01 13:42:53

0

也许你可以从这样的事情开始 - 只是为了给你一个想法。

enter image description here

相关问题