使用位域进行调度?

时间:2011-08-24 13:00:17

标签: mysql ruby-on-rails bits

使用位域存储和管理计划是否有意义?

我正在开发一个Ruby on Rails应用程序来处理餐厅的营业时间和预订,我的建模时间表有些困难。

每家餐厅每天都有开放时间(如周一上午9点​​至下午12点和下午2点至下午5点),餐厅的每张桌子都有一个尺寸(2,4,8座位等)和自己的开口。

到目前为止,我一直在使用两个表来跟踪事情:

OPENING_HOURS

  • day_of_the_week(string)
  • starts_at(时间)
  • ends_at(时间)

预订

  • table_id(int)
  • starts_at(datetime)
  • ends_at(datetime)

根据这些表格,我可以确保新预订不会与同一张桌子的其他预订重叠,并且预订属于一周中某天的开放时间范围。

但是,在时间表中找到空位是有问题的。也就是说,考虑到一组营业时间和现有预订,缺口在哪里可以容纳新的预订?

在通过StackOverflow寻找灵感时,我遇到了this comment about using bitfields for schedules,它引起了我的好奇心。我对按位逻辑一无所知,但我想知道是否可以用以下内容替换上面的表:

OPENING_HOURS

  • day_of_the_week(string)
  • 小时(96位,表示当天每个季度小时的开放/关闭时间)

预订

  • table_id(int)
  • 日期(日期)
  • 小时(96位,表示当天每个季度小时的可用/预订时间)

然后我可以使用按位逻辑(挥手)并查找给定日期的开放时间。

所以我的问题:

  • 做这样的事情会有意义吗?
  • 有人可以指点我的博客文章或教程,涵盖使用比特币进行日程安排吗?
  • 我还应该了解什么才能了解​​bitfields&按位逻辑,特别是在ruby / Rails领域?

感谢,

雅各

1 个答案:

答案 0 :(得分:0)

这似乎是一种存储日期的奇怪方式。

问问自己餐厅或OpeningHours的行为是什么?我打赌你会发现自己会转换回真实日期对象来实现这种行为。那么为什么在数据库中使用奇怪的编码(星期几和位串)?

此外,您是否打算使用SQL日期运算符来查找打开的餐厅或桌子?如果完全可以使用您的编码方案,那就会变得非常棘手。

我怀疑你是不是想这样做。