Heim >Datenbank >MySQL-Tutorial >Wie kann ich eindeutige Seriennummern für Adressänderungen innerhalb von Personengruppen in einer Datenbank effizient generieren?
Optimierung der Nachverfolgung von Adressänderungen mit Datenbankseriennummern
Das Verwalten von Adressänderungen innerhalb einer Datenbank erfordert oft eine Verlaufstabelle, um jede Änderung aufzuzeichnen. Diese Tabelle enthält normalerweise eine Personen-ID, eine Sequenznummer für jede Adressänderung, einen Zeitstempel und die vorherige Adresse. Allerdings kann das automatische Erhöhen der Sequenznummer pro Person überraschend komplex sein.
Vereinfachung des Ansatzes: Vermeiden Sie Einschränkungen bei der automatischen Inkrementierung
Anstatt automatisch inkrementierende Sequenzen oder Einschränkungen zu verwenden – die oft zu komplizierten Lösungen führen – umfasst eine einfachere Methode eine standardmäßige serielle (automatische Inkrementierung) oder IDENTITY-Spalte:
<code class="language-sql">CREATE TABLE address_history ( address_history_id serial PRIMARY KEY, person_id INT NOT NULL REFERENCES people(id), created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, previous_address TEXT );</code>
Erstellung von Seriennummern mit Fensterfunktionen
Mit dieser Tabellenstruktur bieten Fensterfunktionen eine elegante Lösung, um fortlaufende Nummern für jede Person lückenlos zu generieren:
<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 fungiert als direkter Ersatz für die Originaltabelle und stellt die gewünschten Seriennummern (adr_nr
) in Ihren Abfragen bereit.
Datenmodelloptimierung für Effizienz
Berücksichtigen Sie für eine optimale Leistung die folgenden Datenmodellverbesserungen:
TIMESTAMP WITHOUT TIME ZONE
(oder TIMESTAMP WITH TIME ZONE
) für eine genaue Zeiterfassung anstelle von DATETIME
.previous_address
ist ausreichend, sodass keine separaten Spalten address
und original_address
erforderlich sind. Dies reduziert den Speicherplatz und verbessert die Abfragegeschwindigkeit.Das obige ist der detaillierte Inhalt vonWie kann ich eindeutige Seriennummern für Adressänderungen innerhalb von Personengruppen in einer Datenbank effizient generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!