Merkwürdiges Fremdschlüsselverhalten bei leeren Tabellen in SQLite 3

Ich habe SQLite 3 mit folgendem Setup (vereinfacht):

create table Location(LocationId integer not null,
                      LocationCode text not null, 
                      primary key(LocationId),
                      unique(LocationCode));

Die obige Tabelle wird von der Abteilung referenziert:

create table Department(DepartmentId integer not null,
                        LocationId integer not null,
                        DepartmentCode text not null,
                        primary key(LocationId, DepartmentCode),
                        foreign key(LocationId) references Location(LocationId));

Die obige Tabelle wird von Child referenziert:

create table Event(EventId integer not null,
                   LocationId integer not null,
                   unique(LocationId, EventDate),
                   primary key(eventId),
                   foreign key(LocationId) references Location(LocationId));

Die Tabelle über der Referenztabelle

create table Parent(ParentId integer not null,
                    EmailAddress text not null,
                    primary key(ParentId),
                    unique(EmailAddress));

Die obige Tabelle wird von der Tabelle Child referenziert:

create table Child(ChildId integer not null,
                   ParentId integer not null,
                   ChildCode text not null,
                   DepartmentId integer not null,
                   primary key(ChildId, ParentId),
                   foreign key(ParentId) references Parent(ParentId),
                   foreign key(DepartmentId) references Department(DepartmentId));

Das Tabellenkind ist dasjenige, von dem ich versuche, es zu löschen.

Zu diesem Zeitpunkt ist die gesamte Datenbank leer und hat "pragma foreign_keys = ON".

Beim Testen eines Skripts zum Löschen der Datenbank ist beim Löschen aus der leeren Tabelle ein Fehler aufgetretenChild einen Fremdschlüssel für die (auch leere) Tabelle habenParent.

Wenn ich den Befehl erteiledelete from child (solange bereits leer ist), kehrt SQLite3 mit der Fehlermeldung "Fremdschlüssel stimmen nicht überein" zurück.

Dies ist der entscheidende Teil des Löschskripts:

delete from Child;
delete from Parent;
delete from Event;
delete from Department;
delete from Location;

Ich habe hier einige Posts über die vorübergehende Deaktivierung der Fremdschlüsselunterstützung gesehen, aber das ergibt für mich keinen Sinn. Dies macht den gesamten Prozess der Implementierung einer Fremdschlüsselbeziehung überflüssig.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage