Heim >Datenbank >MySQL-Tutorial >Wie kann ich eindeutige Seriennummern für Adressänderungen innerhalb von Personengruppen in einer Datenbank effizient generieren?

Wie kann ich eindeutige Seriennummern für Adressänderungen innerhalb von Personengruppen in einer Datenbank effizient generieren?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-07 19:36:42977Durchsuche

How Can I Efficiently Generate Unique Serial Numbers for Address Changes within Person Groups in a Database?

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:

  • Verwenden Sie TIMESTAMP WITHOUT TIME ZONE (oder TIMESTAMP WITH TIME ZONE) für eine genaue Zeiterfassung anstelle von DATETIME.
  • Datenspeicherung minimieren; Das Feld 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn