IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Datenbanken - Datenbanken Allgemein



Datenbanken Allgemein

Allgemeiner Überblick über Datenbanken mit Beispielen zu den Normalenformen, Datenbankschemas und Suchoperationen.


Autor: Andreas Bucher (buesche)
Datum: 31-07-2007, 22:10:56
Referenzen: http://selfphp.de/
Schwierigkeit: Anfänger
Ansichten: 4035x
Rating: Bisher keine Bewertung.

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Modellierung

Aufbau einer Datenbank

Entität

Als Entität werden im Datenbankmodelling unterscheidbare, in der realen Welt eindeutig identifizierbare einzelne Objekte bezeichnet, über die ein Unternehmen Daten speichert. Eine Entität wird durch einen eindeutigen Schlüssel identifiziert; den PrimaryKey. Die Kann zum Beispiel die Kundennummer oder Seriennummer eines Gerätes sein. Bei einer Entität werden meist seine realen Eigenschaften angegeben, sog. Attribute. Im ERM (Entity Relationship Modell) wird eine Entität als Viereck dargestellt.

Attribut

Ein Attribut ist eine Eigenschaft oder Merkmal des realen Objekts. Z.B. Name, Vorname, Adresse eines Mitarbeiter.



In diesem ERM ist der Mitarbeiter ein Entitätstyp (eine Entität ist die einzelne Ausprägung eines Entitättyps). MA_Nr (kurz für Mitabreiter Nummer) ist ein PrimaryKey. Diese Nummern werden so gewählt, dass sie bei diesem Entitätstyp nur einmal vorkommen, so also eine Entität identifizieren.

Beziehung

Beziehung engl. Relationship.
Die Beziehung zwischen mehreren Entitäten wird als Relationship bezeichnet. Z.B. Eine Entität Mitarbeiter gehört zur Entität Firma. Oder auch der Entitatstyp Mitarbeiter gehört zum Entitätstyp Firma (Verallgemeinerung).



Diese Beziehung bedeutet:
Eine oder mehrere Mitarbeiter (n) arbeiten in einer Firma (1).

Schlüssel

Schlüssel auch Key’s genannt benutzt man wie schon angesprochen zur Identifikation einer Entität.

Primary Key

Der PrimaryKey ist für die ganze Entität einmalig, meist wird eine Nummer definiert. (Mitarbeiter Nummer MA-Nr). Diese Nummer darf und kann (wird vom DBMS gesteuert) nicht 2x vorkommen.

Foreign Key

Foreign Key’s werden zum verknüpfen von Entitäten genutzt. Man benutzt sie um Redundanzen zu vermeiden und Falscheinträge zu verhindern. (Auto hat das Attribut Benzin, Tankstelle ebenfalls, diese Attribute können miteinander verknüpft werden.)

Beispiel einer Datenbank – ERM



Ein oder mehrere Mitarbeiter mit den Attributen MA_Nr, Name und Vorname können in genau einer Firma mit den Attributen Firma_Nr, Firmenname und Bezeichnung arbeiten. PrimaryKey’s werden wie hier unterstrichen dargestellt.

Beispiel einer Datenbank – Tabellarisch

Mitarbeiter

MA_Nr Name Vorname
1 Bucher Andreas
2 Meyer Hans
3 Müller Guida


Firmen

Firma_Nr Firmenname Bezeichnung
1 Kummerkasten Betreut Depressive Menschen
2 Waser & Co. Malergeschäft
3 Komtel Telefongesellschaft


Normalisieren

Normalisieren einer Datenbank erhöht die Performance und auch das Verwalten einer Datenbank wird erleichtert. Es gibt verschiedene Normalformen, die Formen 1-3 sind so zu sagen „obligatorisch“ und zu erfüllen. Insgesamt gibt es 6 Normalformen.

Eine Datenbank in der 0ten Normalform kann wie folgt aussehen:

