我有兴趣看到有关营业时间的数据库设计建议。
这与Facebook的相似 - alt text http://uploader.ws/upload/200903/widget.png
我有一份商家列表,我希望用户能够为该商家输入多套可用营业时间。如,
星期一:9-5开;周二:开放9-12; 1-5;我不希望每天限制在两套小时。理想情况下,每天N小时。如果这不实用,不超过4 ......不低于2.我对“最佳”(理论)和最实用的解决方案感兴趣。
我使用的DBMS是MySQL。
答案 0 :(得分:6)
怎么样:
create table business (
id int not null auto_increment primary key,
name varchar(255)
);
create table open_hour_range (
id int not null auto_increment primary key,
business_id int,
day_of_week tinyint, /* 0-6 */
open_time time,
close_time time,
foreign key(business_id) references business(id)
);
这允许您任意组合小时,包括每天多次。但是,从查询的角度来看,它可能会有点慢,因为您需要进行大量的加入才能得出业务开放时间列表。
此外,如果您希望能够以如下格式显示小时数:
M-F 9-5 Sa-Su 9-12
您需要在数据库外部的代码中合并类似的范围。如果你想要这种合并,你可以将day_of_week改为start_day和end_day。
答案 1 :(得分:3)
对Scotty Allen模特的一个小调整:
业务表:
id - int
business_name - 字符串
open_hour_range表:
id - int
business_id - int //业务的外键
days_of_week-int //(位掩码)1-127
open_time - 时间
close_time - 时间
答案 2 :(得分:0)
使用 Microsoft SQL Server 数据库,您可以将该数据存储为类型化的XML ,并且仍然可以根据该字段中的一个或多个值对数据进行排序和搜索。如果需要,进行任何计算等。
该列中的值可能与此类似:
<businessDays>
<monday>
<hours from="12" to="15" />
<hours from="16" to="21" />
</monday>
<friday>
<hours from="13" to="15" />
<hours from="16" to="18" />
<hours from="19" to="21" />
</friday>
</businessDays>
类型化XML :
的参考资料在SQL Server中引用索引和查询XML数据:
在您的应用程序中,您可以序列化/反序列化此数据与业务对象之间的对比。
非常简单高效。
答案 3 :(得分:0)
我宁愿在open_time
和close_time
列中使用日期时间。它的会议将在晚上开始,并将在第二天早上结束。 :)