Sicherheit

Oberstes Ziel bei der Entwicklung der Bilderdatenbank ist die Datensicherheit. Es wurden diverse Vorkehrungen getroffen, um den Verlust oder die ungewollte Zerstörung von Bildern zu vermeiden. Durch verschiedenen Techniken der Fehlerbehandlung bzw. Fehlervermeidung werden Verluste eingeschränkt. Ein wesentlicher Beitrag zur Erreichung dieses Zieles wird dadurch erreicht, dass kein neues Datenbankmanagementsystem entwickelt wurde, sondern auf ein etabliertes System zurückgegriffen wurde.

Eine ausführeliche Beschreibung zum Thema Datenschutz und Datensicherheit in pixafe finden Sie in der Broschüre zum Datenschutz und dem Video zum Datenschutzdialog

pixafe Family Video

Bildverzeichnis

Alle Bilder, die in der Bilderdatenbank abgelegt sind, werden in einem speziellen Bildverzeichnis (Datenbankverzeichnis) abgelegt. Während der Anzeige oder Bearbeitung mit einem Bildverarbeitungsprogramm wird auf einer Kopie des Bildes im Arbeitsverzeichnis gearbeitet. Nach der Änderung eines Bildes mittels Bildverarbeitungsprogramm muss dieses explizit erneut in der Datenbank gespeichert werden. Hiermit wird sichergestellt, dass bei einem Absturz eines Fremdsystems (Bildverarbeitungsprogramm) keine Bilder in der Datenbank beschädigt werden.

Löschverzeichnis

Beim Löschen eines Bildes aus der Bilderdatenbank wird das zu löschende Bild nicht sofort aus dem System entfernt, sondern zuvor in den Papierkorb (das Löschverzeichnis) verschoben. Erst dann, wenn der Benutzer das Löschverzeichnis explizit leert, werden die gelöschten Bilder aus dem System entfernt. Hiermit wird sichergestellt, dass keine Bilder verloren gehen, die aus Versehen gelöscht wurden, oder die bei einem Systemversagen entfernt worden wären.

Backupverzeichnis

Um den Zustand der Datenbank zu einem beliebigen Zeitpunkt sichern zu können, existiert das Backupverzeichnis. In diesem Verzeichnis werden die Inhalte der Datenbank abgespeichert, um sie auf einen anderen Rechner transportieren zu können, bzw. um nach einem Systemausfall die Datenbank rekonstruieren zu können.

Transaktionen

Transaktionen stellen die Daten-Konsistenz bei allen Zugriffen auf das Datenbanksystem sicher. Sie haben die folgenden Eigenschaften, die auch unter der Abkürzung ACID bekannt sind:

    Atomarität (Atomicity) bedeutet, dass entweder alle Operationen der Transaktion ausgeführt werden oder keine.
    Die Konsistenz (Consistency) des Datenbestandes ist zu Beginn einer Transaktion und auf jeden Fall am Ende gewährleistet.
    Die Eigenschaft Isolation stellt sicher, dass Transaktionen isoliert bzw. unabhängig voneinander ablaufen, d.h. eine Transaktion sieht nicht die möglicherweise inkonsistenten Interna einer anderen Transaktion.
    Die Dauerhaftigkeit (Durability) der Änderungen der Transaktion ist an deren Ende gegeben. Wenn also eine Transaktion erfolgreich abgeschlossen ist, können die Änderungen nur durch eine eigenständige, kompensierende Transaktion rückgängig gemacht werden.

Die Transaktion-Technik wird bei dazu genutzt sicherzustellen, dass keine inkonsistenten Daten in die Datenbank gelangen können. Vor einem Datenbankzugriff wird eine Transaktion gestartet. Wenn es dann bei deren Ausführung zu einem Fehler kommen sollte, werden alle Aktionen innerhalb der gestarteten Transaktion von der Datenbank zurückgenommen und somit deren Konsistenz sichergestellt.

Datenintegrität

Beziehungen

Die in der Datenbank abgelegten Informationen stehen in Beziehungen zueinander. Wie diese Beziehungen aussehen wurde im Datenbankschema definiert. Das DB2-Datenbanksystem achtet beim Ändern von Daten in der Datenbank (Einfügen, Löschen, Ändern) ganz genau darauf, dass die festgelegten Beziehungen eingehalten werden. Eine der Beziehungen ist, dass keine Person gelöscht werden darf, wenn sie noch auf einem Bild abgebildet ist und zu dessen Anzeige benötigt wird.

Primärschlüssel

Ein Primärschlüssel ist ein Datenbankkonstrukt, das sicherstellt, dass eindeutige Datensätze nur einmal innerhalb einer Tabelle abgelegt werden dürfen. Bei der Festlegung des Datenbankschemas wird angegeben, bei welchen Tabellenattributen es sich um Primärschlüssel handelt. Dass die Schlüsselbedingung nicht verletzt wird ist Sache des Datenbanksystems.

Fremdschlüssel

Fremdschlüssel garantieren, dass auf verwiesene Daten auch stets verfügbar sind. So wird in der Bilderdatenbank zu einem Bild eine Liste aller abgebildeten Personen in Form von Verweisen gespeichert. Hiermit ist sichergestellt, dass keine Person gelöscht werden kann, die auf einem Bild abgebildet ist, das sich noch in der Datenbank befindet.
Ein weiteres Beispiel ist die Verwaltung von Schlagwörtern in der Datenbank. Sobald ein neues Schlagwort bei der Beschriftung eines Bildes in die Datenbank aufgenommen wird, wird festgestellt, dass es sich um ein neues Schlagwort handelt. Der Benutzer wird gefragt, ob er das Schlagwort in die Datenbank einfügen möchte, oder ob er sich eventuell verschrieben hat und darum das Schlagwort noch nicht in der Datenbank vorliegt. Die Schlagwörter werden in einer speziellen Tabelle abgelegt, die Verknüpfung zu Bildern erfolgt mittels Verweisen oder Fremdschlüsseln.

Constraints

Neben den Beziehungen zwischen verschiedenen Daten gibt es auch Festlegungen für die Struktur einzelner Datenfelder, die die Datenbank überwacht. Über bestimmte Regeln wurde festgelegt, dass nur gültige Datumswerte in die Datenbank eingetragen werden können. Es wird zum Beispiel sichergestellt, dass das Datum 29.Februar 2001 nicht eingegeben werden kann.

Die folgende Bedingung (Constraint) dient dazu ein Datum nur in korrekter Form in die Datenbank zu lassen:

constraint c_dat check(
(( madeday is null and mademon is not null and madeyear is not null) or
( madeday is null and mademon is null and madeyear is not null ) or
( madeday is null and mademon is null and madeyear is null ) or
( madeday is not null and mademon is not null and madeyear is not null )) and
((mademon in (1,3,5,7,8,10,12) and madeday < 32 ) or
(mademon in (4,6,9,11) and madeday < 31 ) or
(mademon = 2 and madeday < 29 ) or
(mademon = 2 and mod( madeyear, 4) = 0 and madeday < 30 ))
-- alle Hunderter sind kein Schaltjahr (mod 100)
-- alle tausender sind wieder Schaltjahre (mod 400))