Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:ffprg2-2023:sqlite [2023/09/01 14:41] – [Mögliches Datenbankschema für ein Wörter-Lernprogramm] Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg2-2023:sqlite [2023/09/27 07:40] (current) – [Kommandozeile] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== SQLite ====== | ||
| + | SQLite ist eine einfache dateibasierte Datenbank. Die Dateien sind zwar binär, können aber auch der Kommandozeile bearbeitet werden. Für die unsigen Anwendungen ist SQLite mehr als performant genug. | ||
| + | |||
| + | Links: | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | ===== Kommandozeile ===== | ||
| + | Empfehlung: legen Sie die Datei '' | ||
| + | <code text> | ||
| + | .headers on | ||
| + | .mode column | ||
| + | PRAGMA foreign_keys = ON; | ||
| + | </ | ||
| + | |||
| + | Die Datenbank kann auf der Kommandozeile abgefragt und manipuliert werden (dazu verbinden Sie sich am besten auf den OFI-Server). | ||
| + | <code txt> | ||
| + | sqlite3 scores.sqlite | ||
| + | create table scores(name text not null default " | ||
| + | insert into scores values ("Hans Wurst", | ||
| + | insert into scores values (" | ||
| + | insert into scores values (" | ||
| + | select ROWID,* from scores; | ||
| + | select * from scores order by score desc; | ||
| + | update scores set name=" | ||
| + | select * from scores order by score desc; | ||
| + | .quit | ||
| + | </ | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Dump der Datenbank im Text-Format: | ||
| + | <code bash> | ||
| + | echo -e " | ||
| + | </ | ||
| + | Wiederherstellung: | ||
| + | <code bash> | ||
| + | sqlite3 copy.sqlite < scores.dump | ||
| + | </ | ||
| + | |||
| + | ===== High-Score-Datenbank ===== | ||
| + | Idee: PHP-Datei macht die Verbindung zwischen JS im Browser und SQLite auf dem Server. Die PHP-Datei liefert immer JSON, wenn es ein JSON-String ist, ist es eine Fehlermeldung. Ansonsten werden Objects für einzelne Werte oder Arrays mit Objects zurückgegeben. | ||
| + | |||
| + | * PHP-Code: {{lehrkraefte: | ||
| + | * HTML/JS auf https:// | ||
| + | |||
| + | |||
| + | ===== Datenbank-Design ===== | ||
| + | SQL-Datenbanken sind in Tabellen organisiert, | ||
| + | <code bash> | ||
| + | create table scores(id int primary key, name text not null default " | ||
| + | </ | ||
| + | |||
| + | Daten sollten nicht mehrfach in einer Datenbank gespeichert sein. Ein typisches Beispiel könnte sein die Kombination von PLZ und Ort, wenn man Adressen speichert. | ||
| + | |||
| + | |||
| + | ==== Mögliches Datenbankschema für ein Wörter-Lernprogramm ==== | ||
| + | **Sprachen** | ||
| + | ^id INT^sprache TEXT^ | ||
| + | |1|Deutsch| | ||
| + | |2|Französisch| | ||
| + | |||
| + | |||
| + | **Wortpaare** | ||
| + | ^id INT^wort1 TEXT^langid1^wort2 TEXT^langid2^ | ||
| + | |42|ein Haus|1|une maison|2| | ||
| + | |23|eine Maus|1|une souris|2| | ||
| + | |63|ein Lächeln|1|un sourire|2| | ||
| + | |||
| + | |||
| + | **Autoren** | ||
| + | ^id INT^name TEXT^|...| | ||
| + | |12|Hans Wurst|...| | ||
| + | |||
| + | **Wortlisten** | ||
| + | ^id INT^name TEXT^idauthor INT^ | ||
| + | |3|Franz Voki|12| | ||
| + | |||
| + | **Zuordnungstabelle** | ||
| + | ^idliste INT^idpair INT^ | ||
| + | |3|42| | ||
| + | |3|63| | ||
| + | |||
| + | ==== SQL-Code ==== | ||
| + | Anlegen der Datenbank | ||
| + | <code sql> | ||
| + | PRAGMA foreign_keys=ON; | ||
| + | CREATE TABLE langs(id integer primary key, lang text); | ||
| + | CREATE TABLE pairs(id integer primary key, word1 text not null, | ||
| + | CREATE TABLE authors(id integer primary key, name text not null); | ||
| + | CREATE TABLE wordlists(id integer primary key, name text not null, idauthor integer, foreign key(idauthor) references authors(id)); | ||
| + | CREATE TABLE pairlist(idlist int, idpair int, foreign key(idlist) references wordlists(id), | ||
| + | </ | ||
| + | |||
| + | Befüllen mit Werten | ||
| + | <code sql> | ||
| + | insert into langs (lang) values (" | ||
| + | insert into pairs (word1, idlang1, word2, idlang2) values ("ein Haus", 1, "une maison", | ||
| + | insert into authors (name) values ("Hans Wurst" | ||
| + | insert into wordlists (name, idauthor) values (" | ||
| + | insert into pairlist (idlist, idpair) values (1,1), (1,2), (2,2), (2,3); | ||
| + | </ | ||
| + | |||
| + | Beachten Sie, dass die Abfrage | ||
| + | <code sql> | ||
| + | insert into pairs (word1, idlang1, word2, idlang2) values (" | ||
| + | </ | ||
| + | mit der Fehlermeldung '' | ||
| + | |||
| + | Auch ist es nicht möglich, z.B. eine Sprache zu löschen, so lange diese referenziert wird: | ||
| + | <code sql> | ||
| + | delete from langs where id==2; | ||
| + | </ | ||
| + | Was aber natürlich funktioniert ist folgendes: | ||
| + | <code sql> | ||
| + | insert into langs (lang) values ("St. Galler Deutsch" | ||
| + | select * from langs; | ||
| + | delete from langs where id==3; | ||
| + | </ | ||
| + | Es wäre möglich, **beim Anlegen** der Tables bei den foreign keys die Option '' | ||
| + | |||
| + | |||
| + | Abfragen: | ||
| + | <code sql> | ||
| + | .headers on | ||
| + | .mode column | ||
| + | select * from pairs; | ||
| + | select word1, word2 from pairs; | ||
| + | select word1, word2 from pairs inner join pairlist on pairs.id==pairlist.idpair where pairlist.idlist==2; | ||
| + | select authors.name, | ||
| + | select name from wordlists where idauthor==1; | ||
| + | </ | ||
| + | |||
| + | Siehe auch: https:// | ||
| + | |||
| + | |||
| + | ==== php-Code ==== | ||
| + | |||
| + | {{lehrkraefte: | ||