0

私はsqlite3で作成されたデータベースを持っており、ローンテーブルの外部キーを学生テーブルとブックテーブルに設定して、重複したローンを停止しています。

テーブルの作成を使用する:

CREATE TABLE loan(
  SudentID INTEGER,
  ISBN INTEGER,
  out INTEGER,
  FOREIGN KEY(SudentID)
      REFERENCES student(SudentID)
      ON DELETE CASCADE
  FOREIGN KEY(ISBN)
      REFERENCES book(ISBN)
      ON DELETE CASCADE
)

CREATE TABLE student(
  SudentID INTEGER PRIMARY KEY,
  First TEXT,
  Last,
  Contact Text,
  Year INTEGER)

CREATE TABLE book(
  ISBN INTEGER PRIMARY KEY,
  Title TEXT,
  Price INTEGER,
  Qty INTEGER,
  Subject TEXT)

重複レコードをローンテーブルに挿入しようとしても、外部キーはそれを妨げません。

プラグマは、コードとFirefoxデータベース設定の両方でオンになっています。

バージョンは2.6.0です

私の回避策は、Distinctを使用して重複を除外することですが、このデータベースを教育ツールとして使用しているので、それらをアクティブ化する方法はありますか。ただし、cascade delete動作しません!なんで?

4

2 に答える 2

1

ローンテーブルに複合主キーが必要です。

CREATE TABLE loan(
  StudentID INTEGER,
  ISBN INTEGER,
  out INTEGER,
  FOREIGN KEY(SudentID)
      REFERENCES student(SudentID)
      ON DELETE CASCADE
  FOREIGN KEY(ISBN)
      REFERENCES book(ISBN)
      ON DELETE CASCADE
  PRIMARY KEY(StudentID, ISBN)
)
于 2013-02-24T15:30:28.090 に答える
0

外部キーのサポートは、Sqliteバージョン3.6.19以降でのみ使用できます。したがって、問題は次のいずれかである可能性があります。

  1. Sqliteバージョン<3.6.19。お使いのバージョンが外部キーをサポートしているかどうかについては、次のことを試してください。

sqlite> PRAGMA external_keys;

0または1ではなくデータが返されない場合、ご使用のバージョンは外部キーをサポートしていません。

  1. sqlite3のバージョンは、これらのいずれかが定義された状態でコンパイルされました

SQLITE_OMIT_FOREIGN_KEY

SQLITE_OMIT_TRIGGER

ただし、sqlite3では外部キーは適用されません。ここからこのすべての情報を見つけてください

于 2016-03-05T18:18:21.510 に答える