Was die Ursache für Foreign Key-Mismatch " Fehler?
Ich habe eine sqlite-Datenbank, die wie folgt strukturiert:
CREATE TABLE IF NOT EXISTS Patient
( PatientId INTEGER PRIMARY KEY AUTOINCREMENT );
CREATE TABLE IF NOT EXISTS Event
(
PatientId INTEGER REFERENCES Patient( PatientId ),
DateTime TEXT,
EventTypeCode TEXT,
PRIMARY KEY( PatientId, DateTime, EventTypeCode )
);
CREATE TABLE IF NOT EXISTS Reading
(
PatientId INTEGER REFERENCES Patient( PatientId ),
DateTime TEXT REFERENCES Event (DateTime),
EventTypeCode TEXT REFERENCES Event (EventTypeCode),
Value REAL,
PRIMARY KEY( PatientId, DateTime, EventTypeCode )
);
Füge ich einen Patienten mit der Id #1
dann habe ich ausgeführt:
INSERT INTO Event (PatientId, DateTime, EventTypeCode) VALUES (1, '2011-01-23 19:26:59', 'R')
welche Werke
dann habe ich ausgeführt:
INSERT INTO Reading (PatientId, DateTime, EventTypeCode, Value) VALUES (1, '2011-01-23 19:26:59', 'R', 7.9)
und es gibt mir ein Fremdschlüssel stimmt nicht überein. Patienten-Id '1' in allen Fällen, und die datetime-und typecodes match in der 2. und 3. Abfragen. Ich verstehe nicht, was ist, nicht übereinstimmende, aber ich bin ein bisschen neu, um tatsächlich die Definition von Fremdschlüsseln und ich weiß nicht, was ich falsch mache.
Können Sie zitieren die Nachricht in der vollständigen, bitte?
"Fehler : foreign key-mismatch" haha.. nicht zu viel macht. Ich hatte gehofft, für etwas ein wenig genauer, auch.
"Fehler : foreign key-mismatch" haha.. nicht zu viel macht. Ich hatte gehofft, für etwas ein wenig genauer, auch.
InformationsquelleAutor Damon | 2011-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht vertraut mit SQLite, aber ein wenig Google ' Ing gedreht bis das. Die Dokumentation sagt
Ich vermute, Sie könnte ausgeführt werden, in #3 in dieser Liste.
Auch, während andere Datenbanken unterstützen könnte mit einem nicht eindeutigen index als eine foreign-key-Referenz, (finden Sie die Antworten hier), es ist ein schlechtes design Wahl meiner Meinung nach. Ich würde umstrukturieren, so dass entweder
Reading.PatientId
ReferenzenEvent.PatientId
so dass der komplette zusammengesetzten Schlüssel ausEvent
verwiesen wird, die vonReading
oder,EventId
auto-increment, primary key zu derEvent
Tabelle und als Fremdschlüssel in derReading
Tisch (so, dass Sie nurEventId
undValue
unterReading
und Sie können dasPatientId, DateTime, EventTypeCode
ausEvent
).Ich würde vorschlagen, #2, so dass Sie vermeiden die Redundanz
PatientId, DateTime
undEventTypeCode
in beidenEvent
undReading
.Siehe meine vorgeschlagenen Umstrukturierung. Ich würde gehen mit hinzufügen eines neuen auto-increment-Spalte zu
Event
und verwenden Sie, dass inReading
. Ich bin mir nicht ganz sicher, ob #1 (ReferenzierungEvent.PatientId
stattPatient.PatientId
) würde dein problem lösen, indem Sie signalisiert, zu SQLite, die Sie verweisen möchten, den gesamten zusammengesetzten Primärschlüssel, aber Sie könnten auch versuchen.Ich habe versucht 1, die irgendwie Sinn macht.. aber es ist immer noch wirft den Fehler. das problem mit deinem zweiten Vorschlag, ist, dass ich möchte in der Lage sein, zu synchronisieren, online und das macht es praktisch, um die patientenkennung überall so, dass alles identisch sein kann lokal vs. Remote
nm... Punkt 1 habe es zu lösen.. es hatte gerade nicht wirklich gespeichert
Nochmal, ich bin nicht vertraut mit SQLite so bin ich nicht sicher, was Sie brauchen, um in der Lage zu synchronisieren, online - würden Sie nicht in der Lage, synchronisieren Sie die gesamte DB statt jede Tabelle? Ich würde vorstellen, es pro Tabelle verursachen würde, Integrität Verstöße (z.B. das referenzierende Tabelle synchronisiert wird, aber nicht in der genannten Tabelle). Als Kompromiss, wenn Sie möchten, können Sie immer noch halten
Event.PatientId
undReading.PatientId
(FKs beziehen Patienten), aber fügen SieEvent.EventId
zu verwenden als die von FK. Auch, wenn Sie das tun, würden wir sicher sein, dass dieses Problem mit den Schlüsseln ist ja das problem - es ist immer noch ein bisschen Spekulation an dieser Stelle 🙂InformationsquelleAutor no.good.at.coding