6

多対多の関係を持つ SQLite データベースを作成しています。次のコードを使用して、これを 2 つの 1 対多の関係に分割しました。

SQLiteManager: CREATE  TABLE "main"."LESSONS" 
(
   "LESSONID" INTEGER PRIMARY KEY  
   NOT NULL , "MODULEID" INTEGER, FOREIGN KEY(MODULEID) REFERENCES MODULES 
   (MODULEID), "STUDENTID" INTEGER, FOREIGN KEY (STUDENITD) REFERENCES STUDENTS
   (STUDENTID)
)    

エラー:

[near ""STUDENTID"": syntax error ]
Exception Name: NS_ERROR_FAILURE
Exception Message: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE)
[mozIStorageConnection.createStatement]

このエラーを修正する方法を知っている人はいますか?

4

3 に答える 3

13

ドキュメントをチェックしてください。フィールド定義自体で外部キーを指定する場合は、キーワードFOREIGN KEY自体を使用しないでください。また、 CLが指摘したように、コンマを使いすぎました。、制約を個別に指定する場合でも、外部キー名を括弧で囲んではなりません。

このステートメントは、あなたが望むことを行います:

CREATE TABLE "LESSONS"
(
    "LESSONID"  INTEGER PRIMARY KEY NOT NULL,
    "MODULEID"  INTEGER REFERENCES MODULES(MODULEID),
    "STUDENTID" INTEGER REFERENCES STUDENTS(STUDENTID)
);

また、MODULEID が表 MODULES の主キーである場合、それ自体を指定する必要はないことに注意してください。SQLite はそれを必要としません。そうは言っても、他のSQLエンジンはそれを期待しているので、私はこのように指定することを好みます。

于 2013-01-09T09:14:53.040 に答える
2

の宣言にタイプミスがありますforeign key

FOREIGN KEY (STUDENITD)

する必要があります

FOREIGN KEY (STUDENTID)
于 2013-01-09T02:39:06.107 に答える
2

コンマが多すぎます。列属性はコンマで区切られません。テーブルの列の間でのみ使用します。

CREATE  TABLE "LESSONS" 
(
    "LESSONID"  INTEGER PRIMARY KEY NOT NULL,
    "MODULEID"  INTEGER FOREIGN KEY (MODULEID)  REFERENCES MODULES(MODULEID),
    "STUDENTID" INTEGER FOREIGN KEY (STUDENTID) REFERENCES STUDENTS(STUDENTID)
)
于 2013-01-09T08:54:39.597 に答える