0

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

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

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

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

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

想法#1:我将创建一个名为items的表,我将在其中仅存储我们正在销售的产品的名称(例如汽车 Audi A8 X、飞机 Boing 747-200B Y 等)。与其他表(汽车飞机火车……)相比,我将存储汽车/飞机/火车的额外数据。因此,如果我想获取例如 car 的所有数据,则必须检查 table car。如果我想获得例如 train 的所有数据,我将不得不检查 table train

想法#2:我是否应该创建一个表来存储所有项目的名称(就像在想法#1 中的items)。除了额外的数据透视表(例如,带有字段的数据:项目、键、值)之外,我还能在哪里找到所有信息?

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

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

谢谢!

4

1 回答 1

2

您向我们提出了两个问题。首先是组织关于子类型(汽车、公共汽车、卡车等)的专门数据。第二个是处理时间(历史)数据。

您的想法 #1 类似于称为“类表继承”的设计模式。如果您对这个短语进行搜索,您会发现许多文章准确地概述了它的工作原理。这些几乎可以确认您的最初反应,但它们会添加更多有用的细节。您还可以在此站点和 DBA 站点中找到许多对以前问答条目的引用。

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

我不确定您将某些内容存储在数据透视表中是什么意思。我熟悉 Excel 中的数据透视表,但我一直将它们用作从存储数据的普通表计算的结果。

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

于 2017-08-21T10:44:56.277 回答