MA_Nr Name Vorname Adresse Lohn Kinder Alter K.
1 Bucher Andreas Unterhofstrasse 14, 6208 Oberkirch 2000 (NULL) (NULL)
2 Meyer Hans Dorfchelbi 5, 6589 Krummenbach 3500 Julia 8 J.
2 Meyer Hans Dorfchelbi 5, 6589 Krummenbach 3500 Jakob 7 J.
3 Müller Guida Überdemberg, 5789 Hochoben 2100 Julia 12 J.
3 Müller Guida Überdemberg, 5789 Hochoben 2100 Johannes 12 J.
3 Müller Guida Überdemberg, 5789 Hochoben 2100 Heidi 9 J.


Wie man sieht sind in dieser Tabelle Daten redundant (mehrfach) vorhanden. Dies verlangsamt Suchabfragen und macht die Verwaltung der Daten schwer.
Diese Datenbank muss gereinigt, also Normalisiert werden.

1. Normalform

Erst werden alle Spalten mit mehreren Einträgen getrennt. Es werden neue Spalten entstehen. Die Anforderung der 1. Normalform ist: Eingetragene Werte müssen atomar sein, also nur ein Eintrag pro Spalte.

Mitarbeiter

MA_Nr Name Vorname Strasse PLZ Ort Lohn Kinder Alter K.
1 Bucher Andreas Unterhofstr. 14 6208 Oberkirch 2000 (NULL) (NULL)
2 Meyer Hans Dorfchelbi 5 6589 Krummenbach 3500 Julia 8 J.
2 Meyer Hans Dorfchelbi 5 6589 Krummenbach 3500 Jakob 7 J.
3 Müller Guida Überdemberg 5789 Hochoben 2100 Julia 12 J.
3 Müller Guida Überdemberg 5789 Hochoben 2100 Johannes 12 J.
3 Müller Guida Überdemberg 5789 Hochoben 2100 Heidi 9 J.


2. Normalform

Bindeglied zwischen den 2 Tabellen erstellen. Alle Attribute sollen vom Schlüssel voll abhängig sein. Daher wird die eine grosse Tabelle in 2 kleinere aufgeteilt. Nun ist der PrimaryKey (MA_Nr) der einen Tabelle als Fremdschlüssel auch in der anderen verwendbar.

Mitarbeiter

MA_Nr Name Vorname Strasse PLZ Ort Lohn
1 Bucher Andreas Unterhofstr. 14 6208 Oberkirch 2000
2 Meyer Hans Dorfchelbi 5 6589 Krummenbach 3500
3 Müller Guida Überdemberg 5789 Hochoben 2100


Kinder

MA_Nr Kinder Alter K.
2 Julia 8 J.
2 Jakob 7 J.
3 Julia 12 J.
3 Johannes 12 J.
3 Heidi 9 J.


Wie man sehen kann sind die Redundanten Daten nun verschwunden. In der Mitarbeitertabelle existieren alle Personen nur noch ein Mal.
Auch der Wert (NULL) welcher soviel wie „Nichts“ bedeutet, ist verschwunden.

3. Normalform

In der 3ten Normalform dürfen in einer Tabelle nur noch Attribute existieren, welche mit dem Primary Key in Beziehung stehen. Es darf zwischen den Attributen keinerlei Abhängigkeiten geben.

Mitarbeiter

MA_Nr Name Vorname Strasse PLZ Ort
1 Bucher Andreas Unterhofstr. 14 6208 Oberkirch
2 Meyer Hans Dorfchelbi 5 6589 Krummenbach
3 Müller Guida Überdemberg 5789 Hochoben


Kinder

MA_Nr Kinder Alter K.
2 Julia 8 J.
2 Jakob 7 J.
3 Julia 12 J.
3 Johannes 12 J.
3 Heidi 9 J.


Lohn

MA_Nr Lohn
1 2000
2 3500
3 2100


Die nicht mit dem Primary Key in Beziehung stehenden Werte „Lohn“ wurden in einer neuen Tabelle angelegt. Dazu der Primary Key der Mitarbeiter (MA_Nr) damit man weiss, welchem Mitarbeiter wie viel Lohn zugesteht.

Bei diesen Tabellen wurde der Primary Key auch gleich als Foreign Key eingesetzt.

