Metadaten oder Metainformationen sind Daten, die Informationen über Merkmale anderer Daten enthalten, aber nicht diese Daten selbst (Wikipedia) Dr. Christian Senger Metadaten 1
Vorgehen bei ER Modellierung und Normalisierung 1. Dokumentiere die Anforderungen aus Sicht der Anwender. 2. Dokumentiere die Attribute in Form eines Datenwörterbuchs. 3. Setze die Anforderungen in Relationen um (Primärschlüssel festlegen!) 4. Fasse Relationen mit identischen Primärschlüsselattributen zusammen. 5. Analysiere die funktionalen Abhängigkeiten. 6. Eliminiere nicht voll funktionale Abhängigkeiten. 7. Eliminiere ggf. auftretende transitive Abhängigkeiten. 8. Ggf. erneute Zusammenfassung von Relationen mit identische Primärschlüsseln. Dr. Christian Senger Metadaten 2
Beispiel: Datenwörterbuch schlafplatz_nummer: eindeutige Nummer für einen Schlafplatz name: Name des Anbieters oder Nutzers (vorname, nachname) datum: Tag, Monat, Jahr: DD.MM.JJJJ alter: aktuelles Alter von Anbieter/Nutzer telefon: Telefonnummer - +[Ländercode ohne führende 0] [Vorwahl ohne führende 0] [Ortsanschluss] bewertung: Bewertung durch den Nutzer von 1(schlecht) 10 (super) für den Schlafplatz Dr. Christian Senger Metadaten 3
DML DDL TCL DCL Dr. Christian Senger Metadaten 4
Data Dictionary Data-Dictionary speichert Informationen über die Struktur der Daten, z.b.: Tabellen, Spalten, Datentypen Primär- und Fremdschlüssel, Konsistenzbedingungen Zugriffsberechtigungen, Benutzer Quellcode zu Stored Procedures, Trigger... Dr. Christian Senger Metadaten 5
Einsatz z.b. im Rahmen von Fakultät für Informatik & Wirtschaftsinformatik Data Dictionary IDEs wie SQLDeveloper, Hora, Toad,... generative Programmierung (Generierung von Oberflächen,...) SQL 2 generate SQL Reverse Engineering Dr. Christian Senger Metadaten 6
Übersicht über Data-Dictionary ist die Tabelle DICTIONARY Beispiel: SELECT * FROM dictionary Data Dictionary von Oracle WHERE lower(comments) like '%column%' AND lower(comments) like '%table% Dr. Christian Senger Metadaten 7
Übersicht Data Dictionary von Oracle Welche Tabellen/Views gibt es denn? Welche Spalten hat eine Tabelle/View? Welche Constraints gibt es? Auf welchen Spalten sind Constraints definiert? Quellcode... USER_<x> entspricht ALL_<x> mit Ausnahme, dass die Spalte OWNER fehlt und nur die Informationen für den aktuell angemeldeten User angezeigt werden. Dr. Christian Senger Metadaten 8
Data Dictionary Beispiel Mondial Tabellen und Spalten des Users Mondial Dr. Christian Senger Metadaten 9
Data Dictionary Beispiel Mondial Constraints Country, City Province Dr. Christian Senger Metadaten 10
Data Dictionary Beispiel Mondial Fremdschlüssel, detailliert (all_cons_columns) Dr. Christian Senger Metadaten 11
SQL 2 generate SQL Für den User sech0004 soll der lesende Zugriff auf die Tabellen der Mondial Datenbank erlaubt werden DCL-Statements (ca. 28 Stück): grant select on BORDER to sech0004; grant select on COUNTRY to sech0004;... grant select on ORGANISATION to sech0004; Statements sind bis auf Tabellenname identisch, Namen der Tabellen stehen im Data-Dictionary Dr. Christian Senger Metadaten 12
SQL 2 generate SQL SQLPlus Frontend kann mittels SPOOL-Kommando Ausgaben in Dateien umlenken Beispiel: spool c:/sonstwohin/hauptstaedte.txt select capital from mondial.country order by capital; spool off Dr. Christian Senger Metadaten 13
SQL 2 generate SQL SQLPlus kann mittels @-Kommando Dateien laden und die darin befindlichen SQL-Kommandos ausführen Beispiel: SQL > @ delete-tables.sql Dr. Christian Senger Metadaten 14
SQL 2 generate SQL String Concatenation, Gewünschte Ausgabe: <current user> sagt am <current date> Dr. Christian Senger Metadaten 15
SQL 2 generate SQL Die Tabellen im Schema MONDIAL sollen von allen Studenten gelesen werden können: select 'grant select on ' table_name ' to student;' generated_sql from all_tables where owner='mondial'; GENERATED_SQL ---------------------------------------------------------- grant select on COUNTRY to student; grant select on CITY to student;... grant select on BORDERS to student; GENERATED_SQL ---------------------------------------------------------- grant select on ENCOMPASSES to student; grant select on ISLAND to student; 28 rows selected. Dr. Christian Senger Metadaten 16
SQL 2 generate SQL alles störende raus... set feedback off set pagesize 0 set feedback off set pagesize 0 spool tmp/grant-mondial.sql select 'grant select on ' table_name ' to student;' generated_sql from user_tables; spool off -------------------------- SQL > @ tmp/grant-mondial.sql host rm tmp/grant-mondial.sql quit Dr. Christian Senger Metadaten 17
SQL 2 generate SQL MySQL auto_increment Mechanismus mittels Trigger simulieren create table AI_Test ( value varchar2(40) ); create sequence SEQ_AI_Test; alter table AI_Test add id number(10) primary key; create or replace trigger TRG_AI_Test Wie sieht der Trigger aus? show errors ---------------------------------- insert into AI_Test(value) values( ein Test ); Dr. Christian Senger Metadaten 18
SQL 2 generate SQL Automatisierung Anfrage an Data-Dictionary: Gib die Namen aller Tabellen zurück, die mit dem Präfix AI_ beginnen und keinen Primärschlüssel haben select table_name -- alle Tabellen deren Name mit AI_ anfängt from user_tables where table_name like 'AI#_%' escape # minus select table_name -- alle Tabellen mit Primärschlüssel from user_constraints where constraint_type='p'); Dr. Christian Senger Metadaten 19
SQL 2 generate SQL Automatisierung SQL 2 generate SQL Dr. Christian Senger Metadaten 20
SQL 2 generate SQL Automatisierung SQL 2 generate SQL Dr. Christian Senger Metadaten 21
Übung Schau dir die Dictionary-Tabelle user_objects an und schreib ein Skript, das dein Schema komplett leert(*). (*) Wenn du noch Interesse an deinen bisherigen Tabellen/Prozeduren/... hast, dann solltest du diese vorher sichern (mittels Oracle Tool exp.exe), das geht so: prompt> exp euer-account-name@oracledbwi file=ein-beliebiger-dateiname zurückspielen mittels imp.exe (ins leere Schema): prompt> imp euer-account-name@oracledbwi full=y file=ein-beliebigerdateiname Dr. Christian Senger Metadaten 22