Mysql 在DBMS中追加是否可以?

Mysql 在DBMS中追加是否可以?,mysql,database,vb.net,datagridview,erd,Mysql,Database,Vb.net,Datagridview,Erd,我有一个记录学生违法行为的项目 事情是这样的 想象一下,一个班上有个女孩作弊。然后将她的数据添加到表中。然后,同一个女孩又犯了另一个罪行——故意破坏。她的信息再次存储在数据库中。所以在桌子上看起来像这样。(于同一日期完成) 然后我有我的桥实体,它在Girly的条目上有以下数据 RecordNumber OffenseNumber Student_ID OffenseCode Count Remarks 1 1 17800

我有一个记录学生违法行为的项目

事情是这样的

想象一下,一个班上有个女孩作弊。然后将她的数据添加到表中。然后,同一个女孩又犯了另一个罪行——故意破坏。她的信息再次存储在数据库中。所以在桌子上看起来像这样。(于同一日期完成)

然后我有我的桥实体,它在Girly的条目上有以下数据

RecordNumber    OffenseNumber   Student_ID  OffenseCode  Count  Remarks
      1               1           178003          N        0    WARNING
      2               2           178003          B        1    CALL PARENT
然后在DataGridView中(使用VB.NET)发生这种情况

Record Number    Student_ID        Name      OffenseCode    OffenseDesc
      1            178003         Girly           N          Cheating
      2            178003         Girly           B          Vandalism
      3            178003         Girly           N          Cheating
      4            178003         Girly           B          Vandalism
我加入了我的表格以得到那个结果。如果你一定要知道这些桌子

学生-记录编号(PK)、学生ID、姓名、班级、提交日期
桥牌-记录号码(PK)、违规人数(PK)、学生ID、违规代码、计数、备注
犯罪-犯罪数量(PK)、犯罪代码、犯罪描述


如何解决上述问题

以下是您的表架构的外观:

  • 学生-学生ID(PK)、学生姓名、班级
  • 犯罪类型-犯罪代码(PK),犯罪描述
  • 事件记录编号(PK)、学生ID、违规代码、提交日期、备注
  • 您甚至可能需要一个附加的备注表,因为在事件完全解决之前,可能需要几个人对事件进行评论

    然后,网格的查询将如下所示:

    SELECT RecordNumber, StudentID, StudentName, OffenseCode, OffenseDesc
    FROM Incident i
    INNER JOIN OffenseType o ON o.OffenseCode = i.OffenseCode
    INNER JOIN Student s on s.StudentID = i.StudentID
    

    那么,
    StudentId
    不是学生的PK吗?那么它有什么作用呢?第一张桌子到底是什么?它似乎复制了“桥”中的所有内容table@Plutonix因为当我将其设置为PK并且我想将相同的数据插入数据库时,它只会创建一个错误,表明数据已经存在。因此,我将记录编号作为PK,使其成为日志式记录。@NoobCoder这很好,但它不再是您的学生表。如果一个学生改变了他们的名字或班级,你必须更新该学生在表格中的每一条记录。@JoelCoehoorn我明白了。这个数据库只允许更改他们的名字。“您必须更新该学生表格中的所有记录…”您是指与该学生的个人资料相关的所有内容吗?但是,我的学生和OffenseType之间的表格是M:N关系。这意味着我需要在两个表之间建立一个桥接/复合实体来解决关系。在这种情况下,输出是什么?学生Girly会因为两种不同的违规行为被显示两次吗?在这种情况下,
    事件
    表就是您所说的交叉点(桥/复合)链接。交叉点或桥梁连接几乎总是以其自身的方式成为一个实体。根据我提供的表格模式和查询,一个名为“Girly”的学生犯了两次罪,会出现两次(每次犯一次),但不会出现问题样本中的四次。我明白了。我注意到您没有包括Count属性,因为它只会弄乱表,对吗?如果我包括它,它将是一个计算列。尽量不要存储无正当理由可以计算的数据。Count属性的目的是跟踪学生犯了多少罪,因此与备注有关。3次违规=类似的暂停。
    SELECT RecordNumber, StudentID, StudentName, OffenseCode, OffenseDesc
    FROM Incident i
    INNER JOIN OffenseType o ON o.OffenseCode = i.OffenseCode
    INNER JOIN Student s on s.StudentID = i.StudentID