Ich habe ein Problem, bei dem ich sagen kann, dass ich eine People-Tabelle habe, die von einer Student-Tabelle und einer Teacher-Tabelle geerbt wird. wenn ich einen INSERT INTO-Schüler und einen INSERT INTO-Lehrer mache und den Primärschlüssel der Personentabelle (P_Id) zum Beispiel
vorschlage %Vor%Ich komme mit zwei doppelten Datensätzen in meiner People-Tabelle (P_Id ist mein Primärschlüssel in der Personentabelle). Es scheint, dass die Untertabellen die Einfügungen in die Personentabelle vornehmen, ohne die Einschränkungen für diese Tabelle zu berücksichtigen. sollte die Primärschlüsseleinschränkung für die Personentabelle nicht verhindern, dass doppelte Datensätze erstellt werden?
Ich habe darüber nachgedacht, dieses Problem mit einem Trigger zu lösen, der ausgelöst wird, bevor eine Einfügung in der People-Tabelle vorgenommen wird, die nach einer P_Id sucht, die bereits existiert. aber ich möchte, dass es mich entweder daran hindert, solche Dinge zu tun, oder ich möchte, dass es nur in der Untertabelle intelligent einen Datensatz erstellt.
Nach diesem Schritt gibt es ein Problem mit der Änderung der LastName zum Beispiel in der Student-Tabelle und die Änderungen in der Lehrer-Tabelle widerspiegeln?
Hier sind die create-Anweisungen, die oben genannten Insert-Anweisungen sollten nur ein Beispiel geben. Ich verstehe, dass sie nicht mit diesen Tabellen funktionieren, die erstellt werden:
%Vor%Ich denke, dieses Verhalten ist beabsichtigt. Aus den PostgreSQL-Dokumenten . . .
INSERT fügt immer genau in die angegebene Tabelle ein.
Und ein wenig weiter unten auf der Seite. . .
Alle Überprüfungsbedingungen und Nicht-Null-Einschränkungen für eine übergeordnete Tabelle sind automatisch von seinen Kindern geerbt. Andere Arten von Einschränkungen (Eindeutige, Primärschlüssel- und Fremdschlüsseleinschränkungen) werden nicht vererbt.
Wenn Sie nur Personen auswählen, sehen Sie keine Zeilen. Wenn Sie nur einen Schüler auswählen, werden mehrere Zeilen mit derselben Personen-ID angezeigt. Das heißt, Sie können mehrere Zeilen mit demselben Wert für people_id in die Schüler einfügen. Dies ist bestenfalls kontraintuitiv; Die Dokumentation sagt, es ist kaputt, aber wird wahrscheinlich eines Tages behoben werden.
Aus dem Abschnitt "Vorbehalte". . .
Eine ernsthafte Einschränkung des Vererbungsmerkmals sind diese Indizes (einschließlich eindeutiger Einschränkungen) und Fremdschlüsseleinschränkungen gelten nur zu einzelnen Tabellen, nicht zu ihren Nachkommen Kindern. Dies gilt für sowohl die referenzierenden als auch die referenzierten Seiten einer Fremdschlüsseleinschränkung.
Gleicher Abschnitt.
Diese Mängel werden wahrscheinlich in einer zukünftigen Version behoben werden, aber In der Zwischenzeit ist beträchtliche Vorsicht geboten, um zu entscheiden, ob Vererbung ist für Ihre Anwendung nützlich.
Die Einschränkungsregeln sind nicht vererbbar, daher müssen Sie die Einschränkung in jeder Tabelle definieren. Zum Beispiel:
%Vor%Wir sehen uns.
Tags und Links sql inheritance postgresql constraints