Maison > base de données > tutoriel mysql > Comment pouvons-nous générer automatiquement des numéros séquentiels pour les lignes groupées dans un tableau d'historique d'adresses ?

Comment pouvons-nous générer automatiquement des numéros séquentiels pour les lignes groupées dans un tableau d'historique d'adresses ?

Barbara Streisand
Libérer: 2025-01-07 19:42:43
original
865 Les gens l'ont consulté

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

Génération automatique de numéros séquentiels dans les tableaux d'historique des adresses

La gestion de l'historique des adresses dans les bases de données nécessite un système robuste pour suivre les modifications au fil du temps. Il est crucial de maintenir une numérotation séquentielle précise pour l’historique des adresses de chaque individu.

Le défi :

Considérez un address_history tableau :

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

Comment pouvons-nous attribuer automatiquement des sequence numéros séquentiels pour chaque person_id, en commençant par 1, sans compter sur des mécanismes d'auto-incrémentation potentiellement peu fiables ?

Solution :

Au lieu de s'appuyer sur des colonnes auto-incrémentées qui peuvent entraîner des lacunes ou des incohérences, nous proposons d'utiliser une colonne série ou IDENTITÉ comme clé primaire et de générer le numéro de séquence de manière dynamique.

<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>
Copier après la connexion

Pour les requêtes nécessitant le numéro séquentiel, une vue peut être créée :

<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>
Copier après la connexion

Cette approche garantit une séquence sans interruption, ordonnée par la clé primaire (address_history_id), et offre une flexibilité dans l'ordre si nécessaire.

Bonnes pratiques :

  • Utilisez TIMESTAMP WITH TIME ZONE pour un suivi précis du temps.
  • Le stockage uniquement previous_address peut améliorer l'efficacité des données. L'adresse d'origine peut souvent être dérivée de la colonne address de la ligne précédente.

Cette méthode fournit une solution plus fiable et plus efficace pour gérer la numérotation séquentielle dans les tables d'historique des adresses.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal