我必须将以下信息存储到数据库中,以供.NET程序集使用。它们表示某一颜色活动的时间:
红色:16:30-18:30星期一到星期五的银行假期
琥珀:09:00-16:30和18:30 - 20:30到星期五银行假日和16:30-18:30星期六和太阳
绿色:00:00-09:00和20:30-24:00到星期五银行假日&00:00-16:30*18:30-24:00星期六和太阳
我最初使用的数据库模式如下:
列名ID?数据类型默认直方图加密Alg盐
RED_WEEKDAY_START 14Y号无
RED_WEEKDAY_END 15Y号无
RED_WEEKEND_START 16Y号无
RED_WEEKEND_END 17 Y号无
AMBER_WEEKDAY_START 18 Y号无
AMBER_WEEKDAY_END 19 Y号无
AMBER_WEEKEND_START 20Y号无
AMBER_WEEKEND_END 21 Y号无
GREEN_WEEKDAY_START 22 Y号无
GREEN_WEEKDAY_END 23 Y号无
GREEN_WEEKEND_START 24 Y号无
GREEN_WEEKEND_END 25 Y号无
然而,这方面有几个问题:
那么,如何更好地存储这类数据呢?
发布于 2012-02-09 14:43:07
五栏
Colour | Day | StartTime | EndTime | AppliesOnBankHolidays(红色:16:30-18:30星期一到星期五的银行假期)翻译成
RED|Mon|16:00|18:30|True
RED|Tue|16:00|18:30|True
RED|Wed|16:00|18:30|True
RED|Thu|16:00|18:30|True
RED|Fri|16:00|18:30|True琥珀:09:00-16:30和18:30 - 20:30星期一到星期五银行假日和16:30-18:30星期六和太阳翻译成
AMBER|Mon|09:00|16:30|True
AMBER|Tue|09:00|16:30|True
AMBER|Wed|09:00|16:30|True
AMBER|Thu|09:00|16:30|True
AMBER|Fri|09:00|16:30|True
AMBER|Mon|18:30|20:30|True
AMBER|Tue|18:30|20:30|True
AMBER|Wed|18:30|20:30|True
AMBER|Thu|18:30|20:30|True
AMBER|Fri|18:30|20:30|True
AMBER|Sat|16:30|18:30|False
AMBER|Sun|16:30|18:30|False我将把第三行作为练习!
如果你真的想节省空间的话,可以随意调整日期和颜色。“银行假日”问题需要另一个银行假日表,您可以在使用的任何查询中加入该表:
伪SQL
SELECT t.Colour, t.StartTime, t.EndTime
FROM Times t
WHERE Day(Today)==t.Day AND NOT (t.AppliesOnBankHolidays==FALSE AND IsBankHoliday(Today)) 发布于 2012-02-09 14:32:56
您必须为每个条目创建一个表和一个第二个表。会有一对多的关系。在第二个表上使用外键。插入主条目,获取其主键,并为每个键创建该键的多行。一对多的关系。你必须彻底摧毁它。这里的键是由数据库生成的主键和外键。
发布于 2012-02-09 14:47:36
我会让这一切正常化一点。首先,我会有一张表来识别“颜色”:
fldColorID | int
fldColorName | varchar(28)
fldColorDescription | varchar(128) (might not be necessary)然后,使用一个包含可适用的开始/结束时间的表进行跟踪:
fldSpanID | int
fldStartTime | datetime
fldEndTime | endtime
fldIsHoliday | bit
fldSpanDescription | varchar(128) (necessary from a human readability point)
fldColorID | int (FK)这将使您能够添加多个颜色,然后将多个跨度应用于每种颜色。它还允许您将特定的跨度标记为假日跨度,如果需要,可以添加不同的布尔值来跟踪周末的跨度。
https://stackoverflow.com/questions/9212662
复制相似问题