J'ai lu que l'utilisation des OID comme clé primaire dans une base de données postgreSQL / PostGIS est une mauvaise pratique car il existe des cas où ceux-ci peuvent être réinitialisés. Cela semble logique, mais alors quelle est une alternative appropriée? Je crois qu'il existe une option pour utiliser un UUID "Universal Unique Identifer", mais la grande valeur de texte et de nombre qui crache est horrible.
Juste un peu plus d'informations sur ma situation. J'ai toutes mes tables spatiales créées avec un champ appelé "gid" qui est la clé primaire de cette table et unique uniquement à cette table. J'ai un problème maintenant parce que je veux associer mes tables spatiales (toutes avec un champ "gid" commençant à 1 et incrémentant) à une grande table avec les informations associées. Évidemment, pour que ma relation fonctionne, toutes mes caractéristiques spatiales ont besoin d'un identifiant unique qui les différencie les unes des autres.
EDITÉ Ajouté cette image selon le commentaire de Peters. Peter, c'est l'idée que j'ai dans ma tête, ce n'est peut-être pas la meilleure façon de procéder ou ce n'est peut-être même pas un bon design de base de données. Je suis intéressé par ce que vous pensez.
Des conseils?
I believe there is an option to use a "Universal Unique Identifer" UUID, but the large text and number value that spits out is horrible.
Pourquoi est-ce important à quoi ressemble l'ID unique?Réponses:
Je voudrais créer des tableaux intermédiaires séparés
buildings_attach
,parcels_attach
etc. Ensuite , vous n'avez pas besoin d' un identificateur global.la source
Deux solutions:
1) Créez une séquence unique et faites en sorte que toutes les tables utilisent cette séquence, cela peut être fait depuis le début ou vous pouvez créer une colonne ID et mettre à jour vos tables maintenant.
Pour créer la séquence:
Puis un tableau:
Pour mettre à jour un champ d'ID de table existant avec de nouveaux ID (faites-le pour toutes les tables que vous souhaitez suivre la même séquence):
2) L'autre solution: créez une séquence temporaire et exécutez la requête en créant une nouvelle colonne ID.
Plus ici: http://www.postgresql.org/docs/8.4/static/sql-createsequence.html
la source
La meilleure option est l'UUID ou le GUID. Ils sont construits pour cette raison, uniques au monde, quelle que soit la table. Laid? Oui mais ils sont les meilleurs pour cette situation.
Voir /programming/294933/generate-unique-id-to-share-with-multiple-tables-sql-2008
J'ai vu des méthodes où les gens utilisent les données de la table pour faire des identifiants, par exemple col1 + somestring + col2, je m'y opposerais vraiment (voir ici ). Les identifiants intelligents sont une très mauvaise idée.
la source
Bonjour
Pourquoi ne prenez-vous pas l'identifiant de la grande table et ne placez-vous pas les tables spatiales à la place?
Si une ligne dans l'une des tables spatiales se rapporte à plusieurs lignes dans la grande table, je vois le problème, sinon l'ID de la grande table devrait être suffisant, ou suis-je en train de manquer quelque chose.
/ Nicklas
la source