J'ai une table dans ma base de données qui stocke les journaux. Les fichiers journaux sont horodatées avec précision à la seconde et de stocker les valeurs des différents capteurs et leur source:PostgreSQL bytea Clé primaire
log_id, log_date, primary_system_source, sub_system_source, values
Où log_id, primary_source et sub_source sont des entiers et des valeurs est un tableau d'octets de longueur variable (type de données: bytea).
Dans la plupart des cas, une combinaison des champs log_id, log_date, primary_system_source et sub_system_source suffirait comme clé primaire. Malheureusement, en raison de la résolution de l'horodatage dans le système de journalisation dans certaines lignes, le seul facteur qui différencie les rangées est que les valeurs des capteurs sont également ajoutées à la clé primaire.
Il semble que j'ai le choix entre l'absence de clé primaire (mauvaise?) Et l'inclusion du champ de valeurs dans la clé primaire. Je suis préoccupé par le second choix car je comprends qu'il pourrait être sérieusement préjudiciable à la performance (la table aura des centaines de millions de lignes).
Des indices quant à la meilleure solution?
Quelle est la raison pour laquelle vous ne pouvez pas utiliser une clé primaire à incrémentation automatique? (une séquence dans le jargon postgres) – nos
Je pourrais, mais un utilisateur stupide pourrait venir et essayer d'importer le même journal deux fois. En utilisant une séquence, la base de données réinsérerait le journal avec plaisir, en lui donnant de nouveaux identifiants. L'utilisation d'une clé primaire empêchera le même journal d'être importé en double (et offre plus de protection que la simple correspondance du nom de fichier). – James