Sonntag, 30. März 2014

März 2014 - SQL

In der Schule lernen wir gerade, wie man Daten charakterisiert, aufbereitet und auswertet.
Das tun wir insbesondere mit "SQL" und dem gratis Programm "SQLiteman"


SQL

SQL ist eine Datenbanksprache, die zur Definition von Datenstrukturen und zur Bearbeitung und Abfragung von darauf basierenden Datenbeständen verwendet wird.
Die Syntax der Sprache ist relativ einfach aufgebaut und an die englische Umgangssprache angelehnt.
Fast alle gängigen Datenbanksysteme unterstützen SQL, allerdings in unterschiedlichem Umfang.
Die Bezeichnung SQL ist eine Abkürzung für "Structured Query Language" und bedeutet auf Deutsch "strukturierte Abfragesprache".


Sprachelemente/Statements

Die einzelnen Elemente lassen sich in drei Kategorien unterteilen.

-DML: Data Manipulation Language (Datenverarbeitungssprache)
            Befehle zum Abfragen, Einfügen, Ändern, und Löschen der Daten.

-DDL: Data Definition Language (Datenbeschreibungssprache)
            Befehle zum Anlegen, Ändern, und Löschen von Datenstrukturen (Datenbankschema).

-DCL: Data Control Language (Datenaufsichtssprache)
           Befehle für die Zugriffskontrolle. 


Mit verschiedenen Abfragen werden die gespeicherten Daten abgerufen, das heißt, die Daten werden dem Benutzer oder  einer Anwendersoftware  zur Verfügung gestellt.
Das Ergebnis einer Abfrage wird als Tabelle dargestellt und kann auch wie in einer Tabelle bearbeitet und weiterverwendet werden.

Hier einige Beispiele zu Abfragen, unterteilt in den drei Kategorien:






Eine mögliche Abfrage wäre nun:

SELECT *  
FROM "Tabellen Name";

Diese Abfrage (oder Statement) listet alle Spalten und Zeilen der angegebenen Tabelle auf.


Um der Tabelle eine Zeile hinzuzufügen, wird folgendes Statement verwendet:

INSERT INTO "Tabellen Name" ("Spalte1","Spalte2", ....)
VALUES ("Wert1", "Wert2", ...);


Um nun eine Zeile aus einer Tabelle zu löschen, wird folgendes Statement benutzt:

DELETE FROM "Tabellen Name"
WHERE "Bedingung";


Datentypen

SQL liefert eine ganze Reihe standardisierter Datentypen. Diese werden zum Beispiel mit den Statements "CREATE TABLE" und "ALTER TABLE" verwendet, um anzugeben, welchen Datentyp die jeweiligen Spalten haben.

integer:
Ganze Zahl, die positiv oder negativ sein kann. Die jeweilige Grenze, wie groß eine Zahl sein darf, ist vom Datenbanksystem definiert.


numeric:
Festkommazahl (positiv oder negativ), die eine bestimmte Länge an Stellen haben kann, darin sind auch die Nachkommastellen inbegriffen.


float:
Gleitkommazahl (positiv oder negativ), die eine maximale Länge an Nachkommastellen hat.


real:
Gleitkommazahl (positiv oder negativ), deren Genauigkeit vom jeweiligen Datenbanksystem definiert ist.


character oder char:
Zeichenkette (Text) mit einer bestimmten Anzahl an Zeichen.


varchar oder character varying:
Zeichenkette (Text) mit variabler Länge


date:
Datum (ohne Zeitangabe)


time:
Zeitangabe (evtl. inklusive Zeitzone)


timestamp:
Zeitstempel (umfasst Datum und Uhrzeit), meistens mit Milisekundenauflösung


boolean:
Variable, die die Werte true oder false annehmen kann.


blob (binary large object):
Binärdaten, die eine maximale Länge von Bytes haben.


clob (character large object):
Zeichenkette, die eine maximale Länge von Bytes hat.


Falls kein Wert bekannt ist oder kein Wert gespeichert werden soll, können Attribute auch den Wert NULL haben.



Redundanz

In einer Datenbank sollen keine Redundanzen auftreten.
Das bedeutet, dass jede Information, also z.B. eine Adresse, nur genau einmal gespeichert wird.

