SQL值依赖于时间[关闭]

问题描述 投票:2回答:2

我建立公交车的数据库仓库库存。该公司将购买更多的公交车随着时间的推移,这些采购计划,并为这些巴士行有前途购买日期。一些公交车目前在库存已按计划容纳人数增加。有没有办法有在这取决于日期数据库中的价值?

例如,如果我在2019-03-04库存查询公交车,Bus13将在座位35,但如果我查询2020-01-01Bus13将有37在座位。

任何帮助或指导,将不胜感激。

谢谢!

mysql database-design
2个回答
1
投票

这就是所谓的Type 2 Dimension。它基本上是行与有效日期和结束日期。例如:

create table busses (
    bus_id int auto_increment primary key,
    capacity int not null,
    eff_date datetime,
    end_date datetime,
    created_at datetime
);

当您插入新行,你需要“关闭”之前的行并添加一个新的。这通常是在存储过程中或在应用程序逻辑来完成。


2
投票

[bus]-|---0<[capacity]

Answer by Linoff是正确的,但对于一个反规范化的数据仓库。

在规范化的关系数据库,你就必须有一个bus表儿童capacity父表。该capacity将有一个开始和截止日期,全值不与同级行对同一母公司重叠。 SQL使得此没有规定,所以你的应用逻辑或存储过程必须执行日期范围(抵接,不重叠,无缺口)的整洁。

如果你想知道一个总线的能力,你必须指定一个日期,然后做一个跨越两个表的连接。

没有能力行总线将意味着它是全新的,尚未部署到舰队。一旦部署,总线总是有在capacity表中至少有一行。

有关最新的记录,为当前有效的能力,我们必须决定怎样做停止日期。有些人可能会提出一个null,但我可以推荐Chris Date的回避,每当有null同意。我会选择在未来的某个特定日期的占位符。但不太远的一些数据库或软件库可能会受到限制。

作为托尔斯滕KETTNER这个答案评论,在技术上对capacity表的截止日期列是多余的,如果您的日期范围邻接代码是正确的,完整的可以省略。

© www.soinside.com 2019 - 2024. All rights reserved.