【发布时间】:2008-10-17 00:21:11
【问题描述】:
我需要一个可以在单个维度内存储非重叠范围的数据结构。不需要完全覆盖维度的整个范围。
例如会议室调度程序。维度是时间。没有两个时间表可以重叠。会议室并不总是安排好的。换句话说,对于给定的时间,最多只能有一个时间表。
一个快速的解决方案是使用一个范围来存储开始和结束时间。
Range {
Date start
Date end
}
这是非规范化的,需要容器强制不重叠。对于两个相邻的范围,前一个的结束与下一个的开始是多余的。
另一种方案可能涉及为每个范围存储一个边界值。但是对于连续的范围序列,边界值总是比范围多一个。为了解决这个问题,序列可以表示为交替的边界值和范围:
B = 边界值,r = 范围
B-r-B-r-B
数据结构可能如下所示:
Boundary {
Date value
Range prev
Range next
}
Range {
Boundary start
Boundary end
}
本质上它是一个具有交替类型的双向链表。
最终,我使用的任何数据结构都将在内存(应用程序代码)和关系数据库中表示。
我很好奇存在哪些学术或行业尝试过的解决方案。
【问题讨论】:
标签: database-design data-structures normalizing