多次存储与特定列相关的日期的正确方法是什么

what is the right way to store dates related to a specific column multiple times

我觉得我什至没有正确写出问题主题,因为我对此很困惑 所以事情是这样的.. 我正在 VB.NET 中开发一个简单的应用程序,我创建了 Table 列,其中包含 (id -name - startdatetime - enddatetime - department) 我想以一种方式存储该信息,以便让我搜索以前的日期让我们说一个月的名字信息,这样我就可以准确地得到那天的名字

我已经做到了,但问题是每次我插入名称和日期的新数据时,它都会保存在前一个日期时间,因此上一个将被删除,因为将用新数据更新

让我如此困惑的是,我应该创建 2 个带有 Relation 的表,还是一个足以让我的应用程序存储并保留与名称和部门相关联的过去日期时间

谢谢

我会提供一些软件和数据库设计建议。

(大多数)数据库中的每一行 tables 代表应用程序真实世界中的某种实体。例如,您可能有一个名为 department 的 table,其中每一行都包含部门名称和位置。这里的实体是部门

您的 table 的列 idstartdatetimeenddatetimedepartment 的行代表某种事件。你没有告诉我们是什么样的事件,但这并不重要。假设各部门轮流赞助办公室咖啡时间。此 table 的实体是赞助咖啡时间活动。

因此,每次有赞助的咖啡时间,您的程序都会在您的 table 中插入一个新行,其中包含部门名称(或 ID 或其他)以及开始和结束时间。您很可能永远不会更新此 table 中的行,除非您发现,例如,当您第一次插入该行时,结束时间是错误的。

现在您有了所有赞助咖啡时间的记录。您可以使用 table 进行各种查询。这是一个:每个部门最近一次赞助咖啡时间是什么时候?

       SELECT department, MAX(startdatetime) recent
         FROM tbl 
        GROUP BY department;

您的 table 足以代表像这次赞助的咖啡时间这样的实体。但是,如果多个部门有时赞助您的咖啡时间,您将需要咖啡时间和部门之间的一对多关系,因此需要另一个 table。

你写道 每次我插入新的姓名和日期数据时,它都会保存在前一个日期时间...更新为新的。你没有显示你的代码。根据您的描述,我猜您正在使用 UPDATE 并更改现有行,而不是使用 INSERT 为新事件放入新行。你的程序有可能这样做吗?如果是这样,那是不正确的。

代表真实世界事件的数据库行的有趣之处在于:随着时间的流逝,您会积累越来越多的行,并且您的 table 会增长。没关系。 (您可以安排删除旧行,但那是另一个话题。)

专业提示 想一想你试图表现的现实世界中的事物,知道这些事物中的每一个都会在 table 中占据自己的一行。

希望对您有所帮助。

非常感谢你的回答,是的,你让我看到了新事物,因为我实际上还在学习.. 我的申请是让患者记录为患者访问设施做记录,所以如果已经创建了记录,用户将只添加一个新的访问与新日期并与部门和医生姓名相关联,如果没有记录,那么用户将创建新的记录并为患者进行新的访问

你写的是我正在使用更新,但如果要更新记录,请使用更新按钮

runcmd("update bsm Set r=" & r.Text & ", nm ='" & nm.Text & "', ino ='" & ino.Text & "', age='" & nt.Text & "', sex='" & ComboBox1.SelectedItem & "', sdat='" & sdat.Text & "', edat='" & edat.Text & "', cp='" & cp.Text & "' , dig='" & dig.Text & "' , dep='" & dep.Text & "' , doc='" & doc.Text & "' , rmk='" & rmk.Text & "' where r=" & r.Text, "Data Is Added Successfully")

我使用插入来添加新记录

Dim strinsert As String = "insert into adm.bsm(r,ino,nm,nt,sex,age,cp,sdat,edat,dig,dep,doc,rmk) VALUES ('" & r.Text & "','" & ino.Text & "','" & nm.Text & "','" & nt.Text & "','" & ComboBox1.SelectedItem & "','" & age.Text & "','" & cp.Text & "','" & sdat.Text & "','" & edat.Text & "','" & dig.Text & "','" & dep.Text & "','" & doc.Text & "','" & rmk.Text & "')"
            Dim cmd As New MySqlCommand(strinsert, conn)