Oh man. Ich glaube ich habe jetzt keinen Fehler ausgelassen, den man machen kann.
@Juliusvanvern: Der Entwurf sieht ja wirklich so aus als wenn da einfach eine Exceltabelle als Datenbanktabelle angelegt wurde. Das `_west` im Tabellennamen riecht komisch. Gibt es denn noch mehr Tabellen mit dem gleichen Aufbau aber anderen Namen? Beispielsweise `kunde_ost`? Dann ist das schon mal falsch, weil da dann Daten im Tabellennamen kodiert sind. Daten gehören aber *in* Tabellen als Spalte. Wenn man dann nur die Kunden West haben will, fragt man die entsprechend ab.
Ja in der Tat. Ich habe einfach alle Tabellen-Spalten aus der Excel in eine Datenbank übertragen. So in meinem nicht mehr ganz so Jugendlichen Leichtsinn.
Präfixe die noch mal den Tabellennamen wiederholen gehören nicht in Spaltennamen. Abkürzungen sollte man in Namen in Datenbanken im Grunde genau so wenig verwenden wie bei Namen in Programmen. Am besten benennt man so wie es dann auch im Programm heissen würde, das macht die Verwendung eines ORMs deutlich einfacher wenn man da dann nicht noch mal alle möglichen Namen auf andere Namen abbilden muss.
Klingt logisch, werde ich mir merken und umsetzen.
Telefonnummern sind keine ganzen Zahlen. Führende 0en kann man dann nicht speichern und es können auch noch andere Zeichen in Telefonnummern vorkommen, beispielsweise wenn man eine Nummer mit optionaler internationaler Vorwahl und einer Durchwahl hat, wird das ja oft nach so geschrieben: „+49 (0)30 1234 4567-1“.
Sollte ich das dann unter Sqlite3 als TEXT oder BLOB speichern?
Bei den `seen_`-Spalten habe ich den starken verdacht die Enden von den Namen irgendwelche Abkürzungen sind. Das sollte man vermeiden. Und das ist natürlich als Spalten ziemlich starr. Sollte da irgendwann mal etwas dazu kommen oder weg fallen, dann würde ich das wie schon im letzten Beitrag geschrieben in zwei Tabellen heraus ziehen: eine mit Informationsarten, und eine die aufnimmt welcher Kunde welche Informationsart bereits gesehen hat.
Mit einer zweiten Tabelle, die nur Informationsarten bereit hält, hast du eigentlich recht. Dann wäre eine Tabelle mit den Kunden Stammdaten vorgesehen und eine zweite für etwaige weitere Informationen. Klingt gut.
Die Bestellungsinformation sieht auch nach einem Kandidaten für eine eigene Tabelle aus. Es sei denn es kann tatsächlich nur eine Bestellung zur gleichen Zeit geben und es sollen tatsächlich keine historischen Daten aufgezeichnet werden. Das gleiche gilt für Termine.
Die Information der Bestellung, soll mir nur anzeigen, wann tatsächlich die letzte Bestellung gewesen ist. Hier soll dann später noch angezeigt werde, wenn eine gewisse Zeit überschritten ist, dass das Feld dann zb Rot wird. Um bei dem Kunden zb noch einmal anzufragen, ob alles in Ordnung ist usw..
`rv` und `wdv` sind kryptische Abkürzungen. Bei `bundesweit` hätte ich jetzt auf ein BOOLEAN getippt — was ist denn da der Freitext?
Das sind eigentlich nur die Art der Verträge die der Kunde hat. Da es hier mehr als zwei Optionen als Auswahl geben wird, kann man in dem Fall nicht mit 0/1 arbeiten.
Durchnummerierte Spaltennamen sind ähnlich wie durchnummerierte Variablennamen: ein Zeichen das man sich entweder bessere Namen ausdenken will oder die Spalten eigentlich als Datensätze in eine eigene Tabelle gehören.
Ja das stimmt, hier werde ich die Art der Aktion als Benennung vornehmen.
So einige von den Spalten könnten auch ein NOT NULL vertragen.
Das stimmt, Theoretisch wären ja alles außer die Kundenstammdaten "Optionale" Informationen bzw Werte.
Ich würde an Deiner Stelle als allererstes mal klären ob Du das nicht vielleicht als Webanwendung mit Django machen willst. Webanwendung heisst nicht zwangsläufig Server, weil man die ja auch lokal auf einem Rechner laufen lassen kann. In dem Fall müsstest Du Dich nämlich mit dem Django-ORM auseinandersetzen.
Sagt mir erst einmal so nix, müsste ich mir mal anschauen.
In jedem anderen Fall würde ich wie gesagt SqlAlchemy und da auch dessen ORM verwenden und gar nicht erst anfangen SQL als Zeichenketten per Hand zu schreiben.
ORM befreit einen schon mal von der festlegung auf nur ein DBMS, weil man dann auch recht einfach auf PostgreSQL, MariaDB, MySQL, oder andere vom ORM unterstützte DBs umsteigen kann wenn das mal wachsen sollte.
Ja das müsste ich mir auch erst noch anschauen.
Du hast da einen Pfad mit \ angegeben. Das funktioniert nur auf Windows. Das Programm macht jetzt aber nicht den Eindruck als wenn es sehr Windows-spezifisch ist. Mit dem `pathlib`-Modul kann man das auch platformunabhängig lösen.
Danke für den Tipp. Wusste ich nicht. (wie so vieles)
\ um Zeilen im Quelltext fortzuführen sind nicht so toll. Die Kommentare machen das beispielsweise kaputt, das geht so nicht. Selbst ein einzelnes Leerzeichen nach einem \ am Zeichenende ist ein Fehler den man nicht so leicht sieht. Für so etwas würde ich entweder ausnutzen das logische Zeilen erst zuende sind wenn alle geöffneten Klammern auch wieder geschlossen sind plus das Zeichenkettenliterale die nur durch „whitespace“ getrennt sind, vom Compiler zu einer Zeichenkette zusammengesetzt werden. Oder man verwendet mehrzeilige Zeichenkettenliterale die in """ (oder ''') eingefasst sind.
Ja dieser Kommentar steht auch nicht im Code, ich habe nur aufzeigen wollen, wo die Infos zu den Checkboxen rein sollen.
Die Aufteilung Deiner Tests sind IMHO nicht gut. Datenhaltung und Benutzerinteraktion sind im Grunde an komplett entgegengesetzen Enden. Informationen speichern und laden, und Informationen dem Benutzer präsentieren und vom Benutzer abfragen sind unabhängig voneinander. Du vermischst hier also auch zwei Fragen und bei beiden hat Dein erstes Beispielprogramm Probleme die man unabhängig voneinander lösen kann/muss. Wenn die beiden Teilprobleme gelöst sind, *dann* kann man die zu einem Programm zusammenfügen.
Ja das stimmt, sehe ich ein. Mein Beispielprogramm ist einfach zu gekürzt.
@Sirius3 Auch dir Danke für die Infos. Ich denke das ich deine Einwände mit dem oben geschriebenen mit abgedeckt habe.
Noch eine Verständnisfrage um noch einmal auf die Eingangsfrage zurück zu kommen. Wenn ich die Information, ob eine Checkbox angehakt ist oder nicht, in eine Datenbank schreiben möchte, könnte man doch die Information vorher in einen String umwandeln und dann diesen in die DB Schreiben. So das zb nur JA oder NEIN in der DB steht. Und beim auslesen kann man es ja wieder umwandeln. Aktuell mache ich das nämlich in VB auch so.
Code: Alles auswählen
If CheckBoxIbau = True Then Cells(zeile, 5) = "JA"
If CheckBoxIbau = False Then Cells(zeile, 5) = "NEIN"
Würde das in dieser Richtung funktionieren und wäre es später nicht besser damit zu arbeiten?
Vorab noch einmal vielen Dank für die ganzen Konstruktiven Vorschläge, ich versuche entsprechend alles umzusetzen. Vielen lieben Dank