我设计了我的数据库,我一年有四个季度,我有一年的3个值,即
2015 (Quarter 1) | 2014 (Quarter 1) | 2013 (Quarter 1)
就像,如果我选择2014年(第1季度),那就像
2014 (Quarter 1) | 2013 (Quarter 1) | 2012 (Quarter 1).
其他季度也是如此。我的数据库表就像:
First_Year | Second_Year | Third_Year | For_Year | Quarter_Year | CODE
12 | 15 | 16 | 2015 | 1 | Interest_Earned
6 | 5 | 6 | 2015 | 1 | Interest_Expense
现在让我们说,我的First_Year = For_Year
(本案例为2015年),Second_Year = For_Year - 1
(本例中为2014年)和Third_Year = For_Year - 2
(2013年根据上述表格)。
我想查询这些结果并在PL SQL的帮助下填充ASP.NET TextBox。假设用户通过DropDown列表在前端选择了第1季度和第2015年,我必须为第1季度和2015年选择数据,这很容易,而且所有其他字段也是如此。
但如果我要输入2016年的数据,我会提前提供2015年和2014年的数据(参见表格I中有数据)。当我输入2016年的数据时,我不应该重新输入2015年和2014年的数据。这就是我要坚持的地方,因为我无法一次又一次地复制我的数据。为了完成它,我一次又一次地复制数据没有问题,但我仍然无能为力。我如何只选择相关数据来填充我的TextBox并报告。
让我们说,我选择了2016年的数据,所以在这种情况下,我将不得不填充与2015年和2014年数据相关的TextBox,但因为我没有2016年的数据,TextBoxes of the部分将是空的。请帮助我。
我应该改变我的设计吗?我完成了大约80%的工作,现在我面临着艰难的最后期限。
简单来说,我正在制定关于资本风险运作的资本充足率报告。
答案 0 :(得分:0)
我绝对会建议您更改数据库设计,因为它目前的结构不可持续。你很幸运,你遇到问题的速度很快,因为有时糟糕的设计可能会存在多年,然后再遇到交易破坏者(此时重新设计可能会在经济上摆脱困境)。
阅读database normalization,3rd Normal Form(您的数据规范化目标)并查看有关如何获取数据集并使其成为3NF的一些教程。
作为提示,您的所有列数据都应列在同一行中,并且数据应该分开以排除重复,如:
时间表:
ID | Year | Quarter
1401 | 2014 | 1
1502 | 2015 | 2
1501 | 2015 | 1
价值表:
TimeID | ExpenseCode | Value
1401 | Interest_Earned | 10
1502 | Interest_Expense | 25
这样做的目的是最终您可以使用ANSI SQL执行复杂查询,如:
SELECT Sum(Value)
FROM ValueTable
WHERE TimeID Between [BoundVariable] and [BoundVariable];
这将允许您在数据库引擎本身内执行复杂查询,而不是在c#
前端内构建强大的逻辑。请务必仔细阅读SQL injection,MVC和3-Tier architecture,以确保您不会在重新设计时引入任何问题。