+ -
当前位置:首页 → 问答吧 → 资料库日期栏位的设计问题

资料库日期栏位的设计问题

时间:2014-06-21

来源:互联网

现实上, 很多时日期资料是不完整的,
例如一些投诉系统内, 投诉者所述的事发日期,
会有以下情况:

1) 可以讲出确实日期, 如2014-06-01
2) 只可讲出大约时间, 如6月上旬
3) 一些更夸张, 如2014年上旬, 2014年内

当设计这个"事发日期"的Data Type,
应如何处理?

作者: Youq   发布时间: 2014-06-21

当然, 可以视为string,

但理想情况下, 如果select 2014年内,
以下资料都应被找出:
2014-06-01
6月上旬
2014年上旬
2014年内

作者: Youq   发布时间: 2014-06-21

引用:原帖由 Youq 於 2014-6-13 11:39 AM 发表
现实上, 很多时日期资料是不完整的,
例如一些投诉系统内, 投诉者所述的事发日期,
会有以下情况:

1) 可以讲出确实日期, 如2014-06-01
2) 只可讲出大约时间, 如6月上旬
3) 一些更夸张, 如2014年上旬, 2014年内
...
我认为 database 只是一种储存 data 的方法,只不过它有 indexing 一类功能可以加快存取速度。
所以问题是如何 design data type/class ,然后把这种 data type/class 的 data map 到 database 。

当然考虑应用/ search 资料时,或者要加额外的 data 来加快存取速度或简化存取程序。

作者: xianrenb   发布时间: 2014-06-21

引用:原帖由 Youq 於 2014-6-13 11:41 AM 发表
当然, 可以视为string,

但理想情况下, 如果select 2014年内,
以下资料都应被找出:
2014-06-01
6月上旬
2014年上旬
2014年内
到用时, 一定系用 range 做条件 search 架啦,
唔会督死一日.

个 date field 其实系 nominal date, 挂名.
Search, report 用佢.
E.g.
2014-06-01 = 2014-06-01
6月上旬 = 2014-06-01
2014年上旬 = 2014-01-01
2014年内 = 2014-01-01

为左保留 raw information, 另设一个 Date_desc 系 string.
储 "2014年6月上旬"


可能另外考虑增加多一个 Duration (no. of days) 为相关用途.

作者: 111x111=12321   发布时间: 2014-06-21

谢谢师兄!! 不失为一个方法,
总结 师兄的意思:
1. 以一系列的栏位表达这资料
2. 一part 是raw information(用来比人看), 另一part是用来Search (用来比人Search)
我说得对吗?
引用:原帖由 111x111=12321 於 2014-6-13 01:23 PM 发表


到用时, 一定系用 range 做条件 search 架啦,
唔会督死一日.

个 date field 其实系 nominal date, 挂名.
Search, report 用佢.
E.g.
2014-06-01 = 2014-06-01
6月上旬 = 2014-06-01
2014年上旬 = 2014 ...

作者: Youq   发布时间: 2014-06-21

引用:原帖由 Youq 於 2014-6-13 03:37 PM 发表
谢谢师兄!! 不失为一个方法,
总结 师兄的意思:
1. 以一系列的栏位表达这资料
2. 一part 是raw information(用来比人看), 另一part是用来Search (用来比人Search)
我说得对吗?


中.

作者: 111x111=12321   发布时间: 2014-06-21

不太明白这个做法?
师兄意思是用Program做哂所有嘢, 而不在Database内做住何嘢?
但就算系, 都要想一种Structure来存入Database的, 是吗?
引用:原帖由 xianrenb 於 2014-6-13 12:57 PM 发表


我认为 database 只是一种储存 data 的方法,只不过它有 indexing 一类功能可以加快存取速度。
所以问题是如何 design data type/class ,然后把这种 data type/class 的 data map 到 database 。

当然考虑应 ...

作者: Youq   发布时间: 2014-06-21

其实在Oracle 或 Sql server 这些较强功能的database,
是否可以自建一个dataType,
去实现题述咁特别的资料类型?

作者: Youq   发布时间: 2014-06-21

Trivial
为做而做.

除非你「好需要」半人工智能或对照table去翻译 :
"6月上旬" => (today is in June) 2014.6.1
自动填上2014.6.1, 惊死人手填错.

作者: 111x111=12321   发布时间: 2014-06-21

但如果定义了这个dataType,
对於Program的架构是有好处的,
因为Application层面视这个dataType为一整体,
D Code都会清楚简单一点
引用:原帖由 111x111=12321 於 2014-6-13 03:49 PM 发表
Trivial
为做而做.

除非你「好需要」半人工智能或对照table去翻译 :
"6月上旬" => (today is in June) 2014.6.1
自动填上2014.6.1, 惊死人手填错.

作者: Youq   发布时间: 2014-06-21

见仁见智啦,
唔觉.

作者: 111x111=12321   发布时间: 2014-06-21

引用:原帖由 Youq 於 2014-6-13 03:41 PM 发表
不太明白这个做法?
师兄意思是用Program做哂所有嘢, 而不在Database内做住何嘢?
但就算系, 都要想一种Structure来存入Database的, 是吗?

我一般都考虑最 portable 的用法,那么就算用 SQLite 都应该无问题。
日期可以转用 unix time stamp 的方法,即是转为秒数。
那么用什么 database 存 integer 都一定 ok 。

如果要写一个符合你要求的 class ,就最少要用数个 data member 。
那么 map 到 database ,就至少有几个相关的 field 。

作者: xianrenb   发布时间: 2014-06-21

加多个end datetime field 米得囉, user ui select 6 月上旬,即系等於入start datetime 6月1月, end datetime 6 月15

作者: kamchihau   发布时间: 2014-06-21

引用:原帖由 form5 於 2014-6-13 10:23 PM 发表
加多个end datetime field 米得囉, user ui select 6 月上旬,即系等於入start datetime 6月1月, end datetime 6 月15
呢个方法好.

作者: form5   发布时间: 2014-06-21

如其中一位师兄所讲,用文字叙述,但用文字往往形成不统一的情况,增如多一栏(任意大小,视乎设计者需要),建议用Boolean储存,除非有关的资料日期是非常重要,否则只需纪录是否真确便可以了。
如果要再细致一些,可以用0代表真实,+/-1代表一星期前后,2代表月,3代表季,4代表半年……

作者: 111x111=12321   发布时间: 2014-06-21

保证maint program者一定嗌救命,
旧70年代bytes矜贵确实需要悭位编晒码,
或者个database系keep电力公司客户或全国人民资料, 先用咁「系统」化储存表达.

作者: ming12345   发布时间: 2014-06-21