Wenn eine Datei nicht mehr reicht
Wenn der Katalog sich selbst widerspricht
Angenommen, Riley leiht einen Akkubohrer aus. Das Verleihprogramm fügt seiner CSV-Datei eine Zeile hinzu und kopiert Rileys Namen und E-Mail-Adresse in diese Zeile.
Einige Wochen später ändert Riley die E-Mail-Adresse. Beim Ausleihen eines Projektors erhält der neue Ausleihvorgang die neue Adresse. Beim alten steht weiterhin die alte.
Jetzt enthält die Datei Folgendes:
| loan_id | item_name | member_id | member_name | member_email |
|---|---|---|---|---|
| 401 | Cordless drill | M-17 | Riley Chen | riley.old@example.com |
| 402 | Projector | M-17 | Riley Chen | riley.new@example.com |
Stell dir vor, du musst Riley eine Erinnerung schicken. Welche Adresse soll das Programm verwenden?
Das Problem liegt zwischen den Zeilen
Innerhalb der einzelnen Zeilen ist nichts offensichtlich kaputt. Beide Ausleihnummern sind vorhanden, jede Zelle hat einen Wert, und beide E-Mail-Adressen sehen gültig aus. Eine Prüfung, die immer nur eine Zeile untersucht, könnte beide akzeptieren.
Der Widerspruch erscheint erst, wenn du die Zeilen zusammen betrachtest. M-17 bezeichnet zweimal dasselbe Mitglied, aber die beiden Kopien seiner E-Mail-Adresse stimmen nicht überein.
CSV hat genau das gespeichert, was das Programm geliefert hat. Die Schwierigkeit liegt darin, dass eine Tatsache über Riley in jeden Ausleihvorgang kopiert wurde. Eine Kopie zu ändern hat die anderen nicht geändert.
Dasselbe kann mit einem Gegenstand passieren. Wenn sein Name in jeden vergangenen Ausleihvorgang kopiert wird, musst du beim Umbenennen jede Kopie finden und hoffen, keine zu übersehen.
Warum können beide Zeilen zu Riley gültig aussehen, obwohl der Katalog nicht verlässlich ist?
Jeder Tatsache einen festen Platz geben
Was wäre, wenn Rileys aktuelle Angaben einmal gespeichert wären, zusammen mit der Mitglieds-ID M-17? Ein Ausleihvorgang könnte dann auf dieses Mitglied verweisen, statt eine weitere Kopie von Name und E-Mail-Adresse zu enthalten. Auch die Angaben zu Gegenständen könnten einen eigenen Platz bekommen.
Für solche Aufgaben ist eine relationale Datenbank gemacht. Sie kann Mitglieder, Gegenstände und Ausleihvorgänge getrennt speichern und dabei die Verbindungen zwischen ihnen bewahren.
Das macht CSV nicht zu einem schlechten Format. Eine CSV-Datei eignet sich weiterhin gut für eine Momentaufnahme, einen Export oder eine Liste, die ein Programm von oben nach unten liest. Das Verleihprojekt braucht etwas anderes, weil sich Mitglieder, Gegenstände und Ausleihvorgänge getrennt ändern können, aber weiterhin zusammenpassen müssen.
Du hast den Grund für den Werkzeugwechsel gefunden: Das Problem ist nicht mehr eine einzelne fehlerhafte Zelle, sondern mehrere Fakten, die verbunden bleiben müssen. Die Datenbank, die wir verwenden, ist SQLite. Vielleicht trägst du bereits Hunderte von SQLite-Datenbanken bei dir, ohne es zu wissen.