Q:

SQL Server database design for mvc application

I have a requirement where I want to store 5 years amounts divided by months and quarters in database. Its not necessary that all amounts will be filled in for example user can input data for 3 months for 1st year and also can provide amount for all the months in another year. 
I came up with following design

Fields = this table is used for saving month names and associated quarter information. data would like as below
FieldId        FieldName         Quarter
   1             Jan               q1
   2             Feb               q1
   3             march             q1
   4             q1total           q1

Data
DataId         FieldId           Amount   year
   1             1                100    2015
   2             2                200    2015
   3             3                300    2015
   4             4                600    2016

With this approach for every budget information I have to save almost 80 records (5 years data for each month and quarter) in database in worse case. 
I would like to know more efficient way to design tables for this requirement.

A:

There's no need to store month name or what quarter it's in -- that can be calculated on the fly by date functions of your database or programming language. I'd get rid of the Fields table completely, drop the year and FieldId fields from the Data table, and then add a basic date field to the Data table. All you need is this:
ID Date       Amount
-- ---------- ------
 1 2015-01-01    100
 2 2015-02-01    200

Then you just add a date span for your where clause. If you want Jan:
SELECT * FROM data WHERE date >= '2015-01-01' AND date < '2015-02-01';

If you want Q1:
SELECT * FROM data WHERE date >= '2015-01-01' AND date < '2015-04-01';

Or (in MySQL, for example):
SELECT * FROM data WHERE YEAR(date) = 2015 AND QUATER(date) = 1; -- Q1 2015
SELECT * FROM data WHERE YEAR(date) = 2015 AND MONTH(date) = 1;  -- Jan 2015

Note, I'm guessing you're probably tracking more than one budget. Perhaps one per user or one per department or something. In this case, you'll want an additional field to indicate who or what the record belongs to:
ID UserId Date       Amount
-- ------ ---------- ------
 1      1 2015-01-01    100
 2      1 2015-02-01    200

Or:
ID DepartmentId Date       Amount
-- ------------ ---------- ------
 1            1 2015-01-01    100
 2            1 2015-02-01    200

