newone_XXV. hat geschrieben:Mal eine Frage zu SQL wann sollte man das eigentlich lernen? Also bei welchen Arbeiten bietet es sich gut an SQL zu nutzen?
Hi newone_XXV.!
Man denkt am Anfang eines Programmprojektes manchmal gar nicht daran, welche Fragen später einmal auftauchen könnten. Wenn du deine Daten in einer durchdacht strukturierten Datenbank ablegst, kanst du die Fragen an die du heute noch gar nicht denkst, später trotzdem ziemlich sicher beantworten.
Du kannst deine Daten in Beziehung zueinander setzen. Du kannst oft benötigte Suchvorgänge durch gezielt angewendete Indexe beschleunigen.
Nehmen wir mal an, du verwaltest Adressen in Textdateien, die du in einem Ordner ablegst. Die Textdateien haben eindeutige Namen, die du aus dem Schema "nachname_vorname_zaehler.txt" gebildet hast. Es ist ziemlich einfach für dich, eine Adresse raus zu suchen, solange du den Nachnamen und evt. auch den Vornamen weißt.
Was aber ist, wenn du nur weißt, dass die Person die du suchst, im Vornamen "Franz" heißt und in der "Müllerstraße" wohnt? Du müsstest dir alle Textdateien öffnen und ansehen, die als Vornamen im Dateinamen den Text "franz" haben. Nehmen wir mal an, du hast alle Adressen der Stadt Berlin nach diesem Schema in Textdateien. Auch wenn du ein kleines Python-Programm schreibst, das dir die Textdateien öffnet und nachsieht, ob dort irgendwo "Müllerstraße" steht, wird das Programm ziemlich langsam sein.
Du könntest dir die wichtigsten Daten, nach denen du häufig suchst, in eine oder mehrere Textdateien schreiben und dich darum kümmern, dass dort die Suchworte alphabetisch sortiert drinnen stehen und mit einem Verweis zur Textdatei, in der die Adresse steht, versehen sind. Dann hättest du einen Index, der deine Suche beschleunigt.
Allerdings müsstest du dich auch wieder selber darum kümmern, dass diese Indexe ständig aktuell gehalten werden. Außerdem stört es dich, dass du jede Suche "programmieren" musst. Dann entwickelst du eine einfache Syntax für deine Suchanfrage. --> Fertig ist deine kleine Datenbank. Ziemlich viel Aufwand für etwas, was zum Basis-Funktionsumfang heutiger relationaler Datenbanken gehört. Hättest du also schon ganz am Anfang, als du noch nicht wusstest, wie groß dein Programm wird, auf eine SQL-Datenbank gesetzt, dann hättest du dich nie um das alles kümmern müssen.
Um deine Adressen in einer Datenbank ablegen zu könnten, hättest du nur eine "Tabelle" für die Adressen anlegen müssen. Beim Erstellen einer solchen Tabelle, gibtst du auch gleichzeitig mit an, welche Daten du in der Tabelle verwalten möchtest. Z.B. "vorname", "nachname", "strasse", "hausnummer", "stiege", "stockwerk", "top", "plz", "ort", usw.
Die Tabelle, die dabei entsteht, verwaltet deine Daten strukturiert. Jede Adresse steht dann in einer Zeile und die Orte stehen alle in einer Spalte untereinander. Die Vornamen auch -- usw. Dadurch ist es auch einfacher, diese Daten gezielt wieder aus der Tabelle heraus zu suchen.
Die ganze Datenbank mit ihren Daten kannst du mit der einfach gehaltenen Anweisungssprache SQL (Structured Query Language) aufbauen, mit Daten befüllen, Daten löschen und suchen.
Das Erstellen einer Tabelle, könnte so aussehen:
Code: Alles auswählen
CREATE TABLE adressen (
id INTEGER PRIMARY KEY, # kennzeichnet jede Adresse mit einer eindeutigen Zahl
vorname VARCHAR(50),
nachname VARCHAR(50),
...
)
Das Befüllen der Adressen-Tabelle könnte so aussehen:
Code: Alles auswählen
INSERT INTO adressen (
vorname,
nachname,
strasse,
...
)
VALUES (
'Gerold',
'Penz',
'Pfarrer-Leuprech-Weg',
...
)
Um alle Personen mit dem Nachname Franz, die in der Müllerstraße leben, mit einer SQL-Abfrage heraus zu bekommten, könnte diese in etwa so aussenen:
Code: Alles auswählen
SELECT
vorname, nachname, strasse
FROM
adressen
WHERE
(vorname = 'Franz') AND
(strasse = 'Müllerstraße')
Das waren so die wichtigsten SQL-Anweisungen. So schwer ist SQL also auch wieder nicht. Hier noch auf "Deutsch": Zeige mir die Felder "vorname", "nachname" und "strasse", der "Tabelle" "adressen", in denen der Vorname "Franz" ist und in denen gleichzeitig als Straße "Müllerstraße" steht.
Du bekommst in Python normalerweise bei solchen Abfragen eine Liste zurück. In dieser Liste ist dann je ein Tuppel für eine Adresse.
Code: Alles auswählen
ergebnis = [
("Franz", "Meier", "Müllerstraße"),
("Franz", "Mustermeier", "Müllerstraße"),
]
Dieses Ergebnis lässt sich dann leicht weiterverarbeiten.
Fazit: Eine Datenbank erleichtert dein Leben als Programmierer enorm. Auch wenn es verlockend erscheint, Daten in einem Dictionary oder einem "shelve"-Objekt zu verwalten. Sobald man Daten nicht nur über einen Schlüssel (wie z.B. einem Dateinamen oder einem Dictionary-Key) wieder finden möchte, sollte man sich überlegen, die Daten in einer Datenbank aufzubewahren. Als Python-Programmierer möchte ich dir dafür ganz besonders SQLite ans Herz legen, da SQLite ab Python 2.5 schon von Haus aus mitgeliefert wird. Es ist ziemlich stabil und "sauschnell".
Siehe auch in diesem Beitrag (weiter unten):
http://www.python-forum.de/topic-6157.html
mfg
Gerold