首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储这类信息的适当方法

存储这类信息的适当方法
EN

Stack Overflow用户
提问于 2012-02-09 14:29:48
回答 3查看 117关注 0票数 1

我必须将以下信息存储到数据库中,以供.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号无

然而,这方面有几个问题:

  • 不处理银行假日,
  • 只允许每种颜色的一段时间(例如,绿色在平日分开)

那么,如何更好地存储这类数据呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-09 14:43:07

五栏

代码语言:javascript
复制
Colour | Day | StartTime | EndTime | AppliesOnBankHolidays

(红色:16:30-18:30星期一到星期五的银行假期)翻译成

代码语言:javascript
复制
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星期六和太阳翻译成

代码语言:javascript
复制
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

代码语言:javascript
复制
SELECT t.Colour, t.StartTime, t.EndTime
FROM Times t 
WHERE Day(Today)==t.Day AND NOT (t.AppliesOnBankHolidays==FALSE AND IsBankHoliday(Today)) 
票数 2
EN

Stack Overflow用户

发布于 2012-02-09 14:32:56

您必须为每个条目创建一个表和一个第二个表。会有一对多的关系。在第二个表上使用外键。插入主条目,获取其主键,并为每个键创建该键的多行。一对多的关系。你必须彻底摧毁它。这里的键是由数据库生成的主键和外键。

票数 0
EN

Stack Overflow用户

发布于 2012-02-09 14:47:36

我会让这一切正常化一点。首先,我会有一张表来识别“颜色”:

代码语言:javascript
复制
fldColorID          | int
fldColorName        | varchar(28)
fldColorDescription | varchar(128)   (might not be necessary)

然后,使用一个包含可适用的开始/结束时间的表进行跟踪:

代码语言:javascript
复制
fldSpanID               | int
fldStartTime            | datetime
fldEndTime              | endtime
fldIsHoliday            | bit
fldSpanDescription      | varchar(128)   (necessary from a human readability point)
fldColorID              | int  (FK)

这将使您能够添加多个颜色,然后将多个跨度应用于每种颜色。它还允许您将特定的跨度标记为假日跨度,如果需要,可以添加不同的布尔值来跟踪周末的跨度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9212662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档