文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>SQL_PUZZLE_1:财务年度表(Fiscal Year Table)

SQL_PUZZLE_1:财务年度表(Fiscal Year Table)

时间:2011-01-03  来源:Bright Zhang

1)财务年度表,其作用就是将唯一的时间段与一个唯一的ID相关联的一个表,通过这个表,只要提供一个日期就能够准确的定位到一个fiscalYearId(PK)。

2)该表由于是针对时间段的唯一性,因此不能够使用传统的唯一性约束,只能够使用check来辅助使用。在check中可以限制一个财务年度的天数,可以限制开始日期和结束日期的计算规则,例如2011年度,从2011-1-1到2011-12-31,或者是2010-12-1到2011-11-30日。还可以限制开始日期和结束日期的大小关系。

 

以前在处理这种时间段唯一性的时候,大多在数据库约束层面做的工作非常少,这样就不可避免的增加了脏数据生存的可能性。

 

这是sql server下的例子:

create table fiscalyeartable(

fiscal_year integer not null primary key,

start_date date not null,

constraint valid_start_date

check ((year(start_date) = fiscal_year - 1)

and (month(start_date) = 10)

and (day(start_date) = 01)),

end_date date not null,

constraint valid_end_date

check ((year(end_date) = fiscal_year)

and (month(end_date) = 09)

and (day(end_date) = 30)));

 

记得之前有做过ICCID段的管理,这种号码段的管理,也要求号码段的唯一性,只是这种号码段非常复杂,而且由于号码长达20位,因此数据库内建的处理函数已经无能为力,bigint只能处理17位的数字,这样就要求建立用户函数来处理,而在数据库约束层面使用用户函数,这种依赖是不好的做法,除非万不得以。

 

而对于有些数据结构非常复杂的情况,例如在数据存在层次结构的情况,这就增加了数据库层约束的难度,甚至是没办法实现,例如我在上面提到的ICCID段的管理就是一例,这样就只能在关系数据库层提供粗略的约束,然后在业务层中,在对该表操作的时候提供更进一步的数据检查。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载