Redundanzen / Konsistenz

Als Konsistenz bezeichnet man die Widerspruchsfreiheit redundant gespeicherter Daten. Das heisst es sollen keine Redundanten Daten vorhanden sein.

Redundanzen gibt es häufig bei nicht Normalisierten Datenbanken.

Das obige Beispiel kann man gut dazu benutzen:

Mitarbeiter

MA_Nr Name Vorname Ort Lohn
1 Bucher Andreas Unterhofstrasse 14, 6208 Oberkirch 2000
2 Meyer Hans Dorfchelbi 5, 6589 Krummenbach 3500
2 Meyer Hans Dorfchelbi 5, 6589 Krummenbach 3500
3 Müller Guida Überdemberg, 5789 Hochoben 2100
3 Müller Guida Überdemberg, 5789 Hochoben 2100
3 Müller Guida Überdemberg, 5789 Hochoben 2100


Kinder

MA_Nr Name Vorname Kinder Alter K.
1 Bucher Andreas (NULL) (NULL)
2 Meyer Hans Julia 8 J.
2 Meyer Hans Jakob 7 J.
3 Müller Guida Julia 12 J.
3 Müller Guida Johannes 12 J.
3 Müller Guida Heidi 9 J.


Hier werden die Daten mehrfach Redundant angegeben. In der Tabelle Kinder findet man mehrfach erfasst dieselbe Person. Über die 2 Tabellen verteilt findet man nochmals die Redundanz der Personen. Dies Kann zu sog. Update-Anomalien führen. Wenn Guida Müller heiratet und nicht mehr Müller sondern Fischer heisst, muss dies in beiden Tabellen angepasst werden was mehr Aufwand und eine gute Übersicht erfordert. Unter umständen geht eine vergessen und das Chaos beginnt.

Solche Redundanzen werden durch das Normalisieren beseitigt.

Unterschied Entität – Tabelle

Eine Tabelle repräsentiert eine Entität. Die Entität ist das Abbild eines realen Objektes, die Tabelle beschreibt diese Entität. Jede Spalte dieser Tabelle beschreibt die Eigenschaft (das Attribut) einer Entität.

Views

Ein View ist eine Logische Tabelle, ein Abbild ausgewählter Spalten einer Tabelle. Es verhält sich aber gleich wie eine Tabelle.

MA_Nr Name Vorname Strasse PLZ Ort
1 Bucher Andreas Unterhofstr. 14 6208 Oberkirch
2 Meyer Hans Dorfchelbi 5 6589 Krummenbach
3 Müller Guida Überdemberg 5789 Hochoben


Name Vorname
Bucher Andreas
Meyer Hans
Müller Guida


Ein View der Tabelle Mitarbeiter. Sehen möchten wir nur Name und Vorname.

String zum ertsellen des obigen View’s:


CREATE VIEW Name AS SELECT name, vorname FROM mitarbeiter;

Schema Modell

Interne Schemas / Externe Schemata



Das Interne Schema beschreibt die physische Gruppierung der Daten und der Speicherplatz auf dem Datenträger.

Das konzeptionelle Schema gibt die logischen Zusammenhänge der Daten wieder. Es zeigt die Logische Gesamtschicht. Alle Daten sowie Bedingungen und Beziehungen zwischen denen werden erfasst.

Die externen Schemata sind für die einzelnen Benutzer (Benutzergruppen). Jeder Benutzer sieht die Datenmengen anders, hat verschiedene Zugriffsrechte und andere Views. Probleme der Datenbank sind dem Benutzer so nicht sichtbar.

SQL - Structured Query Language

Früher SEQUEL (Structured English Query Language), wurde von IBM entwickelt. SQL steht zur Manipulation von Datenbeständen (Anfügen, Bearbeiten und Löschen von Datensätzen) und zur Abfrage von Daten zur Verfügung.

SQL lässt sich in 4 Sprachschichten Teilen: DQL, DCL, DDL und DML.

Elemente einer SQL Abfrage

