首先,我将使用现实生活中的例子来解释我的问题。 假设我们是公司,我们正在销售不同的交通工具,例如汽车、公共汽车、卡车、火车、飞机等。 假设我们有大约 10.000.000 个不同的项目,每天都在变化。
对于每个项目,我们都有一个唯一的名称(例如奥迪A8 X或飞机Boing 747-200B Y(,其中X和Y是唯一值。 不用担心命名,因为它工作得很好。
对于每个项目,我们还有一些特殊数据。数据取决于类型,例如汽车:尺寸(长、宽、高等(、动力总成等。对于飞机,我们有例如长度、内部宽度、翼展、机翼面积、机翼后掠角等。
现在的问题...我想将来自不同Excel文件和纸张的所有这些数据放入数据库。
问题1:哪种数据库模型更好?
想法#1:我将创建一个表,称为项目,我将在其中仅存储我们正在销售的产品的名称(例如汽车奥迪A8 X,飞机Boing 747-200B Y等(。并且比其他表格(汽车,飞机,火车...我将存储汽车/飞机/火车的额外数据。 因此,如果我想获取例如汽车的所有数据,我将不得不检查桌车。如果我想获取例如火车的所有数据,我将不得不检查表火车。
想法#2:我是否应该创建一个表来存储所有项目的名称(就像在想法#1中一样,项目(。而不是额外的数据透视表(例如带有字段的数据:项目、键、值(,我将能够找到所有信息?
问题 2:我需要所有数据的历史记录。在第一种情况下,我将不得不从例如表格车中复制行,因为一个字段不同。但是对于想法#2...对于数据透视表中的所有行,数据必须包含数据是否有效(或何时有效(的信息。
你能帮帮我吗?我不知道哪个模型更好,也不知道生产中实际使用什么。也。。。有没有关于将历史数据存储到数据库的好书?
谢谢!
你向我们提出了两个问题。 首先是组织有关子类型(汽车、公共汽车、卡车等(的专用数据。第二个是处理时间(历史(数据。
您的想法 #1 类似于称为"类表继承"的设计模式。 如果您搜索此短语,您会发现许多文章概述了它的工作原理。 这些几乎可以确认您的初始反应,但它们将添加更多有用的细节。 您还可以在本站点和DBA站点中找到对以前问答条目的大量引用。
有关替代设计,请查找"单表继承"。 这会将所有内容存储在单个胖表中,NULLS 位于与手头案例无关的空间中。
我不确定您在数据透视表中存储某些内容是什么意思。 我熟悉Excel中的数据透视表,但我始终将它们用作从存储数据的普通表计算的结果。
如何处理历史数据是一个单独的问题。