我必须将以下信息存储到数据库中,供.NET程序集使用。它们代表某种颜色活跃的时间:
红色:16:30-18:30周一至周五银行假期
琥珀:09:00-16:30&周一至周五18:30 - 20:30包括Bank Holidays& 周六16:30 - 18:30孙
绿色:00:00至09:00& 20:30 - 周一至周五24:00银行假期& 00:00 - 16:30 * 18:30 - 24:00 周六&太阳
我最初开始使用这样的数据库模式:
列名ID Pk Null?数据类型默认直方图加密 Alg盐
RED_WEEKDAY_START 14 Y号码无 RED_WEEKDAY_END 15 Y号码无
RED_WEEKEND_START 16 Y号无 RED_WEEKEND_END 17 Y号码无
AMBER_WEEKDAY_START 18 Y号无 AMBER_WEEKDAY_END 19 Y号码无
AMBER_WEEKEND_START 20 Y号码无 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号码无
但是有几个问题:
那么什么是存储这类数据的更好方法呢?
答案 0 :(得分:2)
五列
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包括Bank Holidays&周六16:30 - 18:30 Sun转换为
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
我将离开第三行作为练习!
如果您真的想节省空间,请随意标准化日期和颜色。银行假期问题需要另一张银行假期表,您可以在任何查询中加入该表:
PSEUDO SQL
SELECT t.Colour, t.StartTime, t.EndTime
FROM Times t
WHERE Day(Today)==t.Day AND NOT (t.AppliesOnBankHolidays==FALSE AND IsBankHoliday(Today))
答案 1 :(得分:0)
您必须为每个条目创建一个表和第二个表。会有一对多的关系。您在第二个表上使用外键。插入主条目,获取其主键,并为每个键创建该键的多个行。一对多关系。你必须完全分解它。这里的关键是数据库生成的主键和外键。
答案 2 :(得分:0)
我会稍微规范这一点。首先,我有一个表格来确定“颜色”:
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)
这将使您能够添加多种颜色,然后将多个跨度应用于每种颜色。它还允许您将特定范围标记为假日范围,如果您需要,可以添加不同的布尔值来跟踪周末范围。