Классика баз данных - статьи

       

Два варианта схемы данных для табельного учета


Предметная область примера – табельный учет рабочего времени. Основная информация, которую необходимо хранить в программе табельного учета – кто, когда, сколько часов отработал и по какому коду оплаты. Документальным отражением этой информации служит табель учета рабочего времени:


Рис 1. Табель учета рабочего времени (фрагмент)

Ниже приводятся две схемы данных, которые предлагается рассматривать как альтернативные для этой предметной области. Схемы упрощены, в реально работающем варианте базы намного больше полей и таблиц.


Рис.2 Схема данных – «Модель А»

На схеме:

  • Person – справочник сотрудников (ФИО, табельный номер…)
  • PaymentType – таблица кодов оплаты
  • Tabel – таблица с заголовками документов – табелей. Поле Date – содержит информацию только о годе и месяце табеля.
  • TabelFact – таблицы фактов (кто, когда, сколько часов отработал). Поле Date – в какой день месяца произошел факт.


Рис 3. Схема данных – «Модель Б»

Таблица TabelRow содержит строки табелей.

Предварительное сравнение этих схем показывает:

  1. Они различаются представлением данных фактов отработанного времени. В первом случае – хранятся факты в чистом виде, во втором – они хранятся в развернутом виде, как строки табелей.
  2. В схеме в модели фактов можно создать pivot-представление, аналогичное таблице TabelRow в модели строк.

    SELECT idTabel, idPaymentType, idPerson,
        SUM(CASE DAY(Date) WHEN 1 THEN Hours ELSE 0 END) AS h1,
        SUM(CASE DAY(Date) WHEN 2 THEN Hours ELSE 0 END) AS h2,
        ...
        SUM(CASE DAY(Date) WHEN 31 THEN Hours ELSE 0 END) AS h31
    FROM tblTabelFact
    GROUP BY idTabel, idPaymentType, idPerson

    или, для MS SQL-Server 2005:

    SELECT idTabel, idPaymentType, idPerson,
        [1] AS h1, [2] AS h2, [3] AS h3, [4] AS h4, [5] AS h5,
        [6] AS h6, [7] AS h7, [8] AS h8, [9] AS h9, [10] AS h10,
        [11] AS h11, [12] AS h12, [13] AS h13, [14] AS h14, [15] AS h15,
        [16] AS h16, [17] AS h17, [18] AS h18, [19] AS h19, [20] AS h20,
        [21] AS h21, [22] AS h22, [23] AS h23, [24] AS h24, [25] AS h25,

    Содержание  Назад  Вперед