数据库没有唯一ID

时间:2014-02-05 02:39:02

标签: mysql vb.net

我有一个包含每月出勤率的数据库。现在,我想在一系列文本框中显示该数据。但我的问题是它不包含任何使我的任务变得困难的唯一ID。看看附件,以便你们可以了解我的问题。

http://s26.postimg.org/p8v0zhemx/image.png

提前非常感谢你。

编辑: 对于使用listview的未来研究人员,这是我的MySQL查询。

  1. 如果您的数据库没有唯一ID,则必须创建复合键。谷歌吧。
  2. 我设法从脑子里拔出来的查询。

    "SELECT empno, line1, time1, line2, time2, line3, time3, line4, time4, line5, time5, line6, time6 FROM attendancelist WHERE empno = '" & ListPayroll.SelectedItems(0).Text & "' AND line1 = '" & ListPayroll.SelectedItems(0).SubItems(1).Text & "'"

2 个答案:

答案 0 :(得分:0)

如果您需要的是更新和删除的任意唯一标识符(如注释中所示),则添加一个:

ALTER TABLE my_table
ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY;

当然,这是假设你有这种能力或者可以说服那些做过的人。这是一个非常小的变化。如果在现有INSERT查询中指定了列名,则不需要对其进行更改。有人应该愿意这样做。

如果您可以自由修改架构,请考虑修改架构。这是非常非常糟糕的设计(具有包含多条信息的重复列和列)。如果您无法修改此模式,则创建新的,设计更好的模式并从此模式导入数据可能是您要考虑的另一个选项。 (也可以使用一组单独的表来创建“新模式”。)

另请注意,使用当前结构,您将需要极其繁重的验证代码端,以防止用户在修改无效数据时保存它们。

答案 1 :(得分:0)

在我看来,您的样本数据表包含大量的出勤数据,基本上如下所示:

 employee     workdate    starttime   endtime   
  00117     2014-02-03     08:15        17:30   
  00117     2014-02-04     09:00        17:30  
  00117     2014-02-05      null         null  
  etc.

如果员工在某一天缺席,则在开始时间和结束时间由空值表示。如果员工在特定日期根本没有受雇,那么您只需将该行完全排除在表外。我认为这是样本数据第一行中员工00001的前五天意味着 - 不存在,不存在。

您的原始数据排列在一个非常不方便的报告布局中,每行放置一周的工作日。您可以编写一个简单的dotnet程序来填充您的六天周输入表,并从该表的每一行插入六行(或更少)此数据。

从该输入表加载数据后,您可以切换到在新表中维护它。这对于你在程序中处理来说会容易得多。您还可以编写一个查询程序,重新创建您的六天行报告,如果这是您的用户喜欢的。

安排我展示它的方式,你会得到一个很好的小出勤表。如果您提前知道每个员工每天最多只有一条记录,则可以使用我显示的列,并使用由(employee,workdate)组成的复合主键。

如果每个员工每个日期可能有多行,则需要添加一个id列,该列可以是自动增量的代理主键。