Element Beschreibung
Spaltenname Spalte einer bezeichneten Tabelle, die ausgegeben, mit der verglichen oder mit der gerechnet wird
Arithmetische Operatoren +,-,* und /; sie werden zur Berechnung benötigt
Logische Operatoren Schlüsselwörter AND, OR und NOT, die für einfache Suchfunktionen oder innerhalb von Verknüpfungen zu komplexen Suchanfragen verwendet werden. Ein logischer Operator gibt als Ergebnis immer wahr oder falsch zurück
Vergleichsoperatoren <,>,<=,>=, und <> dienen dem Vergleich von zwei Werten. Ein Vergleichsoperator gibt immer wahr oder falsch zurück.
In Suchabfragen stehen darüber hinaus weitere spezialisierte Vergleichsoperatoren wie beispielsweise LIKE, EXISTS, IN.
Verknüpfungsoperatoren Dienen zur Verkettung von Zeichenketten


DQL - SELECT

Data Query Language

Dieser Teil der Sprache SQL steht ausschliesslich für Datenabfragen bereit.

SELECT [DISTINCT] Auswahlliste
FROM Quelle
WHERE Where-Klausel
[GROUP BY (Group-by-Attribut)+
[HAVING Having-Klausel]]
[ORDER BY (Sortierungsattribut)+ [ASC|DESC]]

DML – INSERT, UPDATE, DELETE

Data Manipulation Language

Wie der Name schon sagt, wird die Sprache zum Manipulieren bestehender Daten benutzt

INSERT INTO Relation ['(' (Attribut)+ ')'] VALUES '('(Konstanten)+')'

INSERT INTO Relation ['(' (Attribut)+ ')'] SELECT … FROM … WHERE

UPDATE Relation SET (Attribut=Ausdruck)+ WHERE Where-Klausel

DELETE FROM Relation [WHERE Where-Klausel]

DML - CREATE, ALTER, DROP

Data Definition Language

CREATE TABLE Relation '(' (Attribut-Definition)+ ')'
CREATE TABLE Relation '(' (Attribut-Definition [PRIMARY KEY])+
[, FOREIGN KEY '(' (Attribut)+ ')' REFERENCES Relation '(' (Attribut)+ ')'] ')'
DROP TABLE Relation
ALTER TABLE Relation Alter-Definition
CREATE INDEX Index-Name ON Relation '(' (Attribut)+ ')'
DROP INDEX Index-Name
CREATE VIEW Sicht ['(' (Attribut)+ ')'] AS SELECT,FROM,WHERE[WITH CHECK OPTION]
DROP VIEW Sicht

Diese Sprache steht zur Datendefinition bereit.
Erstellen von Tabellen, Indexen Views und auch ändern und löschen jener.

DCL – GRANT, REVOKE

Data Control Language

Vergabe und Entzug von Rechten.


GRANT (Operation)+ ON Relation TO (PUBLIC|Benutzer) [WITH GRANT OPTION]

REVOKE (Operation)+ ON Relation FROM (PUBLIC|Benutzer)

Datentypen


integer
Ganze Zahl (positiv oder negativ)

number (n)
Ganze Zahl (positiv oder negativ) mit maximal n Stellen

number (n, m) oder decimal (n,m)
Festkommazahl (positiv oder negativ) mit maximal n Stellen, davon m nach dem Komma

float (m)
Gleitkommazahl (positiv oder negativ) mit maximal m Stellen nach dem Komma

character (n) oder char (n)
Zeichenkette (also Text) mit n druckbaren und/oder nicht druckbaren Zeichen

varchar (n), varchar2 (n)
Zeichenkette (also Text) von variabler Länge, aber maximal n druckbaren und/oder nicht druckbaren Zeichen. 
Die Variante varchar2 ist für Oracle spezifisch.

date
Datum.
Bei Oracle inklusive Uhrzeit

boolean
Boolesche Variable (kann die Werte true (wahr) oder false (falsch) annehmen). 
Dieser Datentyp fehlt in Oracle.

raw (n)
Binärdaten von maximal n Bytes Länge.

NULL-Wert

