Abschnittsübersicht

    • SQLite als gewähltes Datenbanksystem

      Vor der Implementierung der Tabellen des relationalen Modells in einem Datenbanksystem wird jedem Attribut ein geeigneter Datentyp zugeordnet. Zusätzliche Festlegungen können den zulässigen Wertebereich einschränken und damit zur Sicherung der Datenintegrität beitragen.

      Datentypen

      Wir unterscheiden zwischen den Datentypen (siehe auch SQLite-Dokumentation)

      • INTEGER – vorzeichenbehaftete Ganzzahl, gespeichert in maximal 8 Byte,
      • REAL – vorzeichenbehaftete Gleitkommazahl, gespeichert als 8-Byte-Gleitkommewert nach IEEE 754,
      • TEXT – Zeichenkette, gespeichert in einer von SQLite unterstützten Unicode-Kodierung,
      • BLOB – folge von binären Daten, die unverändert gespeichert werden.

      SQLite besitzt keine eigenen Speicherklassen für Datums-, Zeit- oder Wahrheitswerte. Solche Werte werden mithilfe der vorhandenen SQLite-Datentypen gespeichert. Bei der Dateneingabe sind Schreibweisen einzuhalten.

      • DATE – zweckmäßig als TEXT in der Form 'YYYY-MM-DD'
      • TIME – zweckmäßig als TEXT in der Form 'HH:MM:SS'
      • DATETIME – zweckmäßig als TEXT in der Form 'YYYY-MM-DD HH:MM:SS'
      • BOOLEAN – üblicherweise als INTEGER mit den Werten 0 und 1

      Wertebereichsintegrität

      Bei der Definition von Attributen sind Wertebereichseinschränkungen und Vorgabewerte möglich, beispielsweise

      • NULL/Nicht NULL: legt fest, ob ein fehlender Wert zulässig ist,
      • Eindeutigkeit (UNIQUE): Attributwert muss über alle Datensätze hinweg eindeutig sein,
      • Standard (DEFAULT): Vorgabe eines Standardattributwertes, der verwendet wird, wenn beim Einfügen kein anderer Wert angegeben wird,
      • Zustandsprüfung (CHECK): Festlegung einer Bedingung, die ein einzutragender oder geänderter Wert erfüllen muss in Analogie zur WHERE-Klausel bei SQL-Abfragen.


      Bild: Festlegung der Attributeigenschaften in SQLiteStudio

      Festlegung von Primär- und Fremdschlüsseln

      Besteht der Primärschlüssel aus genau einem Attribut, erfolgt diese Festlegung bei der Definition des Attributs durch die Option Primärer Schlüssel. Weitere Optionen (AUTOINCREMENT, Sortierung) sind möglich.


      Bild: Festlegung zusätzlicher Primärschlüsseleigenschaften in SQLiteStudio

      Liegt ein zusammengesetzter Primärschlüssel vor, so sind die einzelnen Attribute ohne die Aktivierung der Option Primärer Schlüssel festzulegen. Anschließend wird unter Bedingungen der zusammengesetzte Primärschlüssel festgelegt.

       
      Bild: Definition eines zusammengesetzten Primärschlüssels mittels Bedingungsdefinition in SQLiteStudio

      Dem Fremdschlüsselattribut wird die referenzierte Tabelle mit dem zugehörigen Schlüsselattribut zugeordnet..


      Bild: Festlegung der Fremdschlüsseleingeschaft und Setzen des Verweises in die Fremdtabelle in SQLiteStudio

      Unter Reaktionen sollte festgelegt werden, was beim Ändern/Löschen eines Datensatzes geschieht. Es gilt dabei:

      • NO ACTION: Die Änderung bzw. Löschung wird nicht zugelassen, wenn dadurch ein ungültiger Fremdschlüsselverweis entstehen würde
      • CASCADE: Änderungen des referenzierten Schlüsselwertes bzw. Löschungen werden auf die abhängigen Fremdschlüssel-Datensätze übertragen
      • RESTRICT: Die Änderung oder Löschung des referenzierten Datensatzes wird verhindert, solange abhängige Datensätze vorhanden sind
      • SET NULL/DEFAULT: Der Fremdschlüssel abhängiger Datensätze wird auf NULL bzw. den definierten Standardwert gesetzt. Dies ist nur möglich, wenn diese Werte zulässig sind
    • Überlegungen zu Datenintegrität

      Fassen wir unser Wissen zur Datenintegrität zusammen. Wir unterscheiden drei Bereiche:

      Wertebereichsintegrität – Integrität auf Datenfeldebene

      • Jeder Attributwert muss zum festgelegten Wertebereich des Attributs gehören. Neben dem Datentyp können weitere Bedingungen festgelegt werden, beispielsweise durch NOT NULL oder CHECK.

      Entitätsintegrität – Integrität auf Datensatzebene

      • Jeder Datensatz einer Relation muss eindeutig identifizierbar sein. Dazu besitzt die Relation einen Primärschlüssel. Dessen Wert muss für jeden Datensatz eindeutig sein und darf nicht NULL sein.

      Referentielle Integrität – Integrität auf Beziehungsebene

      • Beziehungen zwischen Relationen werden durch Fremdschlüssel dargestellt. Ein Fremdschlüsselwert muss auf einen vorhandenen Schlüsselwert der referenzierten Relation verweisen oder – sofern zulässig – NULL sein.
      • Auch beim Ändern oder Löschen von Datensätzen dürfen keine ungültigen Fremdschlüsselverweise entstehen. Mithilfe entsprechender Referenzaktionen wie RESTRICT, CASCADE oder SET NULL legt das Datenbanksystem fest, wie in solchen Fällen verfahren wird.
      • Integritätsbedingungen tragen dazu bei, einen konsistenten, also widerspruchsfreien Datenbestand zu erhalten.
    • Lösungen: