Ein Datenbanksystem besteht aus - - - Einer oder mehrerer Datenbanken Enthalten die Gesamtheit der Daten eines Anwendungsbereichs Zentral gespeicherter Datenbestand Verwaltet über anwendungsunabhängige Zugriffsverfahren Einem Data Dictionary Dort wird das Datenbankschema gespeichert, das den Aufbau der Daten der Datenbanken beschreibt Enthält Metadaten zur Dokumentation der in der Datenbank abgespeicherten Datenobjekte und Datenattribute Kann auch zur Ablage von Metadaten zur Beschreibung der Datenverwendung durch Anwendungen Benutzer Transaktionen Verantwortlichkeiten Änderungszeitpunkte etc. verwendet werden Einem Datenbank Management System Verwaltet und kontrolliert zentral unter Berücksichtigung des Datenbankschema im DD die in der Datenbank bzw. den Datenbanken abgelegten Datenbestände Sorgt für die Dauerhafte Speicherung Zuverlässige und Unabhängige Verwaltung Komfortable und Flexible und Geschützte Verwendung großer integrierter und mehrfach benutzbarer Datenbanken Vorteile des Datenbankansatzes - Ablage der Daten in einem Format, welches das DBMS unabhängig von Applikationen interpretieren kann. Das DBMS greift als einziger Prozess direkt auf die Daten zu und darf diese Manipulieren Das DBMS verwaltet die Zugriffsberechtigungen Das DBMS koordiniert die Zugriffe von mehreren Anwendern Das DBMS stellt Mechanismen zur Datensicherung und Datenwiederherstellung zur Verfügung Datenmodelle Im Datenmodell wird festgelegt, o Durch welche Eigenschaften Datenelemente charakterisiert werden können o Wie die Struktur der Datenelemente aussehen kann o Welche Konsistenzbedingungen einzuhalten sind o Welche Operationen zum Speichern, Auffinden, Ändern und Löschen von Datenelementen erlaubt sind Arten o Hierarchisches Datenmodell (1:n) o Netzwerkmodell (n:m) o Relationales Datenmodell Organisation der Daten in Tabellen Verwendung von SQL als DML und DDL Beziehungen zwischen Tabellen werden über Schlüssel hergestellt o Objektorientiertes Datenmodell Syntax und Semantik o Durch DDL (Data Definition Language) o Und DML (Data Manipulation Language) ER-Modell o Das ER-Modell ist eine Top-Down-Methode zur Erstellung eines relationalen Datenmodells o Entitäten sind in der Datenbank abgebildete Objekte aus der Realität o Entitätsnamen werden laut gängiger Konvention im Singular angegeben o Attribute beschreiben Entitäten o Jede Instanz einer Entität besitzt für jedes Attribut genau einen Wert o Beziehungen stellen Verbindungen zwischen den Entitäten her o Zwischen zwei Entitäten können mehrere Beziehungen bestehen Grad einer Beziehung (Kardinalität) 1:1 1:N N:M Prinzipielles Vorgehen Festlegung von Entitäten Definition der Beziehungen zwischen den Entitäten Zuordnung von Kardinalitäten zu den Beziehungen Definition von Attributen Normalisierung Das Relationenmodell aus der Mathematik - Eine Relation ist die Menge aller Tupel in einer Tabelle Der Relationenname gibt der Tabelle ihren Namen Das Relationenschema beschreibt die Struktur einer Tabelle. Es wird gebildet aus den Spaltennamen / Attributen Ein Datensatz (Tupel) bildet die Zeile einer Tabelle Relationale Datenbank - Tabellen bilden die Basis einer relationalen Datenbank und organisieren die Daten Der Name einer Tabelle ist eindeutig Tabellen bilden die Entitäten des ER-Modells ab Jede Tabelle besteht aus mind. einer Spalte Jede Spalte trägt einen eindeutigen Namen Die Attribute im ER-Modell entsprechen den Spalten der Tabelle und geben der Spalte ihren Namen Ein Tupel enthält einen kompletten Datensatz Ein Tupel entspricht einer Zeile der Tabelle, d.h. es besteht aus Spalten, die mit Werten belegt sind Die Instanzen einer Entität werden durch Tupel abgebildet Primary Key - Der Primärschlüssel definiert eine Zeile einer Tabelle eindeutig Der Primärschlüssel kann aus einer oder mehreren Spalten (semantische Schlüssel) bestehen Die Spalten eines Primärschlüssels dürfen keine NULL-Werte enthalten (nicht definiert) Attribute von Entitäten im ER-Modell können als Primary Keys definiert werden Foreign Key - Der Fremdschlüssel verknüpft Tabellen mit Hilfe des Primärschlüssels Der Fremdschlüssel bildet die Beziehung zwischen den Entitäten im ER-Modell ab Abbildung der Beziehungen des ER-Modells mit Hilfe von Foreign Keys - 1:1 o Obligatorische Mitgliedschaft beider Entitäten (1 – 1) Keine Aufteilung in zwei Relationen notwendig Entitäten, die nicht in einer eigenen Tabelle abgebildet werden, werden mit einem * gekennzeichnet – Der Tabellenname ist der, der nicht markierten Entität o Obligatorische Mitgliedschaft einer Entität (0…1 – 1) Der Primary Key der nicht-obligatorischen Entität wird der Tabelle zur Abbildung der obligatorischen Entität als Foreign Key hinzugefügt Vermeidung von NULL-Werten o Nicht-Obligatorische Mitgliedschaft beider Entitäten (0…1 – 0….1) Zur Vermeidung von NULL-Werten wird eine Zwischentabelle zur Abbildung der Beziehung eingeführt Die Primary Keys beider Tabellen werden in die Zwischentabelle als Foreign Keys übernommen - 1:N o Obligatorische Mitgliedschaft der N-Entität (0…1 – 1…*) Der Primary Key der 1-Entität wird der Tabelle zur Abbildung der N-Entität als Foreign Key hinzugefügt Vermeidung von NULL-Werten o Nicht-Obligatorische Mitgliedschaft der N-Entität (0…1 – 0…*) Einführung einer Zwischentabelle Die Primary Keys beider Tabellen werden in die Zwischentabelle als Foreign Keys übernommen - N:M (0…* – 0…*) o N:M Beziehungen müssen über Hilfstabellen aufgelöst werden, bevor sie in einer relationalen Datenbank abgebildet werden können Mitgliedsklasse für die Auflösung unerheblich Einführung einer Zwischentabelle Die Primary Keys beider Tabellen werden in die Zwischentabelle als Foreign Keys übernommen Normalisierung - Vermeidung von Redundanzen Ermöglichen einer einfachen Datenpflege Ein übersichtlicher und möglichst einfacher Aufbau der Relationen Anomalien Sind Verarbeitungsfehler durch die Manipulation von unkorrekten Relationen Man unterscheidet: Updateanomalie Bei Datenänderungen werden nicht alle Datensätze berücksichtigt Löschanomalie Durch das Mischen nicht zusammengehörender Informationen können beim Löschen von Entities unbeteiligte Entities mitgelöscht werden Einfügeanomalie Wurden nicht zusammengehörende Informationen in einer Relation vermischt, so können Probleme bei der Eingabe neuer Daten auftreten Normalformen 1. Normalform Eine Relation ist in der ersten Normalform, wenn sie zweidimensional ist jeder Datensatz nur einmal vorkommt sich in jedem Datensatz Daten befinden, die zu einem Objekt der realen Welt gehören sich in jeder Spalte nur Daten befinden, die einem Attribut entsprechen jedes Attribut nur einmal in jeder Relation vorkommt für jedes Attribut nur ein Wert eingetragen ist Das heißt: Die Attribute der Relation müssen atomar sein Strukturierte Attribute müssen aufgeteilt werden in ihre Teilattribute Relationen in erster Normalform werden auch oft als flache Relationen bezeichnet Aufgrund von funktionalen Abhängigkeiten können sich in erster Normalform Relationen Redundanzen ergeben 2. Normalform (Funktionale Abhängigkeit) Eine Relation ist in der zweiten Normalform, wenn sie in 1. Normalform ist jedes Nicht-Schlüsselattribut vom ganzen Primärschlüssel voll funktional abhängig ist. Somit dürfen Nicht-Schlüsselattribute nicht von Teilen des Primärschlüssel abhängen Das heißt: Die zweite Normalform vermeidet partielle funktionale Abhängigkeiten Die zweite Normalform kann durch Auslagerung der abhängigen Attribute in eine eigene Relation erreicht werden 3. Normalform (Transitivität) Eine Relation ist in der dritten Normalform, wenn sie in 2. Normalform ist kein Nicht-Schlüsselattribut transitiv vom Primärschlüssel abhängt jedes Nicht-Schlüsselattribut nur vom Primärschlüssel abhängig ist Das heißt: Nicht Schlüsselattribute dürfen nicht von Nicht-Schlüsselattributen abhängen Die dritte Normalform löst transitive Abhängigkeiten auf, d.h. es existieren keine Abhängigkeiten zwischen Attributen, die nicht zum Schlüssel gehören Die transitive Abhängigkeit wird durch Auslagerung der abhängigen Attribute in eine neue Relation aufgelöst MySQL o o MySQL ist ein relationales Datenbank-Management-System und fungiert dabei als „Vermittler“ zwischen der physikalischen Datenbank und den Anwendern Verzeichnisstruktur Bin\ Server und Client-Programme von MySQL und Addons Scripts\ Perl-Skripte für Routineaufgaben Data\ Datenbanken und Tabellen Docs\ Bench\ Spalten-Datentypen in MySQL - - Numerisch o –M Anzeigebreite, Maximum: 255 o –D Anzahl der Dezimalstellen nach dem Punkt bei Fließkommazahlen o –UNSIGNED Ohne Vorzeichen o –ZEROFILL Füllt leere Stellen in der Anzeige mit Nullen auf, setzt automatisch UNSIGNED, sinnvoll im Zusammenhang mit M Datum und Zeit Zeichenketten Mengen Inno-DB Tabellen - Transaktionssicher Sperrung auf Zeilenebene möglich Max. Größe einer Tabelle ist betriebssystemabhängig Konsistente, nicht sperrende, Lesevorgänge in SELECT-Anweisung - Portabel InnoDB wurde für maximale Leistung bei der Verarbeitung großer Datenmengen ausgelegt Unterstützung von Foreign Keys Darstellung Zeichenketten Eine Zeichenkette ist eine Abfolge von Bytes oder Zeichen, die in einfache Anführungszeichen [’] gesetzt wird Ganzzahlen Folge von Ziffern Fließkommazahlen Verwenden einen Punkt [.] als Dezimaltrennzeichen Hexadezimalzahlen Der Standardtyp eines Hexadezimalwerts ist ein String. Er kann aber auch als Zahl identifiziert werden. Verwendung als String Jedes Paar hexadezimaler Ziffern wird in ein Zeichen umgewandelt Verwendung als Zahl Hexadezimal-Werte werden in einen Dezimal-Wert umgerechnet Boolesche Werte Die Konstanten TRUE und FALSCHE werden als 1 bzw. 0 ausgewertet Kein case-sensitive! Kommentare # einzeilig -- einzeilig /* */ mehrzeilig Integer TINYINT SMALLINT MEDIUMINT INTEGER BIGINT 1 Byte 2 Byte 3 Byte 4 Byte 8 Byte Float FLOAT 4 Byte DOUBLE 8 Byte Datum und Zeit DATE 3 Byte DATETIME 8 Byte TIMESTAMP 4 Byte TIME 3 Byte YEAR 1 Byte Mengen ENUM (’wert1’,’wert2’, …) - Die Spalte kann einen Wert aus der Wertemenge annehmen - 16 Byte - Maximal 65535 Werte SET (’wert1’,’wert2’, …) - Die Spalte kann mehrere Werte aus der Wertemenge annehmen - 8 Byte Maximal 64 Elemente Konventionen Spaltennamen Bei einem Verweis auf eine Spalte muss das Präfix für die Tabelle bzw. Datenbank nicht angegeben werden – es sei denn der Verweis ist nicht eindeutig (d.h. ein Spaltenname wird in zwei oder mehr Tabellen verwendet) Tabellennamen Bei einem Verweis auf eine Tabelle muss als Präfix die Datenbank nicht angegeben werden. Es sei denn, der Verweis ist nicht eindeutig (d.h. ein Tabellenname wird in zwei oder mehr Datenbanken verwendet) Indizierung - Indizes werden verwendet, um schnell Datensätze mit bestimmten Spaltenwerten zu finden Ein definierter Index wird zur Optimierung verwendet, wenn die in der WHERE-Klausel verwendeten Spalten eine Untermenge eines mehrspaltigen Index bilden Der erste/linke Wert des Index muss in der WHERE-Klausel verwendet werden Relationale Integritätsregeln - Integrität = Unversehrtheit, keine widersprüchlichen Daten Entity-Integrität = ein Attribut, das Teil des Primary-Key ist, darf nicht NULL sein. NULL Werte sind nicht eindeutig (NULL ist nicht gleich NULL) Referentielle Integrität RI = eine Relation R2 besitze einen Foreign-Key FK, der auf einen Primary-Key PK einer Relation R1 verweist. Dann muss o Jeder Wert des FK in R2 gleich einem Wert des PK in R1 sein oder o Der Wert des FK in R2 ist ein NULL Wert Data Definition Language CREATE DATABASE [IF NOT EXISTS] db_name - Erzeugt eine Datenbank mit dem angegebenen Namen „db-name“ - Die Regeln für die Namenskonventionen sind einzuhalten - Die Angabe von IF NOT EXISTS unterdrückt die Ausgabe einer Fehlermeldung, falls bereits eine Datenbank mit dem angegebenen Namen existiert DROP DATABASE [IF EXISTS] db_name - Löscht alle Tabellen der Datenbank „db_name“ und die Datenbank selbst - Die Angabe von IF EXISTS verhindert die Ausgabe der Fehlermeldung, falls die Datenbank nicht existiert USE db_name - USE weißt MySQL an, die angegebene Datenbank als aktuelle Datenbank zu verwenden. - Gültig bis zur Eingabe eines neuen USE-Statements bzw. bis zum Ende der Sitzung - Es kann auf alle Datenbanken zugegriffen werden, nicht nur auf die im USEStatement ausgewählte CREATE TABLE [IF NOT EXISTS] tabname (create_definition, …) - CREATE TABLE erzeugt eine neue Tabelle mit dem Namen „tabname“ in einer Datenbank - Die Regeln für die Namenskonventionen sind einzuhalten - IF NOT EXISTS unterdrückt die Ausgabe der Fehlermeldung, falls bereits eine Tabelle mit dem Namen existiert - z.B.: CREATE TABLE testdb.mitarbeiter ( id INTEGER NOT NULL, shortname CHAR(3), name VARCHAR(30), vorname VARCHAR(30), titel SET ('Dr','Ing','Prof'), room INTEGER (5) UNSIGNED ZEROFILL def01 VARCHAR(50) DEFAULT 'AAA', def02 INTEGER DEFAULT 3, PRIMARY KEY ) TYPE = InnoDB; ALTER [IGNORE] TABLE tbl_name alter_specification - IGNORE: Wenn IGNORE nicht angegeben ist, wird der Vorgang bei Auftreten von Schlüsseldubletten abgebrochen, und ein Rollback wird durchgeführt. Ist IGNORE angegeben, dann wird nur der erste von mehreren Datensätzen mit Dubletten eindeutiger Schlüssel verwendet. Die übrigen betroffenen Datensätze werden gelöscht. Falsche Werte werden auf den nächstliegenden zulässigen Wert gesetzt - alter_specification o ADD Hinzufügen von Spalten, Indizes, Keys o ALTER Default-Wert einer Spalte ändern o CHANGE Name (und Datentyp) einer Spalte ändern o MODIFY Definition einer Spalte ändern o DROP Löschen von Spalten, Indizes, Keys o RENAME Name einer Tabelle ändern RENAME TABLE tabname TO new_tabname DESCRIBE tbl_name - Anzeigen einer Tabellenstruktur SHOW CREATE TABLE tbl_name - Anzeigen des Create Statements CREATE TABLE (… … , FOREIGN KEY (child_col) REFERENCES tbl_name (parent_col1, parent_col2, …) [ON DELETE { RESTRICT | CASCADE | SET NULL | NO ACTION } ] [ON UPDATE { RESTRICT | CASCADE | SET NULL | NO ACTION } ] …) TYPE = InnoDB; - Restrict = Man darf den Parent-Datensatz nicht löschen, solange noch Verknüpfungen bestehen - No Action = Ergebnis gleich mit Restrict - Cascade = Verknüpfungen werden mitgelöscht - Set Null = Verknüpfungen werden auf NULL gesetzt CREATE INDEX index_name ON tbl_name (col_name [ ASC | DESC ]) Erstellt den Index einer Tabelle Reihenfolge von links unbedingt einhalten DROP INDEX index_name ON tbl_name Löscht den Index einer Tabelle SHOW INDEX FROM tbl_name Indizes einer Tabelle auflisten Data Manipulation Language INSERT [IGNORE] INTO tbl_name [(col_name, …)] VALUES ({expr | DEFAULT},…),(…),… Col_name =Spaltennamen müssen angegeben warden Anzahl col_names und values müssen übereinstimmen IGNORE = Bei Schlüsselverletzungen durch Dubletten wird ein Datensatz nicht eingefügt und die Fehlermeldung unterdrückt Eine Spalte, die als NOT NULL definiert ist und die in der INSERT Anweisung nicht mit einem Wert versorgt wird, wird auf dem impliziten Standardwert für den betreffenden Spaltendatentyp gesetzt: o Numerischen Typen: 0 o String Typen: Leer-String(‘‘) o Datums- und Zeittypen: Der „Nullwert“ Setzen einer numerischen Spalte auf einen Wert außerhalb des zulässigen Wertebereichs o Der Wert wird auf den Min- bzw. Max. Wert des Wertebereichs gesetzt UPDATE [IGNORE] tbl_name SET col_name1=expr1 [,col_name2=expr2 …] where where_condition [LIMIT row_count] LIMIT = UPDATE wird beendet, sobald die Anzahl von row_count Datensätzen gefunden wurden, die der WHERE-Klausel entsprechen REPLACE funktioniert auf exakt gleiche Weise wie der INSERT. Der Unterschied besteht darin, wenn ein alter Datensatz denselben Wert wie ein neuer Datensatz für einen Primärschlüssel oder einen eindeutigen Index hat, der alte Datensatz gelöscht wird, bevor der neue eingefügt wird. DELETE FROM tbl_name WHERE where_condition TRUNCATE tbl_name TRUNCATE TABLE leert eine Tabelle vollständig, indem die Tabelle gelöscht und anschließend neu erstellt wird. Schneller bei großen Tabellen als DELETE FROM TABLE LOAD DATA [LOCAL] INFILE ‘file_name‘ INTO TABLE tbl_name [IGNORE number LINES] LOCAL zeigt an, dass die Eingabedatei auf dem Client liegt. Wird LOCAL nicht angegeben, wird auf dem Server nach dem Dateinamen gesucht IGNORE number LINES: Die ersten number Zeilen der Eingabedatei werden ignoriert und erst die folgenden Zeilen in die Tabelle eingelesen. z.B. Dokumentationszeilen SELECT ListeSpalten FROM ListeTabellen [WHERE Bedingungen] [GROUP BY ListeSpalten] [HAVING Auswahlbedingung] [ORDER BY Optionen] WHERE schränkt die Ergebnismenge ein. In die Bedingung können Vergleichsoperatoren eingesetzt werden. Der Vergleich aus NULL wird mit IS NULL oder IS NOT NULL durchgeführt Auswahlbedingungen können logisch mit AND und/oder OR verknüpft werden Mit ORDER BY werden die Ergebnisspalte(n) sortiert. ASC sortiert aufsteigend, DESC sortiert absteigend. Bei Angabe mehrerer Spalten wird zunächst nach der Ersten sortiert, anschließend nach der Zweiten unter Berücksichtigung der Ersten,… Mit GROUP BY wird die Ergebnismenge zusammengefasst. Die Verwendung von GROUP BY ist nur sinnvoll in Verbindung mit Funktionen wie COUNT(), AVG(), … HAVING ermöglicht eine weitere Einschränkung der Ergebnismenge. Wirkt nicht auf die Originaldaten, sondern nur auf das Ergebnis einer Abfrage SELECT DISTINCT ListeSpalten FROM ListeTabelle Die Spalten einer Tabelle ohne inhaltliche Duplikate ausgeben Join - Verbindet zwei Relationen (ähnlich kartesischem Produkt) Allerdings nur für solche Tupel, in der zwei bestimmte Attributwerte in einer gewissen Beziehung zueinander stehen Werden bei einer SELECT-Abfrage Informationen aus mehreren Tabellen gewonnen, bezeichnet man die dazu notwendige Verknüpfungen als JOINs Werden n Tabellen in einem JOIN miteinander verknüpft, müssen mind. N-1 JOIN-Bedingungen in der Abfrage formuliert werden Regeln: o Die Attribute, über die der JOIN ausgeführt wird, müssen nicht zwingend Keys sein o Die JOIN-Attribute der beiden Relationen müssen nicht den gleichen Namen haben o Jede Relation kann mit jeder anderen Relation geJOINt werden (auch mit sich selbst!) o Die den Join-Attributen zugrundgelegten Domänen müssen gleich sein Theta-Join - Allgemeinste Form des JOIN Die Beziehung, der ein JOIN-Attribut unterliegen muss wird mit THETA 8 bezeichnet und stellt einen der Vergleichsoperatoren dar Inner Join - Standard Join über mehrere Tabellen SELECT attr_name, attr_name2 FROM tbl_name, tbl_name2 WHERE attr1 = attr2 Full / Cross Join - Kartesisches Produkt zweier Tabellen Wird in einer SELECT-Abfrage über zwei Tabellen keine WHERE-Klausel formuliert, so wird automatisch das kartesische Produkt zwischen den beiden Tabellen gebildet Self-Join - Verknüpfung einer Tabelle mit sich selbst Ein SELF JOIN verknüpft eine Tabelle mit sich selbst, um nach Beziehungen zwischen den Zeilen einer Tabelle zu suchen SELECT attr_1, attr_2 FROM tbl_1 tb1, tbl_1 tb2 WHERE attr_1 = X AND tb1.attr_2 = tb2.attr2 Left / Right Join - Der LEFT JOIN versucht zu jeder Zeile der ersten Tabelle (links) ein Gegenstück in der zweiten Tabelle zu finden (rechts) RIGHT JOIN ist analog zum LEFT JOIN, nur, dass die Tabellenreihenfolge vertauscht ist und es RIGHT JOIN heißt SELECT Spaltenliste FROM table_left LEFT JOIN table_right ON LEFT-JOINBEDINGUNG | USING (spaltenliste) [WHERE weitere Bedingungen…] ON LEFT JOIN Bedingung: Die LEFT-JOIN-Bedingung kann jede Bedingung enthalten, die in einer WHERE-Klausel formuliert werden kann. USING (spaltenliste): Enthält alle Spalten, die in beiden Tabellen existieren müssen Natural Join - Der NATURAL JOIN ist identisch zu einem INNER JOIN, der alle Spalten miteinander verknüpft, die in beiden Tabellen vorkommen Der NATURAL LEFT JOIN ist identisch zu einem LEFT-JOIN mit einer USING Klausel SELECT Spaltenliste FROM tab_links NATURAL [LEFT] JOIN tab_rechts UNION - SELECT … FROM … WHERE … UNION SELECT … FROM … WHERE … [UNION SELECT …] UNION fasst mehrere Ergebnismengen zu einer Menge zusammen. Die Struktur der zusammenfassenden Spalten muss identisch sein Die Spaltennamen und Datentypen der Ergebnismenge leiten sich aus der ersten SELECT Abfrage ab Alle Zeilen der Ergebnismenge sind eindeutig, d.h. Duplikate werden nicht ausgegeben. Mit UNION ALL werden alle Zeilen inkl. aller Duplikate ausgegeben Wird eine Tabelle mit einbezogen, deren Struktur ein Feld des ersten SELECT nicht abdeckt, muss ein „Leerfeld“ (’’) in die Abfrage eingefügt werden VIEWS - Ein View ist eine logische Relation Der Datenbankbenutzer kann einen View wie eine normale Tabelle abfragen Ein View stellt im Wesentlichen einen Alias für eine Abfrage dar CREATE VIEW view_name AS select_statement ALTER VIEW view_name AS select_statement DROP VIEW [IF EXISTS] view_name SHOW CREATE VIEW view_name TRANSAKTIONEN START TRANSACTION; … … COMMIT; - START TRANSACTION leitet eine Transaktion ein - COMMIT stößt die Abarbeitung der Anweisungen innerhalb der Transaktion aus - Eine Transaktion ist eine Abfolge zusammenhängender Operationen, die als unteilbare Operationen betrachtet werden - Alle Vorgänge müssen als Ganzes durchgeführt oder zurückgenommen werden - Eine Transaktion ist atomar, da sie nicht in kleinere Einheiten zerlegt werden kann - Es ist generell besser eine Transaktion aus zusammenhängenden Änderungen zu verlieren, als eine Datenbank mit teilweise durchgeführten Änderungen wiederherzustellen. Dies kann zu Inkonsistenz führen - Um Transaktionen durchführen zu können, brauch man transaktionssichere Tabellentypen (z.B. InnoDB) Phasen der Datenbankentwicklung - Anforderungsanalyse (Projektumfeld) o Ermittlung des Informationsbedarfs der Benutzer o Informationsstruktur erfassen und festlegen - Konzepterstellung (semantisches Modell) o Formale und strukturierte Beschreibung aller relevanten Objekte. o Und deren Beziehungen untereinander -> ER-Modell - Entwurf eines verarbeitungsorientierten Modells o Umsetzung des semantischen Datenmodells in ein relationales - Physischer Entwurf und Implementierung mit Software o Modellierung der Datenbankstruktur mit einem relationalen Datenbankmanagementsystem - Mögliche Probleme beim Verwalten von Daten o Redundanz Da die Daten jeweils speziell für bestimmte Anwendungen entworfen werden, werden dieselben Daten in verschiedenen Dateien wieder auftauchen. Redundanz führt zu Speicherverschwendung und zu erhöhten Verarbeitungskosten, vor allem bei Änderungen. Schlimmer jedoch ist es, dass diese Redundanz in der Regel nicht zentral kontrolliert wird, so dass Konsistenzprobleme auftreten. o Inkonsistenz Die Konsistenz der Daten kann nur schwer gewährleistet werden. Bei der Änderung einer Größe müssten alle Dateien geändert werden, die diese Größe beinhalten und diese Änderungen müssten so miteinander abgestimmt geschehen, dass nicht verschiedene Programme zum selben Zeitpunkt unterschiedliche Werte derselben Größe sehen können o o Daten-Programm-Abhängigkeiten Ändert sich der Aufbau einer Datei oder ihrer Organisationsform, so müssen darauf basierende Programme geändert werden. Wird beispielsweise für eine Anwendung ein weiteres Datenelement in einem Satztyp benötigt, so müssen infolge der notwendigen Neudefinitionen der Datei alle Programme geändert werden, ob sie dieses neue Datenelement sehen wollen oder nicht. Inflexibilität Da die Daten nicht in ihrer Gesamtheit sondern nur anwendungsbezogen gesehen werden, ist es in vielen Fällen sehr kompliziert, neue Anwendungen oder Auswertung vorhandener Daten zu realisieren. Dies gilt insbesondere für Auswertungen, die Daten aus verschiedenen Dateien benötigen. Die Organisation nach diesem konventionellen Vorgehen ist sehr wenig anpassungsfähig an die sich verändernden Anforderungen in einem Unternehmen