Der NULL-Wert ist nicht etwa eine 0, sondern ein spezieller Wert, welcher als Referenz für „Nichts“ bzw. „kein Objekt“ dient.

Bei einer Kinder-Tabelle kann ein Baby auch 0 Jahre alt sein, aber was wird eingetragen wenn man das Alter nicht kennt? Für solche Ausnahmen wurde der NULL-Wert erstellt.

MA_Nr Name Vorname Kinder Alter K.
1 Bucher Andreas (NULL) (NULL)
2 Meyer Hans Julia 8 J.
2 Meyer Hans Jakob 7 J.


Suche in Datenbanken

Ein eigentlicher Suchstring wie Search oder ähnlich gibt es nicht.
In einer Datenbank nach bestimmten Einträgen sucht man mithilfe der SELECT abfrage.
Ich möchte die Adresse von <> herausfinden (Ausgehend der Datenbank in der 2. Normalform):

Select * from Mitarbeiter where Name = ‘Bucher’

Liefert folgendes Ergebniss:

MA_Nr Name Vorname Strasse PLZ Ort
1 Bucher Andreas Unterhofstr. 14 6208 Oberkirch


Hier kann die Adresse ausgelesen werden.
Man kann das auch anders lösen:

Select Strasse, PLZ, Ort from Mitarbeiter where Name = ’Bucher’

Liefert folgendes Ergebnis:

Strasse PLZ Ort
Unterhofstr. 14 6208 Oberkirch


Wenn man Daten über mehrere Tabellen suchen möchte kommen Joins ins Spiel:

Ich suche den Namen der Kinder von Hans Meyer

Select ma.Name, ma.Vorname, k.Kinder from Mitarbeiter ma natural join 
Kinder k on ma.MA_Nr = k.MA_Nr where ma.Name = ‘Meyer‘ and ma.Vorname = ‘Hans’

Liefert folgendes Ergebnis:

ma.Name ma.Vorname k.Kinder
Meyer Hans Julia
Meyer Hans Jakob


Falls man nicht weiss wie jemand heisst, kann man das %-Zeichen als Platzhalter benutzen.

Ich möchte wissen welche Kinder von Hans Meyer mit <> anfangen.

Select ma.Name, ma.Vorname, k.Kinder from Mitarbeiter ma natural join
Kinder k on ma.MA_Nr = k.MA_Nr where
(ma.Name = ‘Meyer‘ and ma.Vorname = ‘Hans’) and k.Kinder like ’Ju%’

Liefert folgendes Ergebnis:

ma.Name ma.Vorname k.Kinder
Meyer Hans Julia


Ein anderer Platzhalter ist das _-Zeichen. Dies benutzt man vor allem, wenn man nicht weiss wie ein Wert Eintrag geschrieben ist.

Ich möchte wissen wo Hans <> oder <> wohnt (Davon ausgegangen es existieren 2 Tabellen, Mitarbeiter und Adresse).

Select ma.Name, ma.Vorname, a.Strasse, a.PLZ, a.Ort from Mitarbeiter ma 
natural join Adresse a on ma.MA_Nr = a.MA_Nr where ma.Name like ’M_yer’

Liefert folgendes Ergebnis:

ma.Name ma.Vorname a.Strasse a.PLZ a.Ort
Meyer Hans Dorfchelbi 5 6589 Krummenbach


Joins

Ein Join wird zum Verbinden mehrerer Tabellen miteinander gebraucht.

Es gibt folgende Arten von Joins:

Cross Join

Dieses Join verbindet jede Zeile der ausgewählten Tabellen miteinander.

Select * from Mitarbeiter cross join Lohn

Liefert folgendes Ergebnis:

Mitarbeiter. MA_Nr

Name Vorname

Lohn. MA_Nr

Lohn
1 Bucher Andreas 1 2000
1 Bucher Andreas 1 3500
1 Bucher Andreas 1 2100
2 Meyer Hans 2 2000
2 Meyer Hans 2 3500
2 Meyer Hans 2 2100
3 Müller Guida 3 2000
3 Müller Guida 3 3500
3 Müller Guida 3 2100


Gleichnamige Spalten der zwei Tabellen werden durch Voranstellen des Tabellennamens identifiziert. Diess Join wird kaum genutzt, da es zu meist nutzlosen, kartesischen Produkten führt.

Inner Join, Equivalent Join

Verbindet Datensätze aus zwei Tabellen, sobald ein gemeinsames Feld dieselben Werte enthält

SELECT * FROM Mitarbeiter INNER JOIN Lohn ON Mitarbeiter.MA_Nr = Lohn.MA_Nr

Liefert folgendes Ergebnis:

Mitarbeiter. MA_Nr

Name Vorname

Lohn. MA_Nr

Lohn
1 Bucher Andreas 1 2000
2 Meyer Hans 2 3500
3 Müller Guida 3 2100


Natural Join

Verknüpft die Tabellen über alle gleichlautenden Spalten. Gleichlautende Spalten werden im Ergebnis nur einmal angezeigt. Haben die Tabellen keine gleichlautenden Spalten, wird der Natural Join zum Cross Join. Gibt es nur eine gleichlautende Spalte, so ist der Natural Join ein Inner Join welche gleichlautende Spalten (Wie z.B. MA_Nr) ausblendet.

SELECT * FROM Mitarbeiter NATURAL JOIN Lohn ON Mitarbeiter.MA_Nr = Lohn.MA_Nr

Left Outer Join, Left Join

Mit einem Left Join wird eine sog. „linke Inklusionsverknüpfung“ erstellen. Left Join schliesst alle Datensätze aus der ersten (linken) Tabelle ein, auch wenn keine entsprechenden Werte für Datensätze in der zweiten Tabelle existiert

SELECT * FROM Mitarbeiter LEFT JOIN Kinder ON Mitarbeiter.MA_Nr = Kinder.MA_Nr

Liefert folgendes Ergebnis:

Mitarbeiter. MA_Nr

Name Vorname

Kinder. MA_Nr

Kinder Alter K.
1 Bucher Andreas MULL NULL NULL
2 Meyer Hans 2 Julia 8 J.
2 Meyer Hans 2 Jakob 7 J.
3 Müller Guida 3 Julia 12 J.
3 Müller Guida 3 Johannes 12 J.
3 Müller Guida 3 Heidi 9 J.


Man sieht, dass alle Mitarbeiter aufgelistet werden, auch wenn diese keine Kinder haben. Hier kommt der spezielle NULL-Wert zum Einsatz.

Right Outer Join, Right Join

Mit einem Right Join wird eine sog. „rechte Inklusionsverknüpfung“ erstellet. Right Outer Joins schliessen alle Datensätze aus der zweiten (rechten) Tabelle ein, auch wenn keine entsprechenden Werte für Datensätze in der ersten Tabelle existiert.

SELECT * FROM Mitarbeiter RIGHT JOIN Kinder ON Mitarbeiter.MA_Nr = Kinder.MA_Nr

Mitarbeiter. MA_Nr

Name Vorname

Kinder. MA_Nr

Kinder Alter K.
2 Meyer Hans 2 Julia 8 J.
2 Meyer Hans 2 Jakob 7 J.
3 Müller Guida 3 Julia 12 J.
3 Müller Guida 3 Johannes 12 J.
3 Müller Guida 3 Heidi 9 J.


Andreas Bucher wurde hier weggelassen, da kein Kind von Ihm existiert.

Waisenkinder sind in unserer Tabelle nicht möglich, da bei einem Kind der PrimaryKey MA_Nr des Mitarbeiters angegeben werden muss.

Full Outer Join, Full Join

Eine Kombination von Left Outer Join und Right Outer Join. Es werden alle Werte beider Seiten berücksichtigt, jedoch entsteht kein kartesisches Produkt.

Union Join

Ähnlich dem Full Outer Join werden Datensätze beider Tabellen aufgenommen. Sie werden aber nicht über eine Bedingung verknüpft. (z.B. [RIGHT JOIN … ON …] entfällt)

SELECT * FROM Mitarbeiter UNION JOIN Kinder

Liefert folgendes Ergebnis:

Mitarbeiter. MA_Nr

