Ich habe gelesen, dass die Verwendung von OIDs als Primärschlüssel in einer PostgreSQL / PostGIS-Datenbank eine schlechte Praxis ist, da es Fälle gibt, in denen diese zurückgesetzt werden können. Klingt logisch, aber was ist dann eine geeignete Alternative? Ich glaube, es gibt eine Option zur Verwendung einer "Universal Unique Identifer" -UUID, aber der große Text- und Zahlenwert, der ausspuckt, ist schrecklich.
Nur ein bisschen mehr Hintergrund zu meiner Situation. Ich habe alle meine räumlichen Tabellen mit einem Feld namens "gid" erstellt, das der Primärschlüssel für diese Tabelle ist und nur für diese Tabelle eindeutig ist. Ich habe jetzt ein Problem, weil ich meine räumlichen Tabellen (alle mit einem "gid" -Feld, das bei 1 beginnt und inkrementiert) mit einer großen Tabelle mit den zugehörigen Informationen verknüpfen möchte. Damit meine Beziehung funktioniert, benötigen alle meine räumlichen Merkmale eine eindeutige Kennung, die sie voneinander unterscheidet.
BEARBEITET Dieses Bild wurde gemäß Peters Kommentar hinzugefügt. Peter, das ist die Idee, die ich in meinem Kopf habe. Es ist vielleicht nicht der beste Weg, das zu tun, oder es ist vielleicht nicht einmal ein gutes DB-Design. Ich interessiere mich für Ihre Meinung.
Irgendwelche Tipps?
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.
Warum ist es wichtig, wie die eindeutige ID aussieht?Antworten:
Ich würde erstellen Sie separate Vermittler Tabellen
buildings_attach
,parcels_attach
usw. Dann Sie keine globale Kennung benötigen.quelle
Zwei Lösungen:
1) Erstellen Sie eine einzelne Sequenz und lassen Sie alle Tabellen diese Sequenz verwenden. Dies kann von Anfang an erfolgen, oder Sie erstellen eine ID-Spalte und aktualisieren Ihre Tabellen jetzt.
So erstellen Sie die Sequenz:
Dann ein Tisch:
So aktualisieren Sie ein vorhandenes Tabellen-ID-Feld mit neuen IDs:
2) Die andere Lösung: Erstellen Sie eine temporäre Sequenz und führen Sie die Abfrage aus, wobei Sie eine neue ID-Spalte erstellen.
Mehr hier: http://www.postgresql.org/docs/8.4/static/sql-createsequence.html
quelle
Die beste Option ist die UUID oder GUID. Sie sind aus diesem Grund gebaut und weltweit einzigartig, egal an welchem Tisch. Hässlich? Ja, aber sie sind die besten für diese Situation.
Siehe /programming/294933/generate-unique-id-to-share-with-multiple-tables-sql-2008
Ich habe Methoden gesehen, bei denen Leute Daten aus der Tabelle verwenden, um IDs zu erstellen, z. B. col1 + somestring + col2. Ich würde wirklich wirklich davon abraten (siehe hier ). Intelligente IDs sind eine wirklich schlechte Idee.
quelle
Hallo
Warum nimmst du nicht die ID vom großen Tisch und stellst sie stattdessen in die räumlichen Tabellen?
Wenn sich eine Zeile in einer der räumlichen Tabellen auf mehrere Zeilen in der großen Tabelle bezieht, wird das Problem angezeigt. Andernfalls sollte die ID der großen Tabelle ausreichen, oder fehlt mir etwas.
/ Nicklas
quelle