【问题标题】:Saving an array of strings to an SQL column将字符串数组保存到 SQL 列
【发布时间】:2014-08-10 11:50:23
【问题描述】:

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

  • 会话 ID
  • 讲师姓名
  • 时间和日期
  • 模块名称
  • 课程名称
  • 学生证列表
  • 学生状态列表(在读、缺勤、迟到)

我怎么能代表这样的东西???

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

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

什么比较好,请简要说明如何做。

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

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

谢谢

【问题讨论】:

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


    【解决方案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 是主键

    会议出席率

    -------------------------------------
    | 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 它的名字和姓氏,因为它会使查询更容易,并且 将保持名称本地化(以便您可以一次性更改它 地方并且会在其他地方改变)

    【讨论】:

    • 没问题,如果回答有用,请点赞。那很好啊。谢谢! @D.Boxer
    猜你喜欢
    • 1970-01-01
    • 2020-01-02
    • 2021-06-19
    • 1970-01-01
    • 2012-03-13
    • 2011-06-22
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多