Warum nicht einfach Key, Value, Position? Im Key steht der Header, im Value der Wert und die Position ist eine fortlaufende Nummer, die mit “1” beim ersten Header anfängt.
Ach so, achte da drauf, dass es ein “From:” und ein “From” gibt
Warum machst du nicht pro Header einen Datensatz in der gleichen Tabelle?
create table mails(eid bigserial not null primary key, eidtime timestamp with time zone default now());
create table header(eid bigint not null references mails(eid), header_key text, header_value text);
Ganz, ganz schlechte Idee, weil das nicht skaliert: bei jedem neuen Header hast Du Dein Tabellen-Design anzupassen, ganz böse. Die besseren Lösungen hast Du ja schon genannt bekommen.
Manomann manchmal ists das ei des Kolumbus ^^ Ihr habt recht. Denke als ich gesehen habe das es in pg arrays gibt bin ich da einfach ausgeflippt
Die position des headers wie es in der email gewesen ist ist unrelevant, sonst würde ichs machen wie ads es geschrieben hat. So reicht es wenn ich folgendes mache: ich löse das arrays feld in emails auf und mache die header table mit key, value, eid(FK)
Die Position des Headers ist nicht unrelevant. Ansonsten kannst du z. B. die Received Header, die in der Regel mehrfach vorkommen, nicht mehr eindeutig einordnen.
Andere Beispiele, die auf die Reihenfolge aufbauen, fallen dir sicher auch noch ein.
Nun, die Received-Header enthalten (oder sollten dies zumindest) einen Timestamp, mit dessen Hilfe man das natürlich noch nachvollziehen kann, aber Dein Einwand ist berechtigt.
Der Timestamp ist allerdings ein extern erzeugtes Datum. Warum sonst gibt es Spamfilter, die bei zu großen Abweichungen zuschlagen?
Das sollte man also nicht als Sortierkriterium heranziehen.
Weitere Beispiele: Einträge von Virenscannern oder Domain-Key Signaturen.
Generell ist es nützlich zu wissen, in welcher Reihenfolge die Header in der E-Mail standen.