Hallo Matthias,
hier übersetzt du falsch (oder anders gesagt: bist um 90° daneben):
Sollte es keine leere Zelle mehr geben, soll eine neue Zeile erstellt werden. hat jedes Attribut des entsprechenden Datensatzes einen Wert, so soll ein neuer Datensatz erstellt werden,
D.h. du betrachtest das horizontal (innerhalb eines Satzes). Gemeint ist das nach meiner Deutung aber vertikal, also so:
hat dieses Attribut in allen Datensätzen bereits einen Wert, so soll ein neuer Datensatz erstellt werden.
Ich kann natürlich nicht ausschließen, dass ihr schon längst die ganze Betrachtung um 90° gedreht habt und ich das nicht bemerkt habe.
Wie auch immer: ich habe MH so verstanden. Er überträgt im Prinzip eine Papierliste nach SQL. Die Papierliste hat einige Spalten (die Namen), und unter jeden Namen sollen beliebig viele Werte geschrieben werden können.
Mal angenommen, Fridolin
hat 3 Werte. Dann soll die DB 3 Zeilen haben. Solange kein anderer Name mehr als 3 Werte bekommt, bleibt es bei 3 Zeilen. Bekommt irgendein Name seinen vierten Wert, wird eine neue Zeile gebraucht und es ist ein INSERT fällig.
KANN man so machen, ist aber ineffizient (Aufzählung der Anomalien in meinem Beitrag von heute 21:43 Uhr) und nicht idiomatisch für eine relationale DB.
Korrekt wäre mMn eine Tabelle mit den Spaltenüberschriften (und einer Spalten-ID) - damit man im DB-Modell nicht auf eine bestimmte Anzahl von Namen festgelegt ist. Und dann eine Tabelle mit Spalten-ID und Wert, wo zu einer Spalten-ID beliebig viele Werte vorkommen können. Wenn eine Ordnung gebraucht wird, kann man noch eine laufende Nummer oder ein Zugangsdatum hinzufügen. Alles andere, was ich hier bisher gesehen habe, war weit weg von dem, was ich in Datenmodellierung gelernt habe. Oder ich hab's nicht kapiert - das ist immer die Default-Option 😉.
Rolf
Dosen sind silbern