我想在学校项目的SQL数据库中创建“会话”表。每个会话都应该:
我怎么能代表这样的事情?
创建一个表来表示所有会话更好,每个会话都是一行,并且每列中都有一个字符串数组,表示学生的姓名,ID和状态?
OR
为每个新会话创建一个新表?
什么是更好的,请解释如何简要地做。
请记住,我需要从C#windows应用程序插入/删除/更新/查看每个表,并且最大预期会话数仅为100。
此外,我正在使用SQL Server 2012和使用Visual Studio 2012开发的C#windows应用程序
由于
答案 0 :(得分:1)
我认为你应该有3张桌子:
<强>学生强>
------------------------------------
| StudentID | FirstName | LastName |
|-----------|-----------|----------|
| 4456 | John | Doe |
| 6678 | Billy | Bob |
------------------------------------
此处StudentID是主键
<强>会话强>
---------------------------------------------------------------------
| SessionID | Lecturer | DateTime | Module | Course |
|-----------|----------|----------|------------------|--------------|
| 1 | Mr.Joe | 524523461| Natural Sciences | Oceanography |
---------------------------------------------------------------------
这里dateTime是Unix时间戳,SessionId是主键
<强> SessionAttendance 强>
-------------------------------------
| SessionID | StudentID | Status |
|-----------|-----------|-----------|
| 1 | 4456 | 'Late' |
| 1 | 6678 | 'Present' |
-------------------------------------
此处SessionID和StudentID都是主键
<强>原因强>
在这里,您无需解析所有出勤和状态列表。查询可能会变得更大,但它会为您节省很多解析代码。
示例查询:
SELECT SessionID FROM SessionAttendance WHERE StudentID = (SELECT StudentID FROM Students WHERE FirstName = 'John' AND LastName = 'Doe') AND Status = 'Late';
它将获得John Doe迟到的所有会话。简单,对吧?
其他评论
您无法在数据库列中存储信息数组。它 必须是以某种方式分隔的列表
在您的申请中,我建议您始终保留StudentID 它的FirstName和LastName因为它会使查询更容易,并且 将保持名称本地化(以便您可以将其更改为一个 地方,并将在其他地方改变)