2013-03-07 61 views
0

我正在努力为我的应用程序制定出最好的数据库结构和SQL。哪个SQL可以工作?

的情况是这样的:

吉姆和约翰需要每星期更新他们的考勤表为不同 项目。当他们这样做时,他们使用HTML表单根据一周中最后一天的日期插入他们的 小时。

这是罚款,并插入一个新行名称,项目,日期和时间

然而,如果吉姆和约翰做更多的时间比他们预期,需要更新自己的时间表,我希望他们能够使用表格,并且如果名称,项目名称和日期与已提交的内容匹配,则它将在数据库上的小时数col。

SQL来插入:

INSERT OR REPLACE INTO RESOURCE(NAME, DATE, PROJECT, HOURS) VALUES ('"+ name+ "', '"+ date+ "', '"+ project+ "','" + hours + "'); 

工作至今:

我有一个SQLite数据库创建以下数据库结构。

CREATE TABLE RESOURCE (
    name VARCHAR(16), 
    date DATE, 
    project VARCHAR(16), 
    hours VARCHAR(16) 
) 

而且我已经创建了以下索引来尝试解决我的问题。

CREATE UNIQUE INDEX myindex ON RESOURCE(NAME, DATE, PROJECT) 

然而,问题是,当吉姆更新他小时在同一日期,项目,时间为约翰,约翰列被替换,只有吉姆的留下。

希望我已经清楚地解释了这个问题,如果不是,请让我知道,我会提供任何需要的。

我的问题是:什么可以改变我的SQL或我的数据库结构,这将允许上述方案的工作?

+0

我想你应该有一个唯一的名为resourceId的列,这将是资源jim和john的身份。另外,jim如何更新约翰的时间表? – DevelopmentIsMyPassion 2013-03-07 08:18:29

+0

该resourceid列将如何工作?如果在同一天为不同的项目和不同的小时,jim或john有多个条目,会发生什么? – Rhys 2013-03-07 08:29:21

+0

然后,您只需根据资源ID更新行。 – DevelopmentIsMyPassion 2013-03-07 08:32:30

回答

0

我得到的是,当jim/jhon再次进入他的计时时,执行更新查询会更新整个记录,而不是更新jim/jhons自己的记录。主要原因是你的表没有任何唯一的键/主键,这就是为什么你的查询更新很多。

你需要做的是,有一个键柱和键将更新其记录的基础上,你会使用这样的where子句中

WHERE RESOURCE_ID = @RID //的ID特定资源

相关问题