相关疑难解决方法(0)

确定两个日期范围是否重叠

给定两个日期范围,确定两个日期范围是否重叠的最简单或最有效的方法是什么?

举个例子,假设我们有通过日期时间变量表示的范围StartDate1EndDate1 StartDate2EndDate2.

language-agnostic math datetime

1180
推荐指数
16
解决办法
38万
查看次数

数据库 - 数据版本控制

关于在数据库中对数据进行版本控制,我已经阅读了关于SO的一些问题(比如这一个).

我喜欢上面提到的一些建议.我有最长的时间想要(需要)修改我的许多桌子,但从来没有绕过它.作为一个只有简单的数据库工作的程序员,我想知道如何才能真正做到这一点.

我不是要求SQL语法中的实际解决方案.我最终可以为自己解决这个问题(或者在时机成熟时发布).我只是要求人们评论他们将如何进行评论以及如果我要"修改"数亿条记录,可能会出现任何潜在的性能问题.或者任何其他建议,只要它基于以下示例.

举个简单的例子:

Person
------------------------------------------------
ID                UINT NOT NULL,
PersonID          UINT NOT NULL,
Name              VARCHAR(200) NOT NULL,
DOB               DATE NOT NULL,
Email             VARCHAR(100) NOT NULL

Audit
------------------------------------------------
ID                UINT NOT NULL,
UserID            UINT NOT NULL,               -- Who
TableName         VARCHAR(50) NOT NULL,        -- What
OldRecID          UINT NOT NULL,               -- Where
NewRecID          UINT NOT NULL,
AffectedOn        DATE NOT NULL,               -- When
Comment           VARCHAR(500) NOT NULL        -- Why
Run Code Online (Sandbox Code Playgroud)

如果TableName是一个字符串,我不确定如何将Audit表链接到任何其他表(例如Person)?

另外,假设我有三个GUI来填充:

  1. 特定人员ID的完整记录
  2. 列出所有人的表格视图(按ID)
  3. 一个视图,显示每个人在每个条目下面的修订信息(每人的修订数量,修订日期,修订注释等),按最新修订排序.

要完成1和2,查询Person表或Audit表会更好吗?

要完成3,所谓的数据库专家是否只需获取所有记录并将其传递给软件进行处理,或按PersonID和受影响日期分组?这通常是在一个查询中处理还是多个?

database versioning database-design

52
推荐指数
2
解决办法
2万
查看次数

为什么我们需要时态数据库?

我正在阅读有关时态数据库的内容,看起来它们已经建立了时间方面.我想知道为什么我们需要这样的模型?

它与普通的RDBMS有何不同?我们不能有一个普通的数据库,即RDBMS,并说有一个触发器,它将时间戳与发生的每个事务相关联吗?可能会有性能损失.但我仍然对在市场上具有强大案例的时态数据库持怀疑态度.

目前的任何数据库都支持这样的功能吗?

database temporal-database

48
推荐指数
5
解决办法
3万
查看次数

单个维度内非重叠范围的数据结构

我需要一个可以在一个维度内存储非重叠范围的数据结构.不需要完全覆盖整个尺寸范围.

一个例子是会议室调度程序.维度是时间.没有两个时间表可能重叠.会议室并非始终安排.换句话说,对于给定时间,最多可以有一个时间表.

快速解决方案是存储开始和结束时间的范围.

Range {
    Date start
    Date end
}
Run Code Online (Sandbox Code Playgroud)

这是非规范化的,要求容器不强制执行.对于两个相邻的范围,前一个'结束将在下一个开始时是多余的.

另一种方案可能涉及存储每个范围的一个边界值.但是对于连续的范围序列,总会有一个边界值而不是范围.为了解决这个问题,序列可以表示为交替的边界值和范围:

B =边界值,r =范围

BrBrB

数据结构可能如下所示:

Boundary {
    Date value
    Range prev
    Range next
}

Range {
    Boundary start
    Boundary end
}
Run Code Online (Sandbox Code Playgroud)

从本质上讲,它是具有交替类型的双向链表.

最终,我使用的任何数据结构都将在内存(应用程序代码)和关系数据库中表示.

我很好奇学术界或行业所尝试的解决方案是什么.

normalizing database-design data-structures

8
推荐指数
1
解决办法
3879
查看次数

时间绑定层次结构的最佳关系数据库表示

大家认为什么是SQL中有时间限制的层次结构的最佳表示?

我的意思是:
- 在任何给定的日期,你有一个普通的树层次结构
- 这个层次结构可以从一天到
另一个变化- 每个孩子在任何给定的日期仍然只有一个父

第1天......

Business
 |
 |-Joe
 |  |-Happy
 |  |-Sneezy
 |  |-Doc(*)
 |
 |-Moe
    |-Bashfull
    |-Sleepy
Run Code Online (Sandbox Code Playgroud)

第2天......

Business
 |
 |-Joe
 |  |-Happy
 |  |-Sneezy
 |
 |-Moe
    |-Doc(*)
    |-Bashfull
    |-Sleepy
Run Code Online (Sandbox Code Playgroud)

孩子可以在任何时候第一次加入层次结构,或者完全离开层次结构.(例如,新员工和退休员工.)

主要考虑因素:

  • 更新层次结构
  • 查看日期范围内的整个层次结构
  • 报告层次结构中的整个子树
  • 报告日期范围内的整个子树

我知道我现在是怎么做的,但我对其他人怎么做可能很感兴趣:)

编辑

我天真地假设了一些考虑,所以会更明确......

  • 每个"团队"或"人员"在其他地方的维度表中都会有唯一的ID
  • 其他事实表将使用这些ID(例如,存储性能指标)
  • 该结构需要促进跨日期范围的历史报告
  • 使用ETL或触发器来维护替代结构是一种选择

通用性质是最重要的(仅形成通用关系模式的一部分),结合易于使用的驱动报告(对于任何日期范围的树的任何部分)以及可靠更新的能力.

sql database reporting hierarchy

5
推荐指数
1
解决办法
1942
查看次数