複合プライマリキーを持つテーブルがあり、挿入に問題があります。テーブルを作成するために使用されるコードは次のとおりです。複合プライマリキーを持つアンドロイドsqlite3テーブルに挿入する際の問題
CREATE TABLE ClassEvent (
EventName varchar(10) NOT NULL,
CourseId varchar(10) NOT NULL,
EventType varchar(20),
EventWeight number(3),
DueDate DATE NOT NULL,
FOREIGN KEY (CourseId) REFERENCES Courses(CourseId),
PRIMARY KEY (CourseId, EventName));
私が午前問題は、私は列CourseIdまたはEVENTNAMEに対して一意ではないかもしれない値を持つレコードを挿入したい場合ですが、のユニークな組み合わせです私は、次の2つの挿入を実行しようとした場合、たとえば、2 を:
Error: columns CourseId, EventName are not unique.
と第二のインサートDOE:
INSERT INTO ClassEvent VALUES('Assignment 1','60-415','Assignment',10,'12/10/2010');
INSERT INTO ClassEvent VALUES('Project 1','60-415','Project',15,'5/12/2010');
を私は次のエラーを取得しますDBに入れないでください。このエラーはなぜ発生しますか?複合主キーでは、両方の値のの組み合わせが一意である必要があると考えました。上記の挿入では、CourseIdの値が同じであっても、EventName列の値が異なります。これは2つのユニークな組み合わせと2つの異なるプライマリキーとみなされるべきではありませんか?
私のテーブルはCourseIdごとにいくつかの異なるイベントを保持できる必要がありますが、各イベントは各コースごとに一意でなければなりません。
EVENTNAME CourseId 割り当て1 60から415 プロジェクト1 60から415 Assignment2 60から415 プロジェクト2 60から415 割り当て1 60から367 プロジェクト:私は次のようにテーブルに値を挿入できるようにする必要があります1 60-367
など。どのように私はこれを動作させることができます誰に教えてください?これらの複合PKがユニークなエントリとして見られないのはなぜですか?どんな助けでも大歓迎です。ここで
は、私は、挿入のために使用していたJava機能である:
public void addNewClassEvent(ContentValues values) {
SQLiteDatabase db = openConnection();
db.insert("ClassEvent", null, values);
db.close();
}
は、これが問題を引き起こしていませんか?
お返事ありがとうございます。 ID列を使用したくないのは、同じコースの同じイベント名のエントリを必要としないからです。たとえば、60-415の代入1を2回入力することはできません。 –
"代入1" + "#" + "イベント名"をIDとして持つことができます。あなたがどこかで区切り記号を忘れないようにcreateId(文字列代入、文字列イベント)のようなutil関数を持っていることを確認してください。EDIT:データを取得したら、lastIndexOf()/正規表現で区切ってください。 (lastIndexOfは簡単です) – somebody
おそらくあなたはあまり理解していません。割り当て1はEventName、60〜415はCourseIdです。私は、この組み合わせをテーブルに複数回入力することを許可したくありません。しかし、それに対応する限り、Assignment 1はEventNameとして複数回入力することが許されていなければなりません。CourseIdは2つの列のユニークな組み合わせを作成します。また、60-415は、対応するEventNameが一意の組み合わせを作成する限り、CourseIdのエントリとして複数回許可する必要があります。 –