数据库架构的最佳方法主要侧重于按年和按月同时存储不同字段的数据
Best approach for database architecture heavily focused on storing data of different fields by year and by months at the same time
我需要确定这种方法,因为我认为如果项目变得足够大,数据库的体系结构可能会严重老化。
我的问题是,在我设计的当前架构下,数据库会呈指数级增长,如下所示:
entity Project {
projectId Long required
}
entity ProjectData {
yearId Long required
}
entity ProjectMetaData {
projectManager String,
company String,
agency String
}
entity FinancialData {
monthId Long required
}
entity KpiInfo {
otd Long,
oqd Long,
cumulatedOqd Long,
cumulatedOtd Long
}
entity ProductionInfo {
averageDailyCost Long,
averageDailyRevenue Long,
managementWorkload Long,
internalWorkload Long,
offshoreWorkload Long
}
relationship OneToOne {
Project to ProjectMetaData
ProjectData to FinancialData
}
relationship OneToMany {
Project to ProjectData
FinancialData to KpiInfo
FinancialData to ProductionInfo
}
图表如下所示:
diagram
基本上,Project 有一个唯一的项目 ID,每个项目都有其 ProjectMetaData 和 ProjectData,在那之后,项目进行的每一年都有 FinancialData,并且对于那一年的每个月,都有 KpiInfo 和 ProductionInfo。因此,如果我从过去 4 年到现在获取数据,这意味着我正在为单个项目创建大约 120 多个表,这就是我关心的地方,如果应用程序。变得足够大,就像我之前提到的那样,这意味着它之后的可扩展性将不会很好。
对于这种相同字段有多个版本的数据库,是否有任何通用的方法?
提前致谢,如果我没有说清楚,我很抱歉,我很乐意回答有关我的问题的任何疑问
我曾经在一个团队中,该团队必须为一家拥有奇怪公司日历的企业建立数据库。他们有一个财政年度,分为财政季度、财政月、财政周。他们想要按这些日期分组中的任何一个分组的历史报告。
我们最终做的是创建一个名为 Almanac 的 table,每天一行,主键是某种 suitable 格式的日期。 table 包含财政年度、财政月份等列。
然后,我们创建了一个生成器程序,用大约十年的数据填充此 table,应用公司的所有财务日期分组规则。
当我们需要根据这些分组生成历史摘要时,我们只需在日期 table 将交易数据加入年历,然后使用年历列进行分组。
您或许可以根据自己的情况调整此概念。数据库会增长,但在未来一段时间内加入可能是合理的。
根据您提供的有限信息很难判断,但我将以 table 为例。
将年份和月份添加为 table 中的列。更好的是,添加日期列。您可以将日期设置为该月的第一天或最大值。
entity KpiInfo {
year
month
otd Long,
oqd Long,
cumulatedOqd Long,
cumulatedOtd Long
}
这个 table 现在足以满足未来的所有时间。是的,你每年要插入12行。
我需要确定这种方法,因为我认为如果项目变得足够大,数据库的体系结构可能会严重老化。
我的问题是,在我设计的当前架构下,数据库会呈指数级增长,如下所示:
entity Project {
projectId Long required
}
entity ProjectData {
yearId Long required
}
entity ProjectMetaData {
projectManager String,
company String,
agency String
}
entity FinancialData {
monthId Long required
}
entity KpiInfo {
otd Long,
oqd Long,
cumulatedOqd Long,
cumulatedOtd Long
}
entity ProductionInfo {
averageDailyCost Long,
averageDailyRevenue Long,
managementWorkload Long,
internalWorkload Long,
offshoreWorkload Long
}
relationship OneToOne {
Project to ProjectMetaData
ProjectData to FinancialData
}
relationship OneToMany {
Project to ProjectData
FinancialData to KpiInfo
FinancialData to ProductionInfo
}
图表如下所示: diagram
基本上,Project 有一个唯一的项目 ID,每个项目都有其 ProjectMetaData 和 ProjectData,在那之后,项目进行的每一年都有 FinancialData,并且对于那一年的每个月,都有 KpiInfo 和 ProductionInfo。因此,如果我从过去 4 年到现在获取数据,这意味着我正在为单个项目创建大约 120 多个表,这就是我关心的地方,如果应用程序。变得足够大,就像我之前提到的那样,这意味着它之后的可扩展性将不会很好。
对于这种相同字段有多个版本的数据库,是否有任何通用的方法?
提前致谢,如果我没有说清楚,我很抱歉,我很乐意回答有关我的问题的任何疑问
我曾经在一个团队中,该团队必须为一家拥有奇怪公司日历的企业建立数据库。他们有一个财政年度,分为财政季度、财政月、财政周。他们想要按这些日期分组中的任何一个分组的历史报告。
我们最终做的是创建一个名为 Almanac 的 table,每天一行,主键是某种 suitable 格式的日期。 table 包含财政年度、财政月份等列。
然后,我们创建了一个生成器程序,用大约十年的数据填充此 table,应用公司的所有财务日期分组规则。
当我们需要根据这些分组生成历史摘要时,我们只需在日期 table 将交易数据加入年历,然后使用年历列进行分组。
您或许可以根据自己的情况调整此概念。数据库会增长,但在未来一段时间内加入可能是合理的。
根据您提供的有限信息很难判断,但我将以 table 为例。
将年份和月份添加为 table 中的列。更好的是,添加日期列。您可以将日期设置为该月的第一天或最大值。
entity KpiInfo {
year
month
otd Long,
oqd Long,
cumulatedOqd Long,
cumulatedOtd Long
}
这个 table 现在足以满足未来的所有时间。是的,你每年要插入12行。