de.comp.datenbanken.misc FAQ

Was ist eine Datenbank?

Eine Datenbank ist eine Sammlung von Daten. Ein Datenbankmanagentsystem (DBMS) ist ein Programmsystem, daß eine Datenbank für mehrere Nutzer zur gleichzeitigen Benutzung so zur Verfügung stellt, daß kein Nutzer den Datenbestand schädigen kann. Das umfaßt Zugriffsberechtigungen, interne Integrität (die Datenbestände werden nicht unsinnig) und auch Absturzschutz auf Seiten des Anwendungsprogrammes oder auch bei Stromausfall/Ausschalten des/der Servers.

Eine Klassifizierung unterscheidet DBMS in Serversysteme und verteilte Systeme. Letztere sind höchst komplex, besonders wenn sie nicht ständig synchronisiert sein können. Hier liegen noch ungelöste Probleme der Informatik.

Eine andere Klassifizierung unterscheidet DBMS nach dem typischen Datenmodell:

  • Hierarchische Datenbanken
  • Relationale Datenbanken
  • Objektorientierte Datenbanken
  • Graphische Datenbanken

Systeme, die ihren Datenbestand nicht selbst schützen können, bezeichet man als Karteisysteme. Dazu gehören Unix-Textutils, MySQL, MS Access, dBase, Berkeley-dbm und viele andere mehr.

Volltextretrival Systeme strukturieren die Datenbestände gar nicht mehr. Bekannte Beispiel sind: Google und AskSam.

Welche Datenbank kann was?

Einen guten Vergleich der Features gibt es von Crash-ME: http://www.mysql.com/information/crash-me.php

Was ist SQL?

SQL - Structured Query Language - ist eine Definitons- und Abfragesprache für relationale Datenbanken. Trotz Normung SQL92, SQL99 haben die meisten erhältlichen RDBMS (Relationale DBMS) die verschiedensten Dialekte entwickelt.

Wie entwerfe ich relationale Datenbanken?

Am einfachsten mit dem Entity-Relationship-Modell (http://www.doc.mmu.ac.uk/online/SAD/T06/erd1.htm).

Welche Arten von Schlüsseln gibt es?

Ein Primary Key ist ein Feld einer Tabelle, die einen Datensatz in dieser Tabelle dauerhaft eindeutig kennzeichnet. Eine Primary Key ist geeignet als Fremdschlüssel zu fungieren.

Ein Foreign Key ist ein Feld einer Tabelle, daß auf einen Primary Key einer anderen Tabelle verweist, und so eine n:1 Beziehung zwischen den Datensätzen herstellt.

Ein Secondary Key (kurz Key) ist ein Feld einer Tabelle, die einen Datensatz in dieser Tabelle eindeutig kennzeichnen kann.

Was ist ein Index?

Ein Index ist eine zusätzliche interne Datenstruktur für eine Tabelle, die es gestattet Anfragen, die die indizierten Bereiche umfassen, schneller zu beantworten. Übliche Implementationen sind B-Tree, R-Tree, sortierte Liste, Hash (mit selbstdefinierten Hashfunktionen), Bitfeld.

Ein Index ist immer dann nützlich, wenn er starke selektive Wirkung hat. Für nicht selektive Indices werden Bitfelder als Implementationen bevorzugt. Diese teilen praktisch den Tabelleninhalt in wenige, große Teiltabellen.

Was ist ein Constraint?

Zusatzannahmen über den Datenbestand, die nicht direkt ins Datenmodell und seine Implementierung aufgenommen werden konnten, werden in Form von Constraints dem RDBMS mitgeteilt. Häufige Fälle sind NOT NULL, UNIQUE, CHECK(feld<7). Allerdings sind auch deutlich komplexere Annahmen möglich, wie "Die Personalkosten der Firma dürfen höchsten 40% der Gesamtbilanz ausmachen."

Wie frage ich zugehörige Datensätze in mehreren Tabellen ab?

SELECT t1.f1, t2.f3 FROM t1, t2 WHERE t1.f2 = t2.f2 nennt man einen Join. Die Aufzählung mehrerer Tabellen in einer Abfrage erzeugt virtuell ein Kreuzprodukt (alle Einträge in t1 werden mit allen Einträgen in t2 kombiniert), aus dem dann virtuell nur die passenden anhand der where Bedingung herausgesucht werden. Die eigentliche Abfrage erfolgt praktisch völlig anders und hängt von der aktuellen Struktur der Daten in der Datenbank ab.

Wie verhindere und lösche ich doppelte Einträge?

Ein UNIQUE Constraint, wie er in einem primary Key automatisch mit erzeugt wird, verhindert diese Einträge von vorne herein.

Angenommen die Tabelle tab enthält die Felder f1 und f2. Beide zusammen sollen ein Key für die Datensätze sein. CREATE UNIQUE INDEX nix_doppelt ON tab(f1, f2) erstellt einen Constraint. Ist das Problem schon passiert so gibt es zwei Möglichkeiten:

  • CREATE TEMPORARY TABLE xxx AS SELECT DISTINCT * FROM tab; und dann Rückkopieren des Datenbestandes. Dies ist nicht im laufenden Betrieb möglich!
  • DELETE FROM tab WHERE EXISTS (SELECT * FROM tab t WHERE t.f1 = tab.f1 AND t.f2 = tab.f2 AND t.oid < tab.oid); wobei hier ein automatischer primary Key der Datenbank benutzt wurde. Wie das heißt, ist der Dokumentation zu entnehmen.

Wie erhalte ich die Liste aller Tabellen?

ANSI SQL92, MS SQL Server 7/2000, Ocelot, ...
SELECT * FROM information_schema.tables WHERE table_type = 'BASE TABLE';
DB2
LIST TABLES;
PostgreSQL
psql-client mit \dt oder SELECT * FROM pg_tables;
mysql
SHOW TABLES;
Oracle
SELECT * FROM sys.dba_tables; (alle Tabellen)
SELECT * FROM all_tables; (nur Tabellen die Dir nützen)
SELECT * FROM user_tables; (nur Deine Tabellen)
MS-SQL, Sybase
SELECT * FROM sysobjects WHERE type = 'U';
Interbase
SELECT * FROM rdb$relations;
AdabasD
SHOW TABLE;
Solid
SELECT * FROM tables;
Teradata
SELECT * FROM DBC.Tables WHERE TableKind = 'T';
zur ckzurück © 1996-2018 Lutz Donnerhacke @ IKS GmbH Jena Tuesday | 11.Dec.2018