Name Vorname

Kinder. MA_Nr

Kinder Alter K.
1 Bucher Andreas MULL NULL NULL
2 Meyer Hans 2 Julia 8 J.
2 Meyer Hans 2 Jakob 7 J.
3 Müller Guida 3 Julia 12 J.
3 Müller Guida 3 Johannes 12 J.
3 Müller Guida 3 Heidi 9 J.


Semi-Join

Der Semi Join ist ein Natural Join von Tabellen mit anschließender Projektion auf die Attribute der ersten Tabelle.

SELECT Mitarbeiter.* FROM Mitarbeiter INNER JOIN Lohn ON Mitarbeiter.MA_Nr = Lohn.MA_Nr

Liefert folgendes Ergebnis:

Mitarbeiter. MA_Nr

Name Vorname
1 Bucher Andreas
2 Meyer Hans
3 Müller Guida


Theta Join, Non-Equivalent-Join

Der Theta Join ist eine Verallgemeinerung des Inner Join. Während beim Inner Join die Gleichheit des Inhalts zweier Attribute verglichen wird, wird beim Theta Join der Inhalt der Attribute i und j mit einer beliebigen Formel Theta(i,j) verglichen,

SELECT * FROM Mitarbeiter INNER JOIN Lohn ON Mitarbeiter.MA_Nr <= Lohn.MA_Nr

Liefert Folgendes Ergebnis:

Mitarbeiter. MA_Nr

Name Vorname MA_Nr Lohn
1 Bucher Andreas 1 2000
1 Bucher Andreas 2 3500
1 Bucher Andreas 3 2100
2 Meyer Hans 2 3500
2 Meyer Hans 3 2100
3 Müller Guida 3 2100


Self-Join

Der Self-Join ist ein beliebiger Join, bei dem nicht zwei verschiedene Tabellen benutzt werden, sondern zweimal dieselbe Tabelle.

Mengenoperationen

Mengenoperationen dienen dazu, die Ergebnismengen zweier Abfragen zu einer zusammenzufassen. Die Mengen können vereinigt (UNION / UNION ALL), geschnitten (INTERSECT) oder von einander subtrahiert (MINUS) werden. Damit diese Operatoren angewendet werden können, müssen die Spalten in gleicher Anzahl und vom gleichen Typ sein. UNION / UNION ALL

Die Ergebnismenge einer UNION-Operation enthält alle Zeilen aus allen Abfragen.

Abfrage 1
UNION
Abfrage2
UNION
…
Abfrage n

INTERSECT

Die Ergebnismenge enthält die Schnittmenge der Teilmengen, d.h. die Datensätze müssen in beiden Abfragen enthalten sein.

MINUS

Die Ergebnismenge enthält die Differenz der Teilmengen, d.h. die Datensätze müssen in der ersten, dürfen aber nicht in der zweiten Abfragen enthalten sein.

Data Dictionary

Im Data Dictionary ist die Struktur der zu speichernden Daten hinterlegt. Nicht die Daten selbst sondern die Beschreibung der Daten. Zum Beispiel: die Datentypen der Felder einer Tabelle, Integritätsregeln, Beziehungen zu anderen Tabellen und Datenbanksichten (views), aber auch Informationen über die physikalische Organisation der Daten, über Zugriffsrechte, Privilegien etc.

Die Data Dictionary wird von der DBMS dazu benutzt um Zugriffe auf die Daten zu verwalten und zu kontrollieren.

SQL*PLUS

SQL*PLUS ist ein Programm und nicht die Standardabfragesprache SQL. Im SQL*PLUS werden SQL Abfragen nicht nach einem ENTER ausgeführt, erst nach einem Semikolon und anschliessendem ENTER. Ohne ENTER wird auf die nächste Linie gewechselt und man kann eine SQL Abfrage übersichtlicher gestalten. SQL*PLUS Befehle kann man ohne Semikolon ausführen (z.B. SET, oder HELP)

SQL*PLUS – Einige Befehle


