Robert: Zusammenfassen zweier Tabellen, auto-increment mit negativen Werten

Hallöle,

folgende Situation:
MySQL 4.0.12

Zwei strukturell identische Tabellen, eine davon ist historisch, wird also nicht mehr geändert, die andere wird permanent erweitert.

Beim Abfragen ist es jetzt extrem lästig, immer beide Tabellen zu berücksichtigen.
Ich würde daher gerne die historische Tabelle in die andere integrieren.

Beide Tabellen haben eine id-Spalte (id INT auto_increment PRIMARY KEY), die jeweils ab 1 losgezählt wurde.
Diese id-Spalte wird in einer zweiten Spalte pid zur Realisierung einer Vater-Beziehung und in einer weiteren Spalte fid für die Familien-Beziehung genutzt (pid = 0 ==> keine Vorfahren, sonst steht der Papa drin - alle Nachkommen eines Datensatzes ohne Vorfahren haben dessen id in fid stehen)

Da in beiden Tabellen ab 1 losgezählt wurde, kann ich die Daten der historischen Tabelle also nicht direkt in die Live-Tabelle reinwerfen - das erlaubt der PRIMARY KEY ja gar nicht, und selbst wenn, wären die Verwandtschafts-Beziehungen durcheinander.

Beziehungen von außen auf die historische Tabelle bestehen nicht - im Gegensatz dazu bestehen auf die Live-Tabelle schon Beziehungen von außen.
Ich will also die ids der Live-Tabelle nicht verändern.

Meine Überlegung war jetzt, einfach in der historischen Tabelle erstmal die Spalten id, fid und pid per

UPDATE historical SET id = -id, fid = -fid, pid = -pid;

sämtliche Verwendungen der id ins negative umzukehren (die id-Spalten werden NUR für die Identifizierung und die Beziehungen verwendet, NICHT für Sortierungen)
(alternativ könnte ich natürlich auch statt der Vorzeichenumkehr eine Zahl größer als COUNT(*) abziehen von den Spaltenwerten - damit wären die Werte auch alle negativ und die Sortierung bliebe sogar noch erhalten, falls doch irgendwo nach der id sortiert würde)
Aber egal welche der beiden Methoden ich benutze, es kommen negative Werte für id, fid, pid raus.

Die Eindeutigkeit und die Zuordnungsfähigkeit innerhalb der historischen Tabelle bleibt dabei ja erhalten.

Die Frage ist aber:
Was passiert, wenn ich dann die Datensätze in die Live-Tabelle eintrage?

Gibt es dabei Probleme wegen der negativen Werte und des auto_increments der Spalte id?
Oder sollte das problemlos funktionieren?

TIA + cu,
Robert

  1. echo $begrüßung;

    Zwei strukturell identische Tabellen, eine davon ist historisch, wird also nicht mehr geändert, die andere wird permanent erweitert.

    Beim Abfragen ist es jetzt extrem lästig, immer beide Tabellen zu berücksichtigen.
    Ich würde daher gerne die historische Tabelle in die andere integrieren.

    Mal eine ganz andere Idee. Reicht es vielleicht die beiden SELECTs mittels UNION zu einer Abfrage zusammenzufassen?

    SELECT ID, ... FROM aktuell
    UNION
    SELECT -ID, ... FROM historisch

    echo "$verabschiedung $name"

    1. Hallöle,

      Zwei strukturell identische Tabellen, eine davon ist historisch, wird also nicht mehr geändert, die andere wird permanent erweitert.
      Beim Abfragen ist es jetzt extrem lästig, immer beide Tabellen zu berücksichtigen.
      Ich würde daher gerne die historische Tabelle in die andere integrieren.
      Mal eine ganz andere Idee. Reicht es vielleicht die beiden SELECTs mittels UNION zu einer Abfrage zusammenzufassen?

      SELECT ID, ... FROM aktuell
      UNION
      SELECT -ID, ... FROM historisch

      in einigen Fällen wäre das sicher ausreichend.
      Aber für einige Dinge nicht - z.B. max(spalte) oder Gruppierungen ...

      Von daher würd ich das schon gerne auf eine Tabelle reduzieren.

      Trotzdem Danke für Deinen Vorschlag.

      cu,
      Robert