Как создать записи базы данных за финансовый год - PullRequest
1 голос
/ 26 января 2010

Мне нужно создать сущности (в частности контракты) в таблице базы данных, которые связаны с финансовым годом. Эти контракты будут применяться к проектам. Любой вариант договора будет записан путем создания новой записи договора для того же финансового года, но оригинал останется связанным с проектом как история. Проекты могут длиться несколько лет, поэтому в любой момент проект будет иметь действующую запись контракта на каждый год, а также любое количество исторических контрактов на этот год.

Все это случайно, но я пытаюсь представить некоторый контекст. Если бы контракты были на год, это было бы легко, и я бы просто сохранил Год либо как поле даты с 1 января, либо как целое число. Однако контракты заключаются на финансовые годы, и я не знаю, как к этому подойти. Я не хочу отдельную таблицу, содержащую финансовые годы, поскольку я не хочу, чтобы пользователи поддерживали это. Я не хочу хранить финансовый год в виде строки «2009/2010», поскольку это не идеально для сортировки / извлечения данных.

Любые идеи будут полезны, мой лучший на данный момент - это указывать начальный и конечный год в 2 колонках и просто «ЗНАТЬ», что это начало апреля года и т. Д.

Ответы [ 2 ]

2 голосов
/ 26 января 2010

Если у вас нет разных типов финансовых лет (например, США начинаются с января, Великобритания начинается с апреля), тогда я просто использовал бы целое число и принял бы стандарт. например Fin_Year = 2010 подразумевает финансовый год, заканчивающийся мар 2010 (2009/2010). Для этого не потребуется дополнительная таблица или хранилище, значение подразумевается, и ваш код должен понимать, что Fin_Year - это особый тип даты.

EDIT: Стандарт данных правительства Великобритании использует год окончания для представления конкретного финансового года.

0 голосов
/ 26 января 2010

+ 1 Если необходимо сохранить финансовый год, я согласен с Джоэлом.

Однако другой подход, который вы могли бы рассмотреть, - это хранить только дату, с которой каждый контракт вступает в силу (что на самом деле вы, возможно, уже намеревались сделать). Следовательно, сама схема базы данных не заботится о финансовых годах, но вы можете использовать эту логику в своих запросах. Чтобы найти текущие и исторические контракты на текущий финансовый год:

SELECT * FROM Contracts
    WHERE StartingDate >= '20090401' AND StartingDate < '20100401'
    ORDER BY StartingDate DESC
...