2009-08-18 63 views
1

我是新手程序员,我想改善学校的“学生计划”。在程序中我想添加课程信息。例如:我应该如何在asp.net中设计该数据库?

Student X 
Lesson name 1st exam 2nd exam 3rdexam 
mathematics 80   70   80 
history  70   70   70 
... 

我有一个数据库,用三个表调用KFS。

Identity 
RecordID | firstname | lastname | address | city 

Lesson 
LessonID | name | description 

Lessondetail 
DataID | RecordID | LessonID | lessonname | firstpoint | secondpoint | thirdpoint 

我已经可以在GridView中显示学生列表,但我也想显示选中的学生的分数。

我的数据库足够用于这个应用程序吗?如果是的话,我如何设计这种关系并在gridview中显示?或者我应该修改我的数据库?

回答

0

我会继续Dan Diplo's advice关于正常化LessonDetail,如果不确定是否总是有3次考试。不幸的是,这需要一个关键数据来获取你想要的格式 - 但这是另一个问题。此外,您的LessonNameLessonDetail - 但它应该从Lesson而不是。

的ASP.NET侧是相当容易 - 它只是一个standard Master/Details观点:

<asp:GridView DataSourceId="dsStudents" runat="server" DataKeyNames="RecordId" /> 

<asp:DetailsView DataSourceId="dsLessons" runat="server" /> 

<asp:SqlDataSource ID="dsStudents" runat="server" SelectCommandText= 
"SELECT RecordID, firstname, lastname, address, city 
FROM Identity 
ORDER BY RecordID" 
/> 

<asp:SqlDataSource ID="dsLessons" runat="server" SelectCommandText= 
"SELECT D.LessonID, L.Name, FirstPoint, SecondPoint, ThirdPoint 
FROM LessonDetail as D 
JOIN Lesson as L ON 
    D.LessonID = L.LessonID 
WHERE D.RecordID = @r 
ORDER BY D.LessonID" 
> 
    <SelectParameters> 
     <asp:ControlParameter Name="r" ControlID="gvStudents" 
     PropertyName="SelectedDataKey" /> 
    </SelectParameters> 
</asp:SqlDataSource> 
+0

联系起来谢谢马克和丹。我知道有很多事情必须改进和回答。一步一步,它会更清晰。再次感谢 :) – 2009-08-18 11:40:48

1

我的第一个想法是,在查看数据库设计时(它可以通过编辑进行更清晰的处理):一个LessonDetail总是有3个考试吗?或者在未来的某个时候可能会有更多?

我会很想把它分解成这样的:

LessonDetail(DetailID, DataID, RecordID, LessonID, LessonName) 

LessonPoint(DetailID, Point) 

这样,因为你需要一个教训可以有很多考试点。

+0

3考试就是一个例子。未来可能会有更多。 – 2009-08-18 11:06:00

+0

单独保存考试,并将它们与课程 – abatishchev 2009-08-18 11:09:15