1

我正在开发一个多属性预订系统,让我对最佳实践模式设计感到头疼。假设站点托管例如 5000 个属性,其中每个属性都由一个用户维护。每家酒店都有一个预订日历。我当前的实现是一个两表系统,一个表用于可用日期,另一个用于不可用日期,每个表的粒度为 1 天。

property_dates_available (property_id, 日期);

property_dates_booked (property_id, 日期);

但是,我不确定这是否是一个好的解决方案。在另一个问题中,我读到了一个代表两种状态的单表解决方案。但我想知道将它们混合在一起是否是个好主意。此外,是否应该将全年 365 天的预订日历映射到数据库表中,还是只映射房产可供预订的日期?我想到了每年急剧增加的行数。我还想最近在数据库中搜索可用属性,但不确定与仅 5000 * av 相比,查看 5000 * 365 行是否是个坏主意。100 行。

你一般会推荐什么?这方面可以忽略吗?如何最佳实践实现这一点?

4

1 回答 1

1

我不明白为什么您需要一个单独的表格来显示可用日期。如果您有一个预订日期表(property_id,date),那么您可以轻松查询此表以找出给定日期哪些属性可用

select properties.property_name
from properties where not exists
(select 1 from property_dates_booked
 where properties.property_id = property_dates_booked
 and property_dates_booked.date = :date)

:date 是查询的参数

仅在 property_dates_booked 表中输入实际预订(将表重命名为“bookings”会更容易)。如果某处房产由于维护而在某些日期不可用,则在客户“特殊”的日期输入预订(可能“客户”的 ID 为负数)。

于 2012-12-03T10:10:38.443 回答