2016-05-09 4 views
0

は、私は私のテーブルには、重複するタイムスタンプがなかったことを確認したかったが、その後、私は単にUNIQUEを使用している場合、今、私のテーブルが持っているので、それは、問題となる可能性があることが判明:他のフィールドに対して一意のフィールドを適用するにはどうすればよいですか?

_ID field (autoincrement) 
Account ID (integer, links to an account table) 
Category ID (integer, links to a category table) 
Value (the value of this category for this account) 
Timestamp (the timestamp of this value of this category for this account) 

を指定する方法がありますアカウントIDとカテゴリIDのコンテキスト内で一意のタイムスタンプフィールド? inと同様に、アカウントとカテゴリに関して、1つのタイムスタンプに対して2つの値を入れることはできません。ただし、タイムスタンプは、他のカテゴリやアカウントに対応するため、テーブル全体に複数回表示されることがあります。

+0

あなたは本当に必要ですか?たぶんあなたがしているものは、別々に扱うことができます。 –

+0

人が重複を挿入しないようにするために必要です –

+1

複数の列 'UNIQUE(account、category、timestamp)'、 – dnoeth

答えて

0

あなたはトリガーを作成し、必要なものは何でも制約チェックすることができます。

@Override 
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) { 
    database.execSQL("CREATE TRIGGER UNIQUE_TIMESTAMP_TRIGGER " + 
      "AFTER INSERT ON MY_TABLE FOR EACH ROW " + 
      "BEGIN " + 
      " SELECT RAISE(ABORT, 'Timestamp not unique') WHERE " + 
      " EXISTS(SELECT TIMESTAMP MY_TABLE T2 " + 
      " WHERE T2.TIMESTAMP = NEW.TIMESTAMP AND T2.ACCOUNT_ID = NEW.ACCOUNT_ID) " + 
      "END; "); 
} 
関連する問題