Automatische Nummerierung zusammengesetzter PostgreSQL-Schlüssel: Ein vereinfachter Ansatz
Um einzelne Adressänderungen im Laufe der Zeit zu verfolgen, ist eine eindeutige Kennung für jede Änderung im Verlauf einer Person erforderlich. Während es komplexe automatische Nummerierungsschemata gibt, bietet PostgreSQL eine sauberere und effizientere Lösung mit seriellen oder IDENTITY-Spalten.
Komplexität vermeiden
Traditionelle Methoden führen oft zu komplizierten, fehleranfälligen Nummerierungssystemen. Die integrierten Funktionen von PostgreSQL bieten eine optimierte Alternative.
Die empfohlene Lösung: Serien-/IDENTITÄTSSpalten
Die Nutzung der serial
- oder IDENTITY
-Spalte von PostgreSQL vereinfacht den Prozess erheblich. Dadurch entfällt die Notwendigkeit, komplexe Abläufe zu verwalten.
Implementierungsbeispiel
So implementieren Sie dies in einer address_history
Tabelle:
<code class="language-sql">CREATE TABLE address_history ( address_history_id serial PRIMARY KEY, person_id int NOT NULL REFERENCES people(id), created_at timestamptz NOT NULL DEFAULT current_timestamp, previous_address text );</code>
Laufende Nummern abrufen
Um die fortlaufende Nummer für jede Adressänderung pro Person zu erhalten, verwenden Sie die row_number()
Fensterfunktion:
<code class="language-sql">CREATE VIEW address_history_nr AS SELECT *, row_number() OVER (PARTITION BY person_id ORDER BY address_history_id) AS adr_nr FROM address_history;</code>
Diese Ansicht dient als direkter Ersatz für die address_history
-Tabelle in Abfragen und stellt die fortlaufende Nummer (adr_nr
) für jede Adressänderung bereit.
Wichtige Verbesserungen
timestamptz
(Zeitstempel mit Zeitzone) für verbesserte Genauigkeit und Konsistenz.address
- und original_address
-Spalten und vereinfacht so die Tabellenstruktur. Es ist nur previous_address
notwendig.Das obige ist der detaillierte Inhalt vonWie kann ich die automatische Nummerierung für zusammengesetzte Schlüssel in PostgreSQL effizient implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!