2013-03-07 2 views
0

내 응용 프로그램에 대해 최상의 DB 구조와 SQL을 찾으려고합니다.어떤 SQL이 작동합니까?

시나리오는 이것이다 :

짐과 존은 다른 프로젝트를 위해 매주 자신의 시간 시트를 업데이트해야합니다. 그들이 이것을 할 때 그들은 html 양식을 사용하여 그 주 마지막 날 날짜를 기준으로 시간을 삽입합니다.

이 괜찮 및

그러나

가 예상보다 더 많은 시간을하고 자신의 시간 시트를 업데이트해야 할 짐과 존, 내가 그들을 원하는 경우 이름, 프로젝트, 날짜 및 시간에 새 행을 삽입합니다 양식을 사용할 수있을 것입니다. UPDATE 이름, 프로젝트 이름 및 날짜가 제출 된 것과 일치하는 경우 DB에 시간 coloumn 것입니다.

SQL 삽입 할 : 지금까지

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

일 :

내가 SQLite는 DB에 DB 구조 아래를 작성해야합니다.

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

그리고 내 문제를 해결하기 위해 다음 색인을 생성했습니다. 짐이 교체 존 존스 행과 동일한 날짜, 프로젝트 시간 동안 자신의 시간을 업데이트 만 남아있는 짐의 경우

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

그러나 문제이다.

잘하면이 문제를 명확하게 설명했습니다. 알려 주시면 알려주세요. 필요한 것이 있으면 무엇이든 제공해 드리겠습니다.

내 질문은 : 위에서 언급 한 시나리오가 작동하도록 허용 할 수있는 SQL 또는 DB 구조로 변경할 수있는 항목은 무엇입니까?

+0

난 당신이 resourceId라는 하나의 고유 한 열이 있어야한다고 생각하고 이것은 자원의 정체성이됩니다 jim과 존. 또한 jim이 john의 작업 표를 업데이트하는 방법은 무엇입니까? – DevelopmentIsMyPassion

+0

그 resourceid 열은 어떻게 작동합니까? 다른 프로젝트와 시간에 대해 같은 날짜에 jim 또는 john에 대한 항목이 여러 개 있으면 어떻게됩니까? – Rhys

+0

그러면 리소스 ID를 기반으로 행을 업데이트하면됩니다. – DevelopmentIsMyPassion

답변

0

jim/jhon이 자신의 타이밍을 다시 입력하면 jim/jhons 자신의 레코드를 업데이트하는 대신 전체 레코드를 업데이트하는 업데이트 쿼리가 실행됩니다. 주된 이유는 테이블에 고유 한 키/기본 키가 없으므로 쿼리가 전체적으로 많이 업데이트되는 이유입니다. 당신이해야 할 일을

는 키 열이 있고 자신의 기록을 업데이트 할 것입니다 해당 키를 기준으로 어디 절에 같은 것을 사용의

WHERE RESOURCE_ID = @RID // ID가 될 것입니다 그 특정 자원

관련 문제