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 ?
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>
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>
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 :
TIMESTAMP WITH TIME ZONE
pour un suivi précis du temps.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!