我有兴趣看到关于营业时间的数据库设计的建议。
这将与Facebook非常相似-- alt text http://uploader.ws/upload/200903/widget.png
我有一个企业的列表,我希望用户能够输入该企业的多组可用时间。例如,
周一:9-5开放;周二:9-12开放;1-5;等等。我不希望每天被限制在两组时间内。理想情况下,每天N组小时。如果这不实际,不超过4..。不少于2。
我对“最好的”(理论)和最实用的解决方案感兴趣。
我使用的数据库管理系统是MySQL。
发布于 2009-03-27 23:44:49
这样如何:
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。
发布于 2009-03-28 03:55:27
对斯科蒂·艾伦的模型做了一个小小的调整:
业务表:
id - int
business_name -字符串
open_hour_range表:
id - int
business_id - int //业务外键
days_of_week- int // (位掩码) 1-127
open_time -时间
close_time -时间
发布于 2009-03-27 23:39:06
使用数据库,您可以将数据存储为类型的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 data的参考资料:
在您的应用程序中,您可以将这些数据serialize/deserialize到业务对象中,或者从业务对象中提取这些数据。
非常简单和高效。
https://stackoverflow.com/questions/691815
复制相似问题