陷入数据库设计,无法查询结果

时间:2015-11-30 18:03:40

标签: c# sql asp.net oracle plsql

我设计了我的数据库,我一年有四个季度,我有一年的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%的工作,现在我面临着艰难的最后期限。

简单来说,我正在制定关于资本风险运作的资本充足率报告。

1 个答案:

答案 0 :(得分:0)

我绝对会建议您更改数据库设计,因为它目前的结构不可持续。你很幸运,你遇到问题的速度很快,因为有时糟糕的设计可能会存在多年,然后再遇到交易破坏者(此时重新设计可能会在经济上摆脱困境)。

阅读database normalization3rd 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 injectionMVC3-Tier architecture,以确保您不会在重新设计时引入任何问题。