0

アプリケーションに最適な DB 構造と SQL を見つけようとしています。

シナリオは次のとおりです。

Jim と John は、さまざまなプロジェクトのタイム シートを毎週更新する必要があります。これを行うとき、彼らは html フォームを使用して、週の最終日の日付に基づいて時間を挿入します。

これで問題ありません。名前、プロジェクト、日付、時間の新しい行が挿入されます

ただし、ジムとジョンが予想よりも多くの時間を費やし、タイムシートを更新する必要がある場合は、フォームを使用できるようにしたいと思いますUPDATE。名前、プロジェクト名、および日付が一致する場合、DB の時間列が表示されます。提出したもの。

挿入する 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 構造で何を変更できますか?

4

1 に答える 1

0

私が得たのは、ジム/ジョンが再びタイミングに入ると、ジム/ジョン自身のレコードを更新する代わりに、レコード全体を更新する更新クエリが実行されるということです。主な理由は、テーブルに一意のキー/主キーがないため、クエリが大量に更新されるためです。

あなたがする必要があるのは、キー列があり、そのキーに基づいてレコードを更新し、where句でこのようなものを使用することです

WHERE RESOURCE_ID = @RID //その特定のリソースの ID

于 2013-03-07T11:44:15.110 に答える