Heim > Datenbank > MySQL-Tutorial > Wie können wir automatisch fortlaufende Nummern für gruppierte Zeilen in einer Adressverlaufstabelle generieren?

Wie können wir automatisch fortlaufende Nummern für gruppierte Zeilen in einer Adressverlaufstabelle generieren?

Barbara Streisand
Freigeben: 2025-01-07 19:42:43
Original
865 Leute haben es durchsucht

How Can We Automatically Generate Sequential Numbers for Grouped Rows in an Address History Table?

Automatische Generierung fortlaufender Nummern in Adressverlaufstabellen

Die Verwaltung des Adressverlaufs in Datenbanken erfordert ein robustes System zur Verfolgung von Änderungen im Laufe der Zeit. Die Aufrechterhaltung einer genauen fortlaufenden Nummerierung für den Adressverlauf jeder Person ist von entscheidender Bedeutung.

Die Herausforderung:

Stellen Sie sich eine address_history Tabelle vor:

person_id sequence timestamp address original_address previous_address
1 1 2023-02-01 Address A NULL NULL
1 2 2023-03-01 Address B Address A NULL
2 1 2023-04-01 Address C NULL NULL

Wie können wir jedem sequence automatisch fortlaufende person_id Nummern zuweisen, beginnend bei 1, ohne auf potenziell unzuverlässige Mechanismen zur automatischen Inkrementierung angewiesen zu sein?

Lösung:

Anstatt sich auf automatisch inkrementierende Spalten zu verlassen, die zu Lücken oder Inkonsistenzen führen können, schlagen wir vor, eine Serien- oder IDENTITY-Spalte als Primärschlüssel zu verwenden und die Sequenznummer dynamisch zu generieren.

<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 WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  previous_address TEXT
);</code>
Nach dem Login kopieren

Für Abfragen, die die fortlaufende Nummer erfordern, kann eine Ansicht erstellt werden:

<code class="language-sql">CREATE VIEW address_history_with_sequence AS
SELECT *, ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY address_history_id) AS sequence
FROM address_history;</code>
Nach dem Login kopieren

Dieser Ansatz gewährleistet eine lückenlose Reihenfolge, geordnet nach dem Primärschlüssel (address_history_id) und bietet bei Bedarf Flexibilität bei der Reihenfolge.

Best Practices:

  • Verwenden Sie TIMESTAMP WITH TIME ZONE für eine genaue Zeiterfassung.
  • Nur ​​das Speichern previous_address kann die Dateneffizienz verbessern. Die ursprüngliche Adresse kann häufig aus der Spalte address der vorherigen Zeile abgeleitet werden.

Diese Methode bietet eine zuverlässigere und effizientere Lösung für die Verwaltung der fortlaufenden Nummerierung in Adressverlaufstabellen.

Das obige ist der detaillierte Inhalt vonWie können wir automatisch fortlaufende Nummern für gruppierte Zeilen in einer Adressverlaufstabelle generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage