代码之家  ›  专栏  ›  技术社区  ›  Denis Biondic

数据库设计中的会计年度处理策略

  •  3
  • Denis Biondic  · 技术社区  · 16 年前

    我所说的会计年度是指数据库中(所有表中)特定年份发生的所有数据。假设我们正在构建一个应用程序,允许用户从不同的年份中进行选择。

    1. 基于多个独立数据库实例的独立会计年度数据(例如,在每个会计年度开始时,您可以创建一个没有数据的新实例)
    2. 将所有内容都放在一个数据库中,但逻辑会自动将不同年份的记录分开。

    4 回复  |  直到 16 年前
        1
  •  3
  •   OMG Ponies    16 年前

    不,你知道吗 每个会计年度创建一个单独的数据库实例、数据库或表。

    全部的

    不需要分离,只要确保记录包含一个时间戳,然后可以用来确定它发生在哪个财政年度。

        2
  •  3
  •   Walter Mitty    16 年前

    还有第三种选择。

    创建一个表,我们称之为“Almanac”,它每天有一行,按日期键入。 其中可能有一些属性有一个函数,比如星期几。有些属性可能是公司特有的,比如当天是否是公司的工作日。

    如果您的公司有这样的属性,那么这些属性可以是会计年度、会计季度和会计月份。规范化这个表并不是特别重要。

    编写一个填充此表的程序。因此,从日期开始计算财政年度的所有复杂逻辑可以放在一个地方,而不是分散在整个系统中。十年的约会只有3650行,按照今天的标准,这是一张很小的桌子。

    然后,将所有日期驱动的数据按会计年度、会计季度或其他方式进行裁剪,这只是一个连接和分组的问题。您甚至可以自动生成同一数据的不同时间框架视图。

    我做过这个,而且很管用。它特别适用于报告数据库和数据仓库。

        3
  •  3
  •   Damir Sudarevic    16 年前

    不需要复制。时间戳可能已经足够好了,但是借用数据仓库,您可以创建一个“日期维度”。它是一个表,每个日期有一行,每个日期有一列属性。其中一些列可能是会计年度、会计季度等。然后在查询时向事务表中添加DateKey并连接date维度。

    比如:

    select sum(t.Total)
    from Transactions as t
    join dimDate as d on d.DateKey = t.DateKey
    where d.FiscalYearQuarter = 'F2009-Q3';
    

    CREATE TABLE dimDate
      ( 
       DateKey int                      -- 20090814
      ,FullDate date                    -- 2009-8-14
      ,FullDateDescription varchar(50)  -- Friday August 14, 2009
      ,SQLDateStamp varchar(10)         -- 2009-08-14
      ,DayOfWeek varchar(10)            -- Friday
      ,DayNumberInWeek int              -- 6
      ,DayNumberInMonth int             -- 14
      ,DayNumberInYear int              -- 226
    
      -- many more here
    
      ,FiscalYear int                   -- 2009
      ,FiscalQuarter char(3)            -- FQ3
      ,FiscalHalf char(3)               -- FH2
      ,FiscalYearQuarter varchar(8)     -- F2009-Q3
      ,FiscalYearHalf varchar(8)        -- F2009-H2 
      );
    

    您可以预先加载dimDate,从过去到将来;100年需要36.5k行——对任何数据库来说都不算多。

        4
  •  1
  •   Adriaan Stander    16 年前

    每个实体应将其会计年度作为元数据/静态数据的一部分。

    因此,您可以轻松地处理会计年度中断,并且通常数据库可以处理非常大量的数据,因此您应该不会遇到问题。

    使用正确的索引将大大提高查询的性能,因此一旦遇到问题,就要担心性能。