SQL Datendefinition Die Organisation einer Datenbank basiert auf einer Anzahl verschiedener Objekte. Diese können physikalischer oder logischer Natur sein. Das folgende Kapitel beschäftigt sich mit der Erstellung und Bearbeitung solcher Objekte.
Lutz Kleinostendarp ALTER Die grundlegende Anweisung zum Erstellen von Datenbankobjekten ist. Datenbankobjekte können sein: Datenbanken Tabellen Informationen über Datenbankobjekte werden in der jeweils übergeordneten Datenbank gespeichert, also Datenbanken in der Masterdatenbank Tabellen in der zugehörigen Datenbank ACCESS kennt keine Masterdatenbank 2
ALTER Das erste Objekt, dass erzeugt werden muss, ist die Datenbank selbst. Der Befehl dazu lautet: db_name Weitere Optionen des Befehls sollen hier nicht behandelt werden. Beispiel: testdb; Besondere Berechtigung zur Erstellung einer Datenbank erforderlich siehe hierzu das Kapitel Sicherheitskonzepte 3
ALTER Da ACCESS keine Masterdatenbank kennt, kann der Befehl dort nicht ausgeführt werden. Die DB kann nur auf der Benutzeroberfläche erstellt werden. Im Folgenden wird in diesem Kapitel davon ausgegangen, dass der Benutzer die betroffene Datenbank als aktuelle ausgewählt hat und über entsprechende Berechtigungen verfügt 4
Innerhalb der Datenbank werden Informationen in Tabellen gespeichert. Der Befehl zur Erstellung dieser Tabellen lautet: tab_name; ALTER Es können sofort Attribute angelegt werden. Die vollständige Syntax lautet dann: tab_name (sp_name1 datentyp1 [{NOT NULL NULL}], sp_name2 datentyp2 [{NOT NULL NULL}]...) 5
ALTER Beispiel: Erstellung der Tabellen der Beispieldatenbank (Seite 1) abteilung (abt_nr varchar(4) NOT NULL, abt_name varchar(20) NOT NULL, stadt varchar(15) NULL); mitarbeiter (m_nr int NOT NULL, m_name varchar(20) NOT NULL, m_vorname varchar(20) NOT NULL, abt_nr varchar(4) NULL); 6
ALTER Beispiel: Erstellung der Tabellen der Beispieldatenbank (Seite 2) projekt (pr_nr varchar(4) NOT NULL, pr_name varchar(25) NOT NULL, mittel float NULL); arbeiten (m_nr int NOT NULL, pr_nr varchar(4) NOT NULL, aufgabe varchar(15) NULL, einst_dat date NULL); 7
ALTER Seit SQL Server 6.0 (auch SQL95 genannt) lassen sich weitere Parameter übergeben. In den folgenden Übungen werden diese hier nicht mehr berücksichtigt. Die erweiterte Syntax lautet: tab_name (sp_name1 datentyp1 [DEFAULT wert] DEFAULT Voreinstellung der Spalte wert - ein konstanter Ausdruck - eine (parameterlose) Systemfunktion z.b. CURRENT_USER, CURRENT_TIMESTAMP - NULL 8
ALTER Seit SQL Server 6.0 (auch SQL95 genannt) lassen sich weitere Parameter übergeben. In den folgenden Übungen werden diese hier nicht mehr berücksichtigt. Die erweiterte Syntax lautet: tab_name (sp_name1 datentyp1 [DEFAULT wert] [{IDENTITY NULL NOT NULL}] [Spaltenregeln] [, {weitere Spalten}] [Tabellenregeln]; IDENTITY - entspricht autowert Regeln - 9
ALTER (integrity constraints) dienen dazu, unsinnige oder widersprüch-liche Datenwerte zu erkennen und abzuweisen. In der -Anweisung hinterlegte Regeln werden zentral vom Server überprüft. Eine lokale Prüfung (dieser Regel) im Anwenderprogramm ist somit nicht mehr notwendig. Spaltenregeln beziehen sich immer auf ein Attribut. Tabellenregeln können sich auf mehrere Attribute (Attributgruppen) beziehen. Jede Regel erhält einen Namen. 10
ALTER Die UNIQUE-Klausel definiert Schlüsselkandidaten. Schlüsselkandidaten sind alle Attribute (Attributgruppen), die in der Tabelle eindeutig einen Datensatz kennzeichnen. UNIQUE stellt also die Einmaligkeit jedes Wertes in dem betroffenen Attribut (der Attributgruppe) sicher. 11
Die Syntax der UNIQUE-Klausel: ALTER [CONSTRAINT regel_name] UNIQUE [CLUSTERED NONCLUSTERED] (sp_name1 [{,sp_name}]) CONSTRAINT - definiert den expliziten Namen der Regel CLUSTERED - erstellt den Index sortiert NONCLUSTERED bzw. unsortiert sp_name - max. 6 Spaltennamen sind erlaubt 12
ALTER Beispiel für die UNIQUE-Klausel (Spaltenregel): verkauf (bestell_nr integer null, name char(20) null); Jede Bestellnummer darf nur einmal vorkommen, dies gilt auch für den NULL-Wert! Die zweite Eingabe des selben Wertes wird vom System abgewiesen. Die Regel erhält vom Server automatisch einen impliziten Namen. 13
ALTER Die PRIMARY KEY-Klausel definiert den Primärschlüssel einer Tabelle. Die Syntax lautet: [CONSTRAINT regel_name] PRIMARY KEY [CLUSTERED NONCLUSTERED] (sp_name1 [{,sp_name}]) 14
ALTER Beispiel für die PRIMARY KEY-Klausel (Tabellenregel): mitarbeiter (m_nr int NOT NULL, m_name char(20) NOT NULL, m_vorname char(20) NOT NULL, abt_nr char(4) NULL, CONSTRAINT prim_s_mit PRIMARY KEY (m_nr)); 15
ALTER Beispiel für die PRIMARY KEY-Klausel (Spaltenregel weniger gebräuchlich): mitarbeiter (m_nr int NOT NULL CONSTRAINT prim_s_mit PRIMARY KEY, m_name char(20) NOT NULL, m_vorname char(20) NOT NULL abt_nr char(4) NULL); 16
ALTER Die FOREIGN KEY-Klausel definiert einen Fremdschlüsselbezug. Die Syntax lautet: [CONSTRAINT regel_name] [FOREIGN KEY (sp_name1 [{,sp_name}])] REFERENCES tab_name (sp_1 [{,sp_x}]) REFERENCES - benennt die Bezugstabelle Die angegebenen Spalten müssen in Anzahl und Datentyp in der vorliegenden Reihenfolge übereinstimmen. 17
ALTER Beispiel für die FOREIGN KEY-Klausel (Tabellenregel): arbeiten (m_nr int NOT NULL, pr_nr char(4) NOT NULL, aufgabe char(15) NULL, einst_dat datetime NULL, CONSTRAINT prim_s_arb PRIMARY KEY (m_nr, pr_nr), CONSTRAINT fremd_s_arb FOREIGN KEY (m_nr) REFERENCES mitarbeiter (m_nr)); 18
ALTER Beispiel für die FOREIGN KEY-Klausel (Spaltenregel weniger gebräuchlich): arbeiten (m_nr int NOT NULL CONSTRAINT fremd_s_arb REFERENCES mitarbeiter (m_nr), pr_nr char(4) NOT NULL, aufgabe char(15) NULL, einst_dat datetime NULL, CONSTRAINT prim_s_arb PRIMARY KEY (m_nr, pr_nr)); 19
Lutz Kleinostendarp ALTER Referentielle Integrität wird durch die PRIMARY KEY- und FOREIGN KEY-Klauseln erzeugt. Die Tabelle mit dem Primärschlüssel ist die Master- oder Zieltabelle. Die Tabelle mit dem Fremdschlüssel ist die Detail- oder Referenztabelle. sorgt dafür, dass in die Detailtabelle nur Werte eingetragen werden können, die auch in der Mastertabelle existieren. Somit wird sichergestellt, dass ein Tabellenbezug nicht ins Leere läuft. verhindert das Löschen eines Wertes in der Mastertabelle, solange noch referierte Datensätze in der Detailtabelle existieren. 20
Lutz Kleinostendarp ALTER Es gibt weitere Anweisungen zur Erstellung von Datenbankobjekten, von denen hier aber nur eine Auswahl kurz erwähnt werden soll: CHECK erlaubt die Einschränkung des Wertebereiches INDEX kann die Antwortzeit bei Abfragen beschleunigen 21
Übungsphase 1: ALTER Gehen Sie mit Hilfe des Skriptes die Möglichkeiten der -Anweisung (Kapitel 3.1.2 3.2.4) durch und erstellen Sie dabei die Übungsdatenbank. 22
Lutz Kleinostendarp ALTER Ändern von Objekten Strukturell änderbare Objekte sind: Die Datenbank (ALTER ) Die Tabellenstruktur (ALTER ) Die Änderungen der Datenbank beziehen sich nur auf die Größe des Speicherplatzes, weshalb hier im Folgenden nur auf die Strukturänderungen von Tabellen eingegangen wird. 23
Grundform: ALTER ALTER tab_name ADD spalten_name datentyp [{,spalten_name2 datentyp2} ]; Diese Anweisung fügt der Tabelle eine neue Spalte hinzu. Die optionale Angabe NULL kann entfallen, da NOT NULL nicht erlaubt ist (schon existierende Spalten können nur NULL enthalten). ALTER tab_name spalten_name [{,spalten_name2} ]; Diese SQL92-Standarderweiterung wird nicht allgemein unterstützt. 24
Erweiterte Form: ALTER Auch lassen sich nachträglich einfügen (und löschen): ALTER tab_name [WITH {CHECK NOCHECK} ADD spalten_name datentyp [{,spalten_name2 datentyp2} ]; ADD tabellenbezogene_regel tabellenbezogene_regel Mit der Angabe CHECK wird dabei geprüft, ob die Integrität gewährleistet ist. 25
Erweiterte Form (Beispiele): ALTER abteilung ADD constraint prim_s_abt (abt_nr); ALTER ALTER mitarbeiter ADD constraint fremd_s_mita (abt_nr) references abteilung (abt_nr); ALTER abteilung constraint prim_s_abt; 26
Lutz Kleinostendarp ALTER Löschen von Objekten: objekt obj_name [{,.}] Beispiele: db_name [{, db_name2} ] Die Datenbank(en) wird/werden mit allen Objekten gelöscht. Hierzu muss die aktuelle Datenbank die Master-Datenbank sein!!! tab_name [{, tab_name2} ] Die Tabelle(n) wird/werden mit allen Elementen und Regeln gelöscht. arbeiten; 27
Übungsphase 2: ALTER Gehen Sie mit Hilfe des Skriptes die Anweisungen ALTER und (Kapitel 3.3 und 3.4) durch. 28