====== LU03c - Projekt 1: freeDB ====== ===== Einleitung ===== Der Grundgedanke des Innovationsmodul II ist es eine Innovation vorzubereiten und den Nachweis zu bringen, dass diese grundsätzlich möglich ist. Gemäss Definition ist unter dem Begriff Innovation //eine neue Idee/Produkt// oder //eine neue, bessere Zusammensetzung von Komponenten oder Prozessen// zu verstehen. ===== Ausgangslage ===== Datenbanken gibt es sehr viele auf dem Markt, die meisten sind bezüglich der Lizenzierung für Privatpersonen kostenlos. Zudem gibt das Thema //Offenlegung des Sourcecodes// immer wieder Grund zur Diskussion bei Unternehmen. Dieses Projekt soll das Prinzip der Datenbank neu denken und die Themen //Lizenzierung// und //Openbsource//" neu definieren. D.h. das Projekt ist als OpenSource-Projekt durchzuführen, was bedeutet, dass auch Unternehmen keine Lizenzgebühren zahlen müssen. ===== Projektauftrag freeDB ===== //Re-Programmieren// Sie die CRUD-Operationen einer Datenbank unter Verwendung eines Standard-Befehlssatzes einer Programmier- oder Scriptsprache (Python, BASH, ...). Achten Sie darauf, dass jedes Teammate für einen ASPEKT der CRUD-Operationen zuständig ist. Sprich Person A erledigt das CREATE, eine andere Person das READ, etc. ===== Befehlsreferenz C = Create ===== - CREATE Table bzw. CREATE TABLE IF NOT EXITSTS - Separate Files anlegen für mit Tabellenstruktur und Tabelleninhalt, erkennbar an der Endung - Falls File vorhanden ist  entsprechende Fehlermeldungen ausgeben lassen - INSERT INTO TABLE - Prüfen, ob Tabellen und genannten Spalten vorhanden sind. - Zeile am Ende des Files dranhängen - Gesamten Fileinhalt Sortierten nach der 1. Spalte (ID)   ===== Befehlsreferenz R = Read ===== - SELECT count(*) - AWK auf Datenfile - Alternativ wc (Wordcount) verwenden - SELECT * FROM - Fehlermeldung, wenn Tabellen nicht existiert - Gesamter Inhalt der Tabelle wird ausgegeben - SELECT nach Spalten - SELECT Spalte1, Spalte2, Spalte3 FROM Tabelle - Wenn Spalte nicht existiert, Fehlermeldung. - SELECT mit WHERE - SELECT * FROM Tab WHERE ID=15 - GREP kombiniert mit AWK - Spalte auswählen, die gefiltert werden soll und darauf den GREP anwenden  RegEx - Die betroffene Zeile ausgeben lassen - SELECT mit JOIN (zweiter Entitätentyp) - Gemeinsamer Schlüssel zwischen zwei Tabellen - Treffermenge beider Tabellen ausgeben gemeinsam Ausgeben lassen - SELECT mit Bedingung/WHERE (z.B. Gehalt > 10'000) - SELECT MIT AWK - Spaltenwert muss Vergleichbar sein - SELECT mit LIKE - SELECT MIT AWK und GREP ===== Befehlsreferenz U = Update ===== - UPDATE TABLE WHERE ID=?? - Zeile finden herauslesen - Mittels RegEx Zeile aktualisieren - ALTER TABLE - In Tabellendefinition prüfen, ob die Spalte schon vorhanden ist - Wenn nicht, Spalte am Ende anhängen - Datenfile mit Leeren Kommas füllen am Ende auffüllen ===== Befehlsreferenz D = Delete ===== - DELETE FROM TABLE - AWK mit GREP kombiniert - grep -v suchmuster originaldatei > tempdatei - mv tempdatei originaldatei - DROP TABLE - rm-Befehl ===== Zusatz ===== - INDEXIERUNG (Sortierung der Tabelleninhalte) - Select auf eine String-Spalte, die unsortiert ist (Like «demi%) - Schattentabellen mit entsprechend Sortiert Spalte anlegen - Gleiche Abfrage auf die Schattentabelle - Zeit vor der Indexierung und Zeit nach der Indexierung stoppen - https://wiki.ubuntuusers.de/Skripte/Stoppuhr/ - Fonetische Suchen via Soundex - Hierbei geht es eine Klang-Suche anstatt nach Wörtern. - SoundEx ermöglicht das Auffinden von Inhalten mit anderen Schreibweisen. - https://gist.github.com/livibetter/1997957 - https://de.wikipedia.org/wiki/Soundex