# Externe IDs speichern - Tabellenaufbau



## OnDemand (10. Jul 2021)

Guten Morgen,

hab folgendes "Problem" grad. 

Ich hab in meiner Datenbank hundertdausende Datensätze, welche zu externen Portalen geschoben werden. Angenommen wir haben Schuhe, welche zu Ama*n, E*ay und anderen Plattformen geschickt werden. 

Jede Plattform liefert dann eine ID des Artikels zurück die wir speichern.  Nun liefert aber eine Plattform Long zurück, eine andere Integer und noch eine andere UID (String)

Am liebsten und einfachsten wäre ja folgende Struktur um die Daten zu speichern (Dummy)

table platform_id_mapping
int id
int schuh_id
int external_id
int platform_id

geht aber nicht, weil ja external_id long, string oder int sein kann.

1. Überlegung ist die spalte als String zu machen und dann im Code entsprechend in Long, Integer zu convertieren.
2. Überlegung ist je plattform eine eigene Tabelle

Habt ihr noch ne Idee? gibts vielleicht noch ein Datenformat was ich nicht bedacht habe und nutzen könnte?


----------



## Thallius (10. Jul 2021)

Warum willst du den String denn wieder nach Long konvertieren? Mach doch einfach überall und alles als String.


----------



## kneitzel (10. Jul 2021)

Die erste Frage wäre, was für Operationen Du auf und mit den Daten vor hast. Ich selbst finde es nicht gut, Datentypen zu "verweichen". Du kannst es einfach als String speichern, dann passen da int, long, uuid, ... rein. Aber die Typsicherheit ist ggf. ein Problem (lässt sich aber ggf. auch mit Triggern noch abbilden...)

Wenn das aber alles ist, was Du brauchst an Informationen (und nicht noch Dinge wie Anzahl, min/max Preise u.s.w.), dann würde ich hier ggf. auch minimal bleiben und es einfach als String speichern (Wie @Thallius bereits vorgeschlagen hat).


----------



## Thallius (10. Jul 2021)

Wenn es nötig sein sollte nach der Id zu sortieren oder min/max etc zu finden kann du auch einfach dem int 10 Nullen voranstellen und danach auf die letzten 10 stellen kürzen beim konvertieren in den String. Dann geht das auch alles wieder


----------



## temi (10. Jul 2021)

Adapter?

Die DB speichert nur ein Format und die Kommunikation zu den Plattformen läuft über jeweils passende Adapter.


----------



## OnDemand (10. Jul 2021)

Wenn ich


Thallius hat gesagt.:


> Warum willst du den String denn wieder nach Long konvertieren? Mach doch einfach überall und alles als String.


Wenn ich dann als String zb ein PUT an die Plattform sende, wird es als String ausgegeben und in Anführungszeichen gepackt. Dann meckert die API, dass die ID fehlt


----------



## Thallius (10. Jul 2021)

Tja, dann hast du halt nur die Möglichkeit eine basisklasse zu erstellen und für jeden Anbieter davon zu vererben und die passende Id hinzuzufügen oder du trickst und speicherst die Id als String und hast ein weiteres Attribut welches dir angibt dass du es nach int konvertieren Must für den put request.


----------



## OnDemand (12. Jul 2021)

Thallius hat gesagt.:


> Tja, dann hast du halt nur die Möglichkeit eine basisklasse zu erstellen und für jeden Anbieter davon zu vererben und die passende Id hinzuzufügen oder du trickst und speicherst die Id als String und hast ein weiteres Attribut welches dir angibt dass du es nach int konvertieren Must für den put request.


so hab ich es in der Art gelöst. Ich weiss ja in dem entsprechenden Modul ob ich Long oder Integer braucht und kann entsprechend parsen. Das passt.


----------



## LimDul (12. Jul 2021)

Man muss ja eh zwischen interner Datenrepräsentation und externer Datenrepräsentation unterscheiden und dazwischen konvertieren. In den seltensten Fällen sind die 1:1 identisch.


----------

