将字符串数组保存到SQL列

时间:2014-08-10 02:21:09

标签: c# sql sql-server session visual-studio-2012

我想在学校项目的SQL数据库中创建“会话”表。每个会话都应该:

  • 会话ID
  • 讲师姓名
  • 时间和日期
  • 模块名称
  • 课程名称
  • 学生ID列表
  • 学生身份列表(现在,缺席,迟到)

我怎么能代表这样的事情?

创建一个表来表示所有会话更好,每个会话都是一行,并且每列中都有一个字符串数组,表示学生的姓名,ID和状态?

OR

为每个新会话创建一个新表?

什么是更好的,请解释如何简要地做。

请记住,我需要从C#windows应用程序插入/删除/更新/查看每个表,并且最大预期会话数仅为100。

此外,我正在使用SQL Server 2012和使用Visual Studio 2012开发的C#windows应用程序

由于

1 个答案:

答案 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迟到的所有会话。简单,对吧?

其他评论

  1. 您无法在数据库列中存储信息数组。它 必须是以某种方式分隔的列表

  2. 在您的申请中,我建议您始终保留StudentID     它的FirstName和LastName因为它会使查询更容易,并且     将保持名称本地化(以便您可以将其更改为一个     地方,并将在其他地方改变)