複合主キーを持つテーブルがあり、挿入に問題があります。テーブルの作成に使用されるコードは次のとおりです。
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 つの挿入を実行しようとすると:
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');
次のエラーが表示されます。
Error: columns CourseId, EventName are not unique.
2番目の挿入はDBに挿入されません。このエラーが発生するのはなぜですか? 複合主キーでは、両方の値の組み合わせが一意である必要があると思いました。上記の挿入では、CourseId の値が同じであっても、EventName 列の値が異なります。これは 2 つの一意の組み合わせ、つまり 2 つの異なる主キーと見なされるべきではありませんか?
私のテーブルは、CourseId ごとにいくつかの異なるイベントを保持できる必要がありますが、各イベントはコースごとに一意である必要があります。次のようにテーブルに値を挿入できるようにする必要があります。
EventName CourseId 課題 1 60-415 プロジェクト 1 60-415 課題 2 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();
}
これが問題を引き起こしている可能性はありますか?