In einigen Fällen ist die Performance der Datenbank besser, wenn sie nicht vollständig normalisiert wird, das heisst, Redundanzen werden bewusst in Kauf genommen, um zeitaufwendigere Verknüpfungen der einzelnen Tabellen zu verkürzen und so die Geschwindigkeit der Abfrage zu erhöhen.


Schlüssel/Key

Während Informationen auf viele Tabellen verteilt werden müssen, um Redundanzen zu vermeiden, sind die Schlüssel ein wichtiges Mittel, um die einzelnen Informationen miteinander zu verknüpfen.
Jeder Datensatz hat also eine eindeutige Nummer, um ihn zu identifizieren. Diese Identifikationen werden als Schlüssel bezeichnet.
Wenn ein Datensatz in anderen Zusammenhängen benötigt wird, wird einfach nur der jeweilige Schlüssel angegeben, daraus ergeben sich dann alle restlichen Informationen.
So kann es sich nun ergeben, dass manche Datensätze nur aus Schlüsseln bestehen, die erst mit den Verknüpfungen verständlich werden. Der eigene Schlüssel wird dabei als Primärschlüssel bezeichnet, die anderen Schlüssel, die auf Primärschlüssel anderer Tabellen verweisen, werden als Fremdschlüssel bezeichnet.


Referentielle Integrität

Definition:
Die referentielle Integrität besagt, dass Attributwerte eines Fremdschlüssels auch als Attributwert des Primärschlüssels vorhanden sein müssen.
Das bedeutet: Fremdschlüssel müssen IMMER auf existierende Datensätze verweisen.
Diese wichtige Funktion sollte bereits von der Datenbank überwacht werden.

Löschweitergabe:
Wird ein Datensatz gelöscht, werden die abhängigen Daten auch in der verknüpften Tabelle gelöscht.

Änderungsweitergabe:
Wird ein Datensatz geändert, wird diese Änderung auch in der verknüpften Tabelle ausgeführt


Beziehungen zwischen Tabellen

Es gibt im Wesentlichen drei Arten von Beziehungen:

- 1:1 Für jeden Datensatz in der Primärtabelle gibt es nur einen einzigen Datensatz in der Fremdtabelle

- 1:N Für jeden Datensatz in der Primärtabelle gibt es einen oder mehrere verwandte Datensätze in der Fremdtabelle

- N:n Für jeden Eintrag in der Primärtabelle gibt es viele verknüpfte Datensätze in der Fremdtabelle und umgekehrt
































Mittwoch, 12. März 2014

Februar 2014 - Zahlensysteme

Da ich vor kurzem in der Schule eine Menge über Zahlensysteme gelernt habe und mich das sehr interessierte, schreibe ich diesen Monat darüber.



Beschreibung

Dezimalsystem 


Das Dezimalsystem ist das "normale" Zahlensystem, das man kennt, es wird auch als Zehnersystem oder dekadisches System bezeichnet.

Im Dezimal werden alle zehn bekannten Ziffern verwendet (0-9).




Dualsystem 


(Über das Dualsystem habe ich schon in meinem ersten Blog etwas geschrieben, hier ist es aber nochmals detaillierter und ausführlicher erklärt.)

Das Dualsystem auch als Zweiersystem oder Binärsystem bekannt - ist ein Zahlensystem, das nur zwei verschiedene Ziffern verwendet, und zwar die beiden Ziffern 0 und 1.
Aufgrund der Bedeutung in der Digitaltechnik ist es neben dem Dezimalsystem das wichtigste Zahlensystem.
Die allgemeine Bezeichnung der Zahlendarstellung ist "Binärzahl", da diese auch für binärcodierte Zahlen stehen kann.


Hexadezimalsystem


Im Hexadezimalsystem werden Zahlen in einem Stellenwertsystem mit der Basis 16 dargestellt.
In der Datenverarbeitung wird das Hexadezimalsystem sehr oft verwendet, da es sich hierbei eigentlich nur um eine komfortablere Verwaltung des Binärsystems handelt. 

Dieses Zahlensystem verwendet 16 "Ziffern", da es aber eigentlich nur zehn Ziffern gibt, werden die restlichen sechs "Ziffern" als A - F dargestellt. 
Das heisst, die 16 Ziffern sind folgende:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F



Verwendung der Systeme

Auf das Dezimalsystem gehe ich hier nicht ein, daher fange ich direkt mit dem Binärsystem an.


Binär


Das Binärsystem verwendet als Stellenwertsystem die Basis 2
Im Binärsystem schreibt man immer von rechts nach links.
Die Basis 2 bedeutet, dass (von rechts nach links) immer die Basis 2 mit einem hinaufzählenden Exponenten gewertet wird. 

Beispiel:


                 28     27     26     25     24     23         22     21     20


Der Wert der Zahl wird immer mittels Exponent ausgerechnet

Das heisst:

                       28     27     26     25     24     23         22     21     20

"   256   128  64     32     16     8       4      2      1                  

Mit diesen Zahlen (und den nachfolgenden) ist es nun möglich, jede beliebige Zahl durch addieren zu erhalten.

Wie man feststellen kann welche Zahlen man addieren muss, ist ganz einfach: An den Stellen, wo eine 1 steht, muss die Zahl gewertet werden, das bedeutet, jede Zahl, bei der eine 1 steht, muss addiert werden.

Beispiel:


Binäre Schreibweise:       0        1        0       1         1        1         0        0        0


Das heisst:                      28       27      26      25       24       23       22      21       20

(Die grünen Zahlen werden addiert)

Bedeutet:                         0  + 128 + 0 + 32 + 16 + 8 + 0 + 0 + 0 = 184





Vom Dezimalsystem ins Dualsystem:


Um vom Dezimalsystem ins Dualsystem zu rechnen, gibt es mehrere Möglichkeiten. Die meiner Meinung nach einfachste ist folgende:

Man dividiert die Dezimalzahl, die man in binärer Schreibweise haben möchte, durch 2, den Rest, egal ob es einen gibt oder nicht, sollte man sich hintendran notieren, das erhaltene Ergebnis muss dann immer wieder durch2 dividiert werden, bis man Null erreicht hat, danach nimmt man die Restzahlen (von oben nach unten) und schreibt sie hintereinander auf (von rechts nach links).

Beispiel:



184 : 2 = 92     Rest 0
  92 : 2 = 46     Rest 0
  46 : 2 = 23     Rest 0
  23 : 2 = 11     Rest 1
  11 : 2 =   5     Rest 1
    5 : 2 =   2     Rest 1
    2 : 2 =   1     Rest 0
    1 : 2 =   0     Rest 1 


Daraus ergibt sich eine binäre Schreibweise von: 10111000





Hexadezimalsystem

Das Rechnen mit dem Dezimalsystem ist ähnlich wie das Binärsystem.

Wie schon erwähnt, arbeitet das Hexadezimalsystem mit der Basis 16.
Auch hier schreibt man von rechts nach links.

Um es sich erleichtern zu können, sollte man mit einer Tabelle arbeiten.


Wert:
165
164
163
162
161
160
Dezimalwert:
1048576
65536
4096
256
16
1



Die Dezimalzahl 365 ist in Hexadezimal 16D (gesprochen: Eins, Sechs, "D").













  Das rechnet man wie folgt aus:


Hexadezimal:             1                                             6                                   D

Wert:                       162                                          161                                          160

Dezimalwert:            256                                         16                                   1

Rechnung:              1 * 256         +                       6 * 16        +                 13 * 1
                               256             +                          96          +                      13               = 365


Von Dezimalsystem ins Hexadezimalsystem:

Auch hier gibt es eine einfache Möglichkeit mit dividieren.
Diesmal wird jedoch durch 16 dividiert, daher kann es auch eine Restzahl von bis zu 15 ergeben, es wird dann auch hier berücksichtigt, dass die Zahlen 10 - 15 den Buchstaben A - F entsprechen.

Beispiel (mit einer grösseren Zahl):


8952 : 16 =  559 Rest   8 ® 8
  559 : 16 =    34 Rest 15 ® F
    34 : 16 =      2 Rest   2 ® 2

      2 : 16 =      0 Rest   2 ® 2

Das ergibt dann eine Hexadezimalzahl von 22F8.


Von Binär in Hexadezimal und umgekehrt

Das Rechnen von Binär in Hexadezimal ist sehr leicht, man muss nur eine Tabelle haben, in der jede Hexadezimalzahl einem Binärcode zugeordnet ist.


Hexadezimal Binärcode
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111


Beispiel:

Hexadezimal:                 2                           2                       F                         8
Binär:                         0010                     0010                 1111                   1000

Das heisst die Hexadezimalzahl 22F8 wäre in Binär: 0010001011111000

Vorangehende Nullen können natürlich gestrichen werden   " 10001011111000