Hi!
Eine ClintID die jeder Client im Feld ID mit autoincrement vergibt, dann ein Feld HerkunftsID, wo jeweils die ID des Standortes bei jedem Insert gespeichert wird, und als drittes eine Kombination aus beidem, dann verzicht ich halt auf die paar Millisekunden Zeitvorteil wenn ich Integer abfrage, die Zeit geht normalerweise eh woanders verloren, aber wenn ich eine Varchar ID habe, also z.b.
3.12345
^ ^^^^^
| |
| +----- DatensatzID(Client)
+---- HerkunftsID
Welches Format(schreibweise und Spaltenformat) würdet Ihr für eine derarige ID empfehlen?
Keine Fliesskommazahl! - Das könnte bei grossen ID's ins Verderben führen, es sei denn, dass die Genauigkeit so hoch ist, dass er auch die 20'ste Stelle noch richtig "abbildet" und nicht rundet. Naja, ich würde eigentlich ein Char nehmen (Index bei Varchar ist lange nicht so effizient); beim Char die Länge 20 oder so. So ist auch der Index noch sehr effizient (anders eben bei Varchar, da hier nur eine "Referenz" verwendet wird und die eigentlichen Daten nicht im Record sind).
Also kein "." als Trennzeichen. Vielleicht ein "-" oder ein "/"? Aber meinst Du das ist so ein Problem? Wenn ich schreibe "WHERE ID = '3.1234123422' sollte das doch als String verstanden werden, zumal es sich ja um keine "Zahlenspalte" handelt! Hast Recht mit Char, das werde ich dann nehmen.
- ich begrenze nicht den ID-Raum
- ich behalte eine einzige Eindeutige ID
- ich kann das System beim nächten größeren Update rel. problemlos auf 2-IDs umstellen
Ich glaube, dass dies hinhauen könnte. Bei den Selects verwendest du dann die DatensatzID, oder? - HerkunftsID ist eine eigene Spalte mit Default-Wert und die Synchronisation bringt das dann in eine ID "CHAR-ID". Habe ich das so verstanden?
Also wie folgt, eine Tabelle hat 5 Spalten:
ID,ClientID,HerkunftsID,timestamp,Vorname(Spalte mit Daten)
ClientID ist mit autoincrement "ausgestattet",
HerkunftsID steht standardmäßig z.B. auf 3, für Standort 3
Jetzt füge ich so Daten ein:
"INSERT INTO tabelle SET ID=HerkunftsID"-"LAST_INSERT_ID(), Vorname = 'Hugo'"
vermutlich geht da so nicht ;-) aber so in der Art wäre es mir am liebsten. LAST_INSERT_ID() sollte die neu erzeugte ClientID sein, und HerkunftsID soll den Standardwert aus selbiger Spalte zurückgeben.
Dann habe ich zwar die Information doppelt in jeder Tabelle stehen, aber dafür die zusammengesetze ID in einer Spalte. So vermeide ich das ich immer 2 Spalten zur eindeutigen Indentifikation benötige, und ich umgehe das Problem mit der nachträglichen Aktualisierung der verknüpften Datensätze.
Grüße
Andreas
Viele Grüsse
Philipp