提问者:小点点

具有历史数据的数据库模型


首先,我将用现实生活中的例子来解释我的问题。假设我们是一家公司,我们销售不同的运输工具,例如汽车、公共汽车、卡车、火车、飞机等。假设我们有大约10,000,000种不同的产品,每天都有变化。

对于每个项目,我们都有一个唯一的名称(例如,汽车奥迪A8 X或飞机波音747-200by),其中X和Y是唯一的值。不用担心命名,因为它工作很好。

对于每一项,我们也有一些特殊的数据。数据取决于类型,例如汽车:尺寸(长度、宽度、高度……)、动力总成等。对于飞机,我们有例如长度、内部宽度、翼展、机翼面积、机翼后掠等。

而现在的问题…我想把所有这些数据从不同的Excel文件和纸到数据库。

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

想法1:我将创建一个表,称为项目,在那里我将只存储我们正在销售的产品名称(例如,汽车奥迪A8 X,飞机波音747-200B Y等)。与其他表(car,plane,train……)相比,我将存储cars/plane/trains的额外数据。因此,如果我想要得到所有的数据,例如,车比,我将不得不检查表车。如果我想要得到所有的数据,例如,火车比,我将不得不检查表火车。

想法2:我是否应该创建一个表来存储所有项目的名称(就像想法1中的items一样)。还有附加的数据透视表(例如,带有字段的数据:项目、键、值),我可以在其中找到所有的信息?

问题2:我需要所有数据的历史记录。在第一种情况下,仅仅因为一个字段不同,我就必须从例如表car中复制行。但是对于Idea#2...对于数据透视表中的所有行,数据都需要有数据是否有效(或何时有效)的信息。

你能帮帮我吗?我不知道哪种型号更好,也不知道生产中实际使用的是什么。还有...有没有什么关于将历史数据存储到数据库的好书?

谢谢!


共1个答案

匿名用户

你给我们带来了两个问题。首先是组织关于子类型(轿车、公共汽车、卡车等)的专门数据。二是处理时态(历史)数据。

您的想法#1类似于一种名为“类表继承”的设计模式。如果你对这个短语做一个搜索,你会发现很多文章概述了它的工作原理。这些会很好地证实你的最初反应,但它们会增加更多有用的细节。您还会在这个站点和DBA站点中找到许多以前的问答条目的引用。

对于另一种设计,请查阅“单表继承”。这将所有内容存储在一个fat表中,在与手头的案例无关的空格中使用空值。

我不知道你把东西存储在数据透视表中是什么意思。我很熟悉Excel中的透视表,但我一直将其用作从存储数据的普通表计算出的结果。

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