<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評(píng)論 :: 0 Trackbacks
    1 . FISCAL YEAR TABLES
    ?
    ??? Let's write some CREATE TABLE statements that are as complete aspossible. This little exercise is important because SQL is a declarativelanguage and you need to learn how to specify things in the databaseinstead of in the code.
    ?
    ??? The table looks like this:
    ??? CREATE TABLE FiscalYearTable1
    ??? (fiscal_year INTEGER,
    ???? start_date?DATE,
    ???? end_date??? DATE);

    ?
    ??? It stores date ranges for determining what fiscal year any given datebelongs to. For example, the federal government runs its fiscal year fromOctober 1 until the end of September. The scalar subquery you woulduse to do this table lookup is:
    ??? (SELECT F1.fiscal_year
    ?????? FROM FiscalYearTable1 AS F1
    ????? WHERE outside_date BETWEEN F1.start_date AND F1.end_date)

    ?
    ??? Your assignment is to add all the constraints you can think of to thetable to guarantee that it contains only correct information.
    ?
    ??? While vendors all have different date and time functions, let's assumethat all we have is the SQL-92 temporal arithmetic and the function:
    ??? EXTRACT ([YEAR | MONTH | DAY] FROM <date expression>), whichreturns an integer that represents a field within a date.
    ?
    ?
    Answer #1
    ?
    ??? 1. First things first; make all the columns NOT NULL since thereis no good reason to allow them to be NULL.
    ?
    ??? 2. Most SQL programmers immediately think in terms of addinga PRIMARY KEY, so you might add the constraint ?PRIMARYKEY (fiscal_year, start_date, end_date) because the fiscal year isreally another name for the pair (start_date, end_date). This isnot enough, because it would allow this sort of error:
    ??? (1995, '1994-10-01', '1995-09-30')
    ??? (1996, '1995-10-01', '1996-08-30') <== error!
    ??? (1997, '1996-10-01', '1997-09-30')
    ??? (1998, '1997-10-01', '1997-09-30')

    ??? You could continue along the same lines and fix some problemsby adding the constraints UNIQUE (fiscal_year),UNIQUE (start_date), and UNIQUE (end_date), since we donot want duplicate dates in any of those columns.
    ?
    ??? 3. The constraint that almost everyone forgets to add because it isso obvious is:
    ??? CHECK (start_date < end_date) or CHECK (start_date <=end_date), as is appropriate.
    ?
    ??? 4. A better way would be to use the constraint PRIMARY KEY(fiscal_year) as before, but then since the start and end datesare the same within each year, you could use constraints onthose column declarations:
    ??? CREATE TABLE FiscalYearTable1
    ??? (fiscal_year INTEGER NOT NULL PRIMARY KEY,
    ???? start_date?DATE NOT NULL,
    ???? CONSTRAINT valid_start_date
    ???????CHECK ((EXTRACT (YEAR FROM start_date) = fiscal_year - 1)
    ?????????AND (EXTRACT (MONTH FROM start_date) = 10)
    ???????? AND (EXTRACT (DAY FROM start_date) = 01)),
    ???? end_date????DATE NOT NULL,
    ???? CONSTRAINT??valid_end_date
    ?????? CHECK ((EXTRACT (YEAR FROM end_date) = fiscal_year)
    ?????????AND (EXTRACT (MONTH FROM end_date) = 09)
    ???????? AND (EXTRACT (DAY FROM end_date) = 30)));

    ??? You could argue for making each predicate a separate constraintto give more detailed error messages. The predicates onthe year components of the start_date and end_date columnsalso guarantee uniqueness because they are derived from theunique fiscal year.
    ?
    ??? 5. Unfortunately, this method does not work for all companies.Many companies have an elaborate set of rules that involve takinginto account the weeks, weekends, and weekdays involved.They do this to arrive at exactly 360 days or 52 weeks in theiraccounting year. In fact, there is a fairly standard accountingpractice of using a “4 weeks, 4 weeks, 5 weeks” quarter withsome fudging at the end of the year; you can have a leftoverweek between 3 and 11 days. The answer is a FiscalMonthtable along the same lines as this FiscalYears example.
    ?
    ??? A constraint that will work surprisingly well for such cases is:
    ??? CHECK ((end_date - start_date) = INTERVAL 359 DAYS)
    ?
    ??? where you adjust the number of days to fit your rules (i.e., 52 weeks * 7?days = 364 days). If the rules allow some variation in the size of the fiscalyear, then replace the equality test with a BETWEEN predicate.
    ??? Now, true confession time. When I have to load such a table in adatabase, I get out my spreadsheet and build a table using the built-intemporal functions. Spreadsheets have much better temporal functionsthan databases, and there is a good chance that the accountingdepartment already has the fiscal calendar in a spreadsheet.
    ?
    ?




    -The End-

    posted on 2009-03-20 21:21 decode360-3 閱讀(185) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Toy
    主站蜘蛛池模板: 国内精品乱码卡1卡2卡3免费| 国产精品亚洲一区二区无码| 色播在线永久免费视频网站| 免费一看一级毛片全播放| 亚洲AV日韩AV一区二区三曲| 思思99re66在线精品免费观看| 亚洲综合在线一区二区三区| 毛片免费视频播放| 亚洲乱人伦中文字幕无码| 色www永久免费视频| 在线观看亚洲精品专区| 亚洲国产成人精品无码久久久久久综合| 国产在亚洲线视频观看| 亚洲国产精品毛片av不卡在线 | 亚洲色欲啪啪久久WWW综合网| 四虎国产精品免费久久| 亚洲日韩国产AV无码无码精品| 日韩人妻无码免费视频一区二区三区 | 亚洲妇女水蜜桃av网网站| 中文字幕无码视频手机免费看| 亚洲日韩精品无码专区加勒比☆| 国产精品成人无码免费| 黄视频在线观看免费| 免费无码一区二区三区蜜桃大| 亚洲av永久中文无码精品 | 美丽姑娘免费观看在线观看中文版| 亚洲自偷自拍另类图片二区| 成人免费无码大片a毛片软件| 午夜成人无码福利免费视频| 亚洲AV综合色区无码另类小说| 在线看免费观看AV深夜影院| 337p日本欧洲亚洲大胆人人| 亚洲精品无码mv在线观看网站| 亚洲免费视频播放| 菠萝菠萝蜜在线免费视频| 亚洲成a人片77777老司机| 热99re久久精品精品免费| a级毛片100部免费观看| 亚洲精品无码日韩国产不卡av| 国产亚洲精品va在线| 午夜精品在线免费观看|