>
> Ok. My first guess is that you are missing the "suggested index" on the
> child table. Without this, if there is a foreign key violation in the
> db, each insert on the parent table will cause a linear scan of the
> entire child table. With the index, it's just a simple seek.
>
> https://www.sqlite.org/foreignkeys.html#fk_indexes
>
> If you're unsure, open your database using the command line tool and
> dump the schema using the ".schema" command. Post that here and someone
> should be able to tell you if you're missing an index or not.
>


OK.....

D:\ODB\odb-examples-2.4.0\relationship>D:\ODB\sqlite3.exe test.db
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
sqlite> .schema
CREATE TABLE "relation_employer" (
  "name" TEXT NOT NULL PRIMARY KEY);
CREATE TABLE "relation_project" (
  "name" TEXT NOT NULL PRIMARY KEY);
CREATE TABLE "relation_employee" (
  "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  "first" TEXT NOT NULL,
  "last" TEXT NOT NULL,
  "employer" TEXT NOT NULL,
  CONSTRAINT "employer_fk"
    FOREIGN KEY ("employer")
    REFERENCES "relation_employer" ("name")
    DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE "relation_employee_projects" (
  "object_id" INTEGER NOT NULL,
  "value" TEXT NOT NULL,
  CONSTRAINT "object_id_fk"
    FOREIGN KEY ("object_id")
    REFERENCES "relation_employee" ("id")
    ON DELETE CASCADE,
  CONSTRAINT "value_fk"
    FOREIGN KEY ("value")
    REFERENCES "relation_project" ("name")
    DEFERRABLE INITIALLY DEFERRED);
CREATE INDEX "relation_employee_projects_object_id_i"
  ON "relation_employee_projects" ("object_id");

Reply via email to