包含历史数据的数据库模型

时间:2017-08-20 13:51:48

标签: sql database database-design historical-db

首先,我将通过现实生活中的例子来解释我的问题。 假设我们是公司,我们正在销售不同的运输方式,例如:汽车,公共汽车,卡车,火车,飞机等 我们假设我们每天有大约10,000个不同的项目,每天都有变化。

对于每件物品,我们都有一个独特的名称(例如,汽车奥迪A8 X或飞机波因747-200B Y),其中X和Y是唯一值。 不要担心命名,因为它工作得很好。

对于每个项目,我们也有一些特殊数据。数据取决于类型,例如用于汽车:尺寸(长度,宽度,高度......),动力传动系等。对于飞机我们有例如:长度,内部宽度,翼展,翼面,翼扫等。

现在问题是......我想把所有这些来自不同Excel文件和纸张的数据都放到数据库中。

问题1:哪种数据库模型更好?

创意#1:我打算创建一个名为 items 的表格,我只会存储我们正在销售的产品名称(例如汽车奥迪A8 X,飞机Boing 747-200B Y等)。而且在其他表(汽车飞机火车 ......)中,我将存储汽车/飞机/火车的额外数据。 因此,如果我想获得所有数据,例如汽车比我必须检查表汽车。如果我想获得所有数据,例如火车比我必须检查表火车

想法#2:我应该创建一个表格来存储所有项目的名称(就像在#1,项目中一​​样)。除了额外的数据透视表(例如数据,包含字段:item,key,value),我将能够找到所有信息吗?

问题2:我需要所有数据的历史记录。在第一种情况下,我将不得不复制例如表 car 只是因为一个字段不同。但是对于Idea#2 ...对于数据库中的所有行数据,如果数据有效(或何时有效),则需要获取信息。

你能帮帮我吗?我不知道哪种型号更好或者在生产中实际使用的是哪种型号。另外......有关于将历史数据存储到数据库的好书吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

你向我们提出两个问题。第一个是组织有关子类型(汽车,公共汽车,卡车等)的专业数据。第二个是处理时态(历史)数据。

您的想法#1类似于称为“类表继承”的设计模式。如果你要对这个短语进行搜索,你会发现很多文章都概述了它的确切运作方式。这些将几乎确认您的初步反应,但他们将添加更多有用的细节。您还可以在此站点和DBA站点中找到许多对先前Q& A条目的引用。

对于备用设计,请查找“单表继承”。这将所有内容存储在一个胖表中,NULLS位于与手头案例无关的空间中。

我不确定您在数据透视表中存储内容的含义。我熟悉Excel中的数据透视表,但我总是将它们用作从存储数据的普通表计算的结果。

如何处理历史数据是一个单独的问题。