【问题标题】:How to save date student's absence in SQL Server?如何在 SQL Server 中保存日期学生的缺勤情况?
【发布时间】:2015-06-25 15:04:09
【问题描述】:

我在 SQL Server 中有学生表。

在我的 Web 应用程序中,我有 textBox,我可以在其中输入日期 (dd-mm-yyyy)。这个日期意味着任何(应用程序知道确切的)学生今天缺席。

如何在 SQL Server 中保存这个日期?

学生一生只缺勤一天没有问题,因为我可以在我的学生表中创建一个额外的列并在那里保存缺勤日期。

但我不知道学生会缺席多少天。我可以在我的学生表中添加一千列并在其中写下缺勤日期,但这是非常糟糕的解决方案。

那么,如何在 SQL 中保存缺勤日期?

我用 ASP.NET、C#、SQL Server 编写了我的 Web 应用程序。

【问题讨论】:

  • 解析为DateTime并保存到你的sql server中的datetime2列类型。
  • 听说过外键和一对多关系吗?
  • 我知道什么是外键,我对关系知之甚少。我想为每个学生另外创建一个表,但如果我有 100 个学生,我会另外创建 100 个absent 表,这不是一个好主意。我不知道为什么我没有考虑为所有学生提供一张公共桌子:)

标签: c# sql sql-server date


【解决方案1】:

您需要有另一个表格来记录学生缺勤的日期。

假设你当前的表如下:

Student
-------
StudentId [PK]
...

所以您现在将创建另一个表:

StudentAbsent
-------
StudentAbsentId [PK]
StudentId [FK, Student.StudentId]
AbsentDate

要获取id=5 的学生缺席的日期,您可以在 SQL 中执行以下操作

SELECT AbsentDate FROM StudentAbsent
WHERE StudentId = 5

哦,顺便说一句,您想了解更多关于人际关系的信息。如果是1-1 关系table1 的一行与table2 的一行相关。
如果是1-n关系,则table1的一行与table2的多行相关(如上例)
如果是n-n关系table1 的一行与table2 的多行相关,反之亦然。

【讨论】:

    【解决方案2】:

    您必须创建另一个名为 absents 的表,其中包含三列:

    • id(主索引和自动增量)
    • student_id(不应该是唯一的)
    • 日期

    id 列只是缺席的 id(最好为表中的每一行设置 id)。 student_id 是对学生表的 id 列的引用,用于标识正确的学生。日期栏是缺席日期。

    另一个好的做法是在内部创建关系并将触发器设置为删除等操作(如果学生被删除,您应该怎么做?)。

    【讨论】:

    • 现在我有删除按钮,从学生表中删除学生。如果我创建缺席表,我可以添加较低的第二个删除,例如(DELETE FROM 缺席 WHERE student_id='我要删除的学生 ID')。但是如果可以删除学生,自动删除缺席这个学生感谢关系我会这样做,但首先我必须了解更多。
    • 你应该用谷歌搜索“MySQL 外键删除级联”之类的内容。了解 innoDB 和 myisam 的区别也是一个好主意(我不确定,但我相信外键在 myisam 表上不起作用)。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多