How to change the string ids with integer ids?

denismrimg

Neuer Benutzer
Beiträge
3
I would like to use an extension, which does not work with STRING or CHAR Ids. I have already a .sql-Script to create all the tables and all .backups for these tables, which have some columns with string ids.
The idea is to load the tables with the values and then to add a new column with Unique INT Ids for every String id. There are some same values of string ids in some tuples, that's why I can't create a new serial int.

How is it possible to solve this problem?

Thank you!
 
Werbung:
This is a german speaking forum.
I think it doesn't matter which kind of numeric ID.
What kind of tuples, tuples in one column or one column per tuple?
Tuple as foreign key or as primary (or none at all)?
If You don't think about plain conversion of just wrong typed string columns to number, I assume the original values are alphanumeric.

rough idea
You might start with creation of one (perhaps some more) sequence and use it for correlated updates of the columns, which are primary keys. Afterwords fill the depending FK if any, including tuples.

--
Ich denke, es spielt keine Rolle, welche Art von numerischer ID.
Welche Art von Tupel, Tupel in einer Spalte oder eine Spalte pro Tupel?
Tupel als Fremdschlüssel oder als Primärschlüssel (oder gar keiner)?
Wenn es nicht um die einfache Konvertierung von falsch typisierten String-Spalten in Zahlen geht, gehe ich davon aus, dass die ursprünglichen Werte alphanumerisch sind.

Grobe Idee
Du könntest mit der Erstellung einer (vielleicht auch mehrerer) Sequenzen beginnen und diese für correlated updates der Spalten verwenden, die Primärschlüssel sind. Danach die abhängigen FK, falls vorhanden, einschließlich der Tupel.
 
Ach, ich entschuldige mich. Das ist sogar einfacher. Unter "tuple" meinte ich eine Zeile mit Werten. Ich brauche also einen Befehl, der eine neue Spalte der Datentyp - INT (sequential) - erstellt und jede neue Zahl nur einem String Id entspricht. Ich habe eine dense_rank Funktion gefunden, aber nur fuer Select Anweisungen.
 
Ich verstehe nicht, was Du vorhast.
An sowas hatte ich gedacht (ist Postgres, sollte so oder sehr ähnlich auch in SQL Server laufen)
 
Könnten wir in whatsapp oder telegram sprechen? Da könnte ich meine Situation besser beschreiben. Das ist ein Teil meiner Projektarbeit, deswegen ist es so bedeutsam für mich.

Falls nicht: Es gibt eine Spalte (Datentyp varchar(30)), aber die genutzte Erweiterung funktioniert nicht mit Strings. Ich hatte eine Idee, die Spalte durch eine neue (mit Datentyp INT) zu ersetzen. Das Problem ist: Die String Spalte ist nicht unique, also die gleichen Werte können mehrmals vorkommen.
 
Werbung:
Naja, die Idee eines Forums ist, dass alle was davon haben.
Wenn die Originalspalte nicht unique ist. soll die numerische Variante das abbilden, also eine eindeutige Zuordnung liefern?

Wenn ja, brauchst Du eine Hilfskonstruktion, in die Du alle alphanumerischen Werte unique befüllst und dort dann einen numerischen Zwilling für jeden alphanumerischen Wert bildest. Wie ist -nach meinem jetzigen Verständnis- vollkommen egal. Im Prinzip wäre die Hilfskonstruktion ziemlich genau das, was ich oben im Beispiel gezeigt habe.

Auf Basis der Hilfstabelle erzeugst Du ein Update für die eigentliche, neue Zielspalte.

aus
abc
def
abc
ghi

wird dann
abc, 1
def, 2
abc, 1
ghi, 3

usw.

Der Pferdefuß an dem Ganzen würde allerdings die fehlende Eindeutigkeit in der späteren Verwendung sein. Den gibt es allerdings auch ohne die Erweiterung auf Int Spalten. Wie will man mit nicht eindeutigen Werten in einer Datenbank arbeiten?
Der Pferdefuß wäre allerdings nicht so problematisch, wenn es nicht um online Transaktionen geht, sondern nur einen Datenhaufen, der auszuwertden ist.
 
Zurück
Oben