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';
|