DESCRIBE tabellenname - Zeigt die Attribute der ausgewählten Tabelle 
EDIT - Man gelangt in den Editor, ein Bufferfile wird angelegt
GET Dateiname – Die Ausgewählte Datei wird in den Buffer geschrieben 
SAVE Dateiname – Speichert den Bufferinhalt in eine Datei 
CLEAR BUFFER – Löscht den Inhalt im Buffer
LIST – Zeigt alle Zeilen des Buffers an
HELP – Man kommt ins Hilfemenü

DDL – Einige Befehle

CREATE - Erstellt eine neue Instanz eines Objektes in der Datenbank.

ALTER - Modifiziert ein Objekt in der Datenbank.

DROP - Entfernt ein Objekt aus der Datenbank.

TRUNCATE TABLE - Entfernt sämtliche Daten aus einer Tabelle, lässt aber die Tabellenstruktur unverändert.

PRIMARY KEY - Deklariert eine Primarschlüsseleinschränkung auf eine oder mehrere Spalten einer Tabelle. Setzt Einmaligkeit durch. Im Unterschied zu einer UNIQUE Einschränkung darf hier kein Wert NULL sein.

FOREIGN KEY - Deklariert ein Fremdschlüsseleinschränkung auf eine oder mehrere Spalten einer Tabelle.

REFERENCE - Verbindet PK und FK. Wird zusammen mit der FK Deklaration verwendet, um die Tabelle und die Spalte anzugeben, die durch den FK referenziert werden.

CHECK - Hierdurch wird eine CHECK Einschränkung auf eine Spalte deklariert, diese schränkt den Wertebereich ein, der für diese Spalte zulässig ist.

WITH NOCHECK - Deaktiviert FK und CHECK Einschränkungen während Tabellenänderungen.

DEFAULT - Eine DEFAULT Einschränkung auf eine Spalte gibt den Wert an, der eingetragen wird, wenn der Benutzer nicht anderes eingibt.

UNIQUE - Deklariert eine UNIQUE Einschränkung, verhindert nicht einmalige Werte in einer Spalte. Im Unterschied zu einer PRIMARY KEY Einschränkung darf genau ein Wert NULL sein.

IDENTITY - Deklariert eine IDENTITY Eigenschaft auf eine numerische Spalte ohne Dezimalstellen. Stellt im Idealfall eine fortlaufende Nummerierung dar, da der Wert stets um eine definierbare Schrittweite erhöht wird. Achtung: IDENTITY ohne weitere Einschränkungen garantiert keine Einmaligkeit der Werte!

CONVERT / CAST - Wandelt Datentypen in andere um.

Berechtigungen

Wie schon in einem oberen Kapitel beschrieben:

GRANT (Operation)+ ON Relation TO (PUBLIC|Benutzer) [WITH GRANT OPTION]

REVOKE (Operation)+ ON Relation FROM (PUBLIC|Benutzer)

Zum vergeben, bzw. Entziehen von Rechten.

Berechtigungen sind von Nöten, um unbefugten Zugriff auf Dateien zu verhindern.

Prozeduren

Eine Prozedur ist eine gespeicherte Abfrage. Prozeduren machen es leichter mit Datenbanken zu Arbeiten, da gleich bleibender Code nicht ständig neu eingetippt werden muss, sondern einfach abgefragt werden kann.

PROCEDURE Prozedurname IS 
Variable1 Datentyp; 
... 
BEGIN 
Anweisung1; 
... 
EXCEPTION 
when ... 
END Prozedurname;

Trigger

Trigger sind wie Prozeduren abgespeicherte SQL Abfragen.

Jedoch mit dem Unterschied, dass sie zu einer bestimmten Aktion automatisch ausgeführt werden.
Ein Beispiel von www.a-wild.de :

Index

Indexe benutzt man um die Performance der Datenbank zu erhöhen. Man macht Indexe auf Tabellen, welche man häufig für Abfragen verwendet oder für welche man sonst ein Schnelles Resultat haben muss.

Indexe werden wie folgt definiert:

create index indx_Adressen on Adressen (Name);
Index auf die Spalte Name der Datenbank Adressen.


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04510
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06247
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0