Ein Einführung in die Nutzung von relationalen Datenbanken und SQL

Werbung
Ein Einführung in die Nutzung von
relationalen Datenbanken und SQL
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Inhalt
▪ Daten und Tabellen
▪ Normalisierung, Beziehungen, Datenmodell
▪ SQL - Structured Query Language
▪ Anlegen von Tabellen
▪ Datentypen (Spalten), Regeln, Beziehungen
▪ Tabellen (Objekt) Beschreibung
▪ Daten (Zeilen)
▪ einfüge, auswählen, ändern und löschen
▪ das Transaktionsmodell
▪ View
▪ Funktionen
▪ Zugang zu RDMBS
Seite 2
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
wichtige Begriffe
▪ DBMS: Datenbank Management System
▪ Software, die Datenhaltung und Logik organisiert
▪ DBMS Instanz: laufender Prozeß eines DBMS
▪ Tablespace: physikalische Ablage von Daten in einer
DBMS Instanz
▪ Tablespaces und Instanzen sind für den DBMS Nutzer
typischerweise nicht sichtbar
▪ Schema = Datenbank
▪ logische Ablage von Daten
▪ enthält alle Objekte einer Datenbank (Tabellen, ...)
Seite 3
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Tabelle
▪ Aufbewahrungsort von Daten ist eine Tabelle
▪ Tabelle hat einen Namen und Spalten
▪ die Menge der Spalten ist festgelegt
▪ die Datensätze werden in Zeilen abgelegt
▪ die Anzahl der Zeilen spielt keine Rolle!
Name Vorname PLZ Ort Strasse Name Vorname PLZ Ort Strasse Mustermann Manfred 1234 Musterstadt Straße 1
Mustermann Manfred 1234 Musterstadt Straße 1
Mustermann Brunhild 1234 Musterstadt Straße 1
Mustermann Brunhild 1234 Musterstadt Straße 1
Zeile
Seite 4
Spalte
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Daten und Tabellen - ein Beispiel
Name Vorname PLZ Ort Straße Name Vorname PLZ Ort Straße Mustermann Manfred 1234 Musterstadt Straße 1
Mustermann Manfred 1234 Musterstadt Straße 1
Mustermann Brunhild Msterstadt Straße 1
Mustermann Brunhild Msterstadt Straße 1
▪ Probleme:
▪ Redundanzen
▪ Inkonsistenzen
▪ Lösung: “Normalisierung”
▪ eine Tabelle hat eine feste “Breite”,
die Spaltenwerte sind atomar
▪ eine Tabelle enthält nur die Daten eines
Themengebietes (Definitionsbereich)
Seite 5
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Daten und Tabellen - Normalisierung
Name
Name
Mustermann
Mustermann
Mustermann
Mustermann
Vorname
Vorname Ort
Ort
Manfred
Manfred 11
Brunhild
Brunhild11
ID
ID
1
1
PLZ OrtStraße
PLZ OrtStraße
1234 Musterstadt
1234 Musterstadt
Straße 1
Straße 1
▪ Aufspalten der Daten in Namen und Orte
▪ Zuordnung von Orten zu Namen
▪ Frage: wie erfolgt die Zuordnung?
→ Schlüssel und Beziehung (Relation)
Seite 6
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Datenmodell
▪ Vorraussetzung für den Entwurf einer Datenbank
▪ Einhaltung der Normalisierungsregeln
▪ Festlegen von Definitionsbereichen, Regeln,
Schlüsseln
▪ Darstellung im sog. entity-relationship Diagramm
Seite 7
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
SQL - Structured Query Language
▪ deklarative Datenbanksprache für relationale DB-Systeme
▪ 1986 ANSI, 1999 ISO/IEC 9075:1999
▪ DDL: Data Definition Language; Befehle zur Definition des
Datenbankschemas z.B. create table
▪ DML: Data Manipulation Language; Befehle zur
Datenmanipulation und Abfrage
▪ DCL: Data Control Language; Befehle zur Rechteverwaltung
▪ relationale Datenbankmanagementsysteme (RDBMS)
▪ DB2, Informix, Microsoft SQL Server, MySQL, Oracle,
PostgreSQL, Sybase
▪ andere Modelle: OODB
Seite 8
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DDL - Anlegen von Tabellen
▪ Tabelle hat Name und Spalten
▪ create table <tabellenname> ( <spalten> );
▪ Spalten haben Name, Typ und optional Regeln
▪ <spaltenname> <spaltentyp> [ <regel> ]
▪ Beispiel:
create table ort (
id number primary key,
name varchar(4000)
)
/ ← Kennzeichen für Ende DDL Anweisung
▪ Tip: immer mehr Platz vorsehen
▪ Tabellen- und Spaltennamen dürfen keine Sonderzeichen und
Leerzeichen enthalten
Seite 9
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DDL - Tabellen und Datentypen
▪ smallint, int, bigint: ganze Zahlen
▪ float, double: rationale Zahlen
▪ number: ganze und rationale Zahlen (Oracle spezifisch)
▪ varchar2(n): String (maximale Länge Oracle: 4000 Byte !)
▪ Werte werden in Hochkomma (') eingeschlossen (Bsp.: 'hallo')
▪ varchar2 ist Oracle spezifisch, SQL-Standard: varchar
▪ date: Zeitstempel (Datum und Uhrzeit)
▪ blob: binary large object für Objekte größer als 4 kByte
▪ kann beliebige Binärdaten enthalten
▪ clob: große Strings
▪ boolean: logische Werte (true und false)
▪ null-Wert: der nicht-existente Wert (<> leerer String)
Seite 10
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DDL - Tabellen, Spalteneigenschaften
▪ uniq: Wertemenge enthält jeden Wert höchstens einmal
▪ not null: keine null-Werte zulässig
▪ primary key: Primärschlüssel (uniq not null)
▪ ein Primärschlüssel kann über mehrere Spalten erklärt
werden
▪ default <wert>: Wert wird automatisch erzeugt
▪ Beispiel: create table t (
pk number primary key,
dt date not null,
vv number default 3.14159
)
Seite 11
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DDL - Tabellen und Beziehungen
▪ Fremdschlüssel: Werte eine Spalte müssen in der
referenzierten Spalte enthalten sein
▪ references <tabelle> ( <spalte> )
▪ die referenzierte Spalte muß die Eigenschaft uniq not
null oder primary key haben
▪ alternative Regeldarstellung:
▪ constraint <cname> primary key ( <sname> )
▪ foreign key ( <sname> ) references <tname> ( <rsname> ) [ on delete cascade ]
Seite 12
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DDL - Tabellen, komplettes Beispiel
create table orte (
create table kontakte (
id number primary key,
id number primary key,
name varchar2(4000) not null,
name varchar2(4000) not null,
plz number not null,
vname varchar2(4000) not null,
strasse varchar2(4000) not null
ort number references orte(id)
)
)
/
/
create table orte (
create table kontakte (
id number,
id number primary key,
name varchar2(4000) not null,
name varchar2(4000) not null,
plz number not null,
vname varchar2(4000) not null,
strasse varchar2(4000) not null,
ort number,
constraint pk_orte primary key ( id )
constraint fk_orte foreign key )
(ort) references orte (id)
/
)
Seite 13
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DDL - Tabellen beschreiben
▪ describe <objektname>;
▪ zeigt die Beschreibung eines Objektes an
▪ Beispiel: describe orte;
Name
Null?
Typ
--------- -------- ----------ID
NOT NULL NUMBER
NAME
VARCHAR2(4000)
PLZ
NUMBER
STRASSE
VARCHAR2(4000)
Seite 14
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DDL - Tabellen/Objekte löschen
▪ drop <otype> <objektname>;
▪ Löschen eines Objektes
▪ table, view, function
▪ trigger
▪ Beispiel: drop table orte;
▪ enthält die Tabelle referenzierte Daten,
verhindert das DBMS die Löschung
Seite 15
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Datenzeilen einfügen
▪ insert into <tname> (<spaltenliste>) values (<wertliste>) ;
▪ die Angabe der Spaltenliste kann entfallen, wenn alle Spalten mit Werten befüllt
werden; Reihefolge beachten !
▪ Beispiel:
insert into orte ( id, plz, name, strasse )
values ( 1, 1234, 'Musterstadt', 'Strasse 1');
insert into orte
values ( 2, 'Dresden', 1328,'Strasse 3');
▪ was passiert bei folgenden Anweisungen:
insert into orte values ( 3, 4567, 'Pirna','Strasse 4');
insert into orte values ( 1, 'Pirna', 4567, 'Strasse 4');
insert into orte (id,plz,strasse)
values ( 3, 4567, 'Strasse 4');
Seite 16
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Datenzeilen einfügen
▪ beim Einfügen werden die Referenzregeln
geprüft
▪ DBMS verhindert
▪ doppelte Werte in uniq-Spalten
▪ Wert, die in referenzierten Spalten nicht existieren
▪ null-Werte bei not null-Spalten
Seite 17
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Datenzeilen auswählen
▪ ein DBMS zeigt generell keine Daten an,
Daten werden ausgewählt → Ergebnismenge
▪ select <spaltenliste> from
<tabellenliste> [ where <bedingung> ] ;
▪ select ermittelt eine → Menge von Datensätzen
▪ die Bedingung ist ein bool'scher Term (true oder false),
z.B. 1=2 oder <spalte>=<wert>
▪ Beispiel:
select * from orte;
select name,strasse from orte where plz=1234;
Seite 18
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Datenzeilen auswählen
▪ distinct: voneinander verschiedene Werte
▪ ermittle voneinander verschiedene Nachnamen:
select distinct name from kontakte;
▪ group by: ermittle gleichartige Werte
▪ Typische Fragestellung „Wieviel von einer Sorte?“
select name,count(name)
from kontakte group by name;
Seite 19
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Datenzeilen auswählen, Join
▪ Join: Abfrage über mehrere Tabellen
select kontakte.name,vorname,plz,orte.name,strasse
from kontakte,orte where kontakte.ort=orte.id;
Name Vorname Ort
Name Vorname Ort
Mustermann Manfred 1
Mustermann Manfred 1
Mustermann Brunhild 1
Mustermann Brunhild 1
ID PLZ Ort Straße
ID PLZ Ort Straße
1 1234 Musterstadt Straße 1
1 1234 Musterstadt Straße 1
Name Vorname PLZ Ort Straße
Name Vorname PLZ Ort Straße
Mustermann Manfred 1234 Musterstadt Straße 1
Mustermann Manfred 1234 Musterstadt Straße 1
Mustermann Brunhild 1234 Musterstadt Straße 1
Mustermann Brunhild 1234 Musterstadt Straße 1
▪ führt Informationen aus mehreren Tabellen zusammen
▪ „passende“ Spalten müsssen nicht zwangsweise eine
Relation haben
Seite 20
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Datenzeilen auswählen, Join
▪ bei Abfragen über mehrere Tabellen müssen
nicht eindeutige Spaltennamen qualifiziert
werden
▪ Beispiel:
select kontakte.name,orte.name
from kontakte,orte
where kontakte.ort=orte.id;
Seite 21
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Mengenoperationen
▪ auf Auswahlmengen können Mengenoperationen
angewandt werden
▪ union, union all: Vereinigungsmenge
▪ union ermittelt nur unterschiedliche Elemente
▪ select name from t1 union select name from t2;
▪ intersect: Schnittmenge
▪ minus: entfernt aus der ersten alle Elemente der
zweiten Menge
Seite 22
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Subabfrage
▪ ermitteln von Datensätz basierend auf der
Auswahl einer Menge in einer anderen Tabelle
▪ Beispiel: alle Namen von Personen, die in Orten
mit einer Postleitzahl < 2000 wohnen:
select name from kontakte where
ort in (select id from orte where plz<2000);
Seite 23
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Datenzeilen ändern
▪ update <tabellenname> set
<zuweisungsliste> [ where <bedingung> ] ;
▪ die Zuweisungsliste besteht aus Termen der Form
<spaltenname>=<Wert>
▪ Beispiel:
update orte set plz=9999 where id=1;
update kontakte set ort=2;
▪ DBMS verhindert das Setzen von illegalen Werten
▪ DBMS verhindert das Ändern von referenzierten Werten
Seite 24
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DML - Datenzeilen löschen
▪ delete from <tabellennname>
[ where <bedingung> ];
▪ Beispiel:
delete from kontakte where
name='Mustermann';
delete from orte;
▪ DBMS verhindert das Löschen von Datensätzen, die
referenziert werden
Seite 25
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Das Transaktionsmodell
▪ Beispiel:
Q: 10:05
R: 10:08
Q: 10:06
R: 10:09
▪ Lösung: eine Transaktionsfolge muß bestätigt werden, bevor sie
persistent (dauerhaft) in die Datenbank geschrieben wird.
▪ commit; macht eine Transaktionsfolge persistent
▪ rollback; macht eine Transaktionsfolge ungültig
▪ eine neue Transaktionsfolge beginnt nach jedem commit oder rollback
bzw. beim Anmelden an der Datenbank
Seite 26
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Views
Name
Name
Mustermann
Mustermann
Mustermann
Mustermann
Vorname
Vorname Ort
Ort
Manfred
1
Manfred
1
Brunhild
1
Brunhild
1
ID
ID
11
Name
Vorname
Name
Vorname PLZ
PLZ
Mustermann
Manfred
1234
Mustermann Manfred
1234
Mustermann
Brunhild
1234
Mustermann Brunhild
1234
PLZ
PLZ
1234
1234
Ort
Ort
Musterstadt
Musterstadt
Musterstadt
Musterstadt
Ort
Ort
Musterstadt
Musterstadt
Straße
Straße
Straße
Straße11
Straße
Straße
Straße
Straße11
Straße
Straße11
▪ spezifische Sicht auf Daten
▪ wird wie Tabelle behandelt
▪ Datenmanipulation nur, wenn View über einer
Tabelle
Seite 27
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Views
▪ Definition:
create or replace view vname
( spaltenliste ) as select-statement
▪ Beispiel:
create view adressen ( name,vorname,plz,ort,strasse ) as select kontakte.name,vorname,plz,orte.name,strasse
from kontakte,orte where kontakte.ort=orte.id
/
▪ eine View „speichert“ eine Anfrage
▪ Views können wieder in Views verwendet werden
Seite 28
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Funktionen
▪ Funktionen berechnen Ausdrücke
▪ können in Abfragen verwendet werden
Beispiel: select max(id) from orte;
▪ sind Bestandteil von SQL, die Definition erfolgt jedoch spezifisch
▪ Beispiel:
create function ABS(x in number) return number is
begin
if x<0 then
return ­x;
end if;
return x;
end;
/
Seite 29
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Funktionen - Gruppenfunktionen
▪ min, max: von Werten
▪ select min(t) from temperatur;
▪ sum: Summe von Werten
▪ select sum(preis*n) from warenkorb;
▪ count: Anzahl von Werten
▪ select count(*) from bestand;
▪ weitere „klassische“ Funktionen
▪ sin, cos, abs, ...
Seite 30
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Funktionen - String Funktionen
▪ Stringverknüpfung: s1 || s2,
hängt s2 an s1 an
▪ upper(s), lower(s): konvertiert Strings in
Groß- bzw. Kleinbuchstaben
▪ substr(s,i,l): ermittelt den Substring am
dem i-ten Zeichen in s der Länge l
▪ instr(str,sstr): ermittelt die Position von
sstr in str falls vorhanden
▪ to_char: konvertiert nach String
Seite 31
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Funktionen - String Funktionen
▪ s1 like s2
▪ prüft auf Ähnlichkeit von Strings
▪ Beispiel: ... where name like 'Schmei%'
▪ soundex(s1) = soundex(s2)
▪ Oracle spezifische Funktion
▪ prüft, ob s1 in der aktuellen Spracheinstellung
ähnlich zu s2 „klingt“, Hash-Wert
▪ Beispiel: ... where soundex(name) like soundex('Dresde');
Seite 32
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DCL - Berechtigungen
▪ innerhalb eines Schemas kann zunächst nur auf
die eigenen Objekte zugegriffen werden
▪ auf Objekte, anderer Schemata, die sich in der
selben Instanz befinden können Rechte erteilt
werden:
▪ grant select on DB1.TAB1 to DB2;
▪ select, insert, update, delete, execute Recht
▪ können nicht weitergegeben werden, außer:
grant ... on ... to .. with grant option;
Seite 33
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
DCL - Berechtigungen
▪ Objekte in anderem Schema müssen qualifiziert
werden
▪ Beispiel: im Schema DB2
select id from DB1.TAB1;
▪ gilt auch für Funktionen
Seite 34
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Arbeiten mit RDBMS
▪ es gibt keine generischen Oberflächen!
▪ Kommandprozessoren (sqlplus, psql, mysql, ...)
▪ Programmierschnittstellen
▪ ODBC - MS typisches Verfahren
▪ JDBC - Java
▪ spezifische Bibliotheken, meist in C
▪ OCI (Oracle Call Interface), libpq (PostgreSQL), ...
Seite 35
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Oracle - sqlplus
▪ sqlplus dbname@dbhost:port:iname
▪ port ist typischerweise 1521
▪ iname (Instanzname) meist ORA0
▪ Verwaltungs-GUI's
▪ JDeveloper, Oracle Enterprise Manager
▪ Hora
▪ Eclipse
▪ dbvis
▪ Zugang nur von speziellen Rechnern
Seite 36
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Oracle - sqlplus
▪ direktes Senden von Anweisungen an RDBMS
▪ Anzeige von selektierten Wertmengen
▪ erzeugen von Protokolldateien
▪ spool Dateiname;
Anweisungsfolge
spool off;
▪ Abarbeitung von Befehlsdateien (Skripte)
▪ @Dateiname
Seite 37
Mitglied der Helmholtz-Gemeinschaft
Nils Schmeißer I Software & Services I https://www.hzdr.de/FWCS
Herunterladen