<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Integrit%C3%A4tsbedingung</id>
	<title>Integritätsbedingung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Integrit%C3%A4tsbedingung"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Integrit%C3%A4tsbedingung&amp;action=history"/>
	<updated>2026-06-25T17:06:33Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Integrit%C3%A4tsbedingung&amp;diff=351296&amp;oldid=prev</id>
		<title>imported&gt;Peter Gröbner: So gemeint?</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Integrit%C3%A4tsbedingung&amp;diff=351296&amp;oldid=prev"/>
		<updated>2025-04-25T10:02:42Z</updated>

		<summary type="html">&lt;p&gt;So gemeint?&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der Begriff &amp;#039;&amp;#039;&amp;#039;Integritätsbedingung&amp;#039;&amp;#039;&amp;#039; bezeichnet in der [[Informatik]] Bedingungen, die an den [[Zustand]] eines Prozesses oder einer Datenstruktur gestellt werden. In Bezug auf [[Datenbank]]en werden Zustände als &amp;#039;&amp;#039;[[Konsistenz (Datenspeicherung)|konsistent]]&amp;#039;&amp;#039; bezeichnet, wenn sie die Integritätsbedingungen erfüllen.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
Integritätsbedingungen beschreiben Annahmen, die über die Daten bzw. den Zustand getroffen werden, beispielsweise ein bestimmter Datentyp, ein Wertebereich oder eine Abhängigkeitsbeziehung zwischen zwei Objekten. Basierend auf diesen Annahmen kann ein Programmierer Verarbeitungsprozesse beschreiben und gegebenenfalls den Zustand eines Prozesses verändern. Die Einhaltung der Integritätsbedingungen sollte nicht dem Programmierer überlassen werden, sondern vom System geprüft werden.&lt;br /&gt;
Inkonsistente Zustände (das heißt Zustände, die die Integritätsbedingungen verletzen) oder ungenau definierte Integritätsbedingungen sind häufige Ursachen für [[Programmfehler|Programmierfehler]], da die einzelnen Unterprogramme / Funktionen sich auf deren Einhaltung verlassen.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
=== Datenbanken ===&lt;br /&gt;
[[Relationale Datenbank]]systeme bieten die Möglichkeit, bei der Definition eines relationalen Schemas Integritätsbedingungen zu formulieren, deren Einhaltung von dem System garantiert wird. Ein typisches Beispiel für Integritätsbedingungen sind [[Schlüssel (Datenbank)|Schlüssel]]- und [[Referenzielle Integrität|Fremdschlüsselbeziehungen]].&lt;br /&gt;
&lt;br /&gt;
Es lässt sich spezifizieren, auf welche Art die Einhaltung gewährleistet bzw. wie auf Änderungen reagiert werden soll. Eine Änderung, die eine Integritätsbedingung verletzt, kann entweder ganz unterbunden werden oder aber weitere Änderungen zur Wiederherstellung der Integrität nach sich ziehen (siehe hierzu: [[Datenbanktrigger]]). Das nachfolgende [[SQL]]-Beispiel modelliert auf stark vereinfachte Weise einen Zusammenhang zwischen [[Professor]]en, [[Student]]en, [[Vorlesung]]en und [[Prüfung]]en. Das Augenmerk soll hier auf die Fremdschlüsselbeziehungen gelegt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create table Professor (&lt;br /&gt;
  ID           integer primary key&lt;br /&gt;
);&lt;br /&gt;
create table Student (&lt;br /&gt;
  MatrNr       varchar(16) primary key&lt;br /&gt;
);&lt;br /&gt;
create table Vorlesung (&lt;br /&gt;
  ID           integer primary key,&lt;br /&gt;
  Name         varchar(32),&lt;br /&gt;
  Prof         integer references Professor.ID&lt;br /&gt;
               on delete set null&lt;br /&gt;
);&lt;br /&gt;
create table Prüfung (&lt;br /&gt;
  Datum        date,&lt;br /&gt;
  Vorlesung    integer not null&lt;br /&gt;
               references Vorlesung.ID&lt;br /&gt;
               on delete no action,&lt;br /&gt;
  Stud         varchar(16) not null&lt;br /&gt;
               references Student.MatrNr&lt;br /&gt;
               on delete cascade&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Integritätsbedingungen werden in diesem Beispiel definiert:&lt;br /&gt;
{{Hauptartikel|Referentielle Integrität}}&lt;br /&gt;
* Eine Vorlesung referenziert einen Professor. Falls der Professor [[Emeritierung|emeritiert]] (und der entspr. Datensatz gelöscht) wird, bleibt die Vorlesung erhalten. Der Zusatz &amp;#039;&amp;#039;on delete set null&amp;#039;&amp;#039; löscht die Referenz auf den Professor, falls der referenzierte Datensatz gelöscht wird (Integritätsbedingung: Der referenzierte Professor hält die Vorlesung).&lt;br /&gt;
* Jede Prüfung referenziert eine Vorlesung. Solange noch eine Prüfung für eine Vorlesung existiert, darf diese Vorlesung nicht aus der Datenbank gelöscht werden. Der Zusatz &amp;#039;&amp;#039;on delete no action&amp;#039;&amp;#039; verhindert, dass ein referenzierter Datensatz aus der Tabelle „Vorlesung“ gelöscht wird. (Integritätsbedingung: Zu jeder Prüfung gibt es auch eine Vorlesung).&lt;br /&gt;
* Jede Prüfung referenziert einen Studenten, der die Prüfung ablegt. Falls der Student exmatrikuliert (und der entspr. Datensatz gelöscht wird), findet auch die Prüfung nicht statt. Der Zusatz &amp;#039;&amp;#039;on delete cascade&amp;#039;&amp;#039; führt dazu, dass eine Prüfung gelöscht wird, falls der referenzierte Student gelöscht wird. (Integritätsbedingung: Ohne Student gibt es auch keine Prüfung).&lt;br /&gt;
&lt;br /&gt;
Die Einhaltung dieser Bedingung gewährleistet die Datenbank.&lt;br /&gt;
&lt;br /&gt;
==== Benutzerrechte ====&lt;br /&gt;
Naturgemäß schränkt die Spezifikation von Integritätsbedingungen die Zahl der erlaubten Operationen ein. Da sich in einer relationalen Datenbank diese Einschränkungen auch auf andere Tabellen auswirken können als auf die konkrete Tabelle, innerhalb derer die Bedingung spezifiziert wurde, gibt es in manchen Datenbanken eine spezielle Berechtigung, die es erlaubt, eine erstellte Tabelle zu referenzieren. Im obigen Beispiel verhindert der Zusatz &amp;#039;&amp;#039;on delete no action&amp;#039;&amp;#039; das Löschen von Einträgen der Tabelle &amp;#039;&amp;#039;Vorlesung&amp;#039;&amp;#039;. Entsprechend muss der Besitzer der Tabelle &amp;#039;&amp;#039;Prüfung&amp;#039;&amp;#039; die Berechtigung besitzen, die Tabelle &amp;#039;&amp;#039;Vorlesung&amp;#039;&amp;#039; zu referenzieren.&lt;br /&gt;
&lt;br /&gt;
==== Optimierung ====&lt;br /&gt;
Da die Einhaltung von Integritätsbedingungen innerhalb der Datenbank aufwändige Prüfungen zur Folge haben kann, wird zur Verbesserung der Laufzeiten in den meisten Fällen auf deren explizite Spezifikation verzichtet. Die Folge davon sind Datenschiefstände innerhalb der Datenbank. Die dazugehörende Software muss, je nach Anwendungsszenario, die verbliebenen inkonsistenten Daten innerhalb der Datenbank erkennen und berücksichtigen können. Wenn die Einhaltung der Bedingungen durch die Anwendung selbst nicht gewährleistet ist und der resultierende Datenschiefstand nicht umgangen werden kann, läuft die Software nicht fehlerfrei.&lt;br /&gt;
&lt;br /&gt;
=== Dokumente ===&lt;br /&gt;
Eine Vielzahl von Integritätsbedingungen lassen sich auch im Kontext der Text- oder Dokumentenverarbeitung finden. Es leuchtet intuitiv ein, dass die Integrität eines Dokumentes verletzt ist, wenn das Inhaltsverzeichnis falsche Seitenzahlen beinhaltet oder Hyperlinks in HTML-Seiten ins Leere zeigen.&lt;br /&gt;
&lt;br /&gt;
In formalisierter Form lassen sich Integritätsbedingungen für [[Extensible Markup Language|XML]]-Dokumente zum Beispiel durch [[XML-Schema]] beschreiben. Die folgende XML-Element Definition könnte zum Beispiel dazu dienen, einen neuen Element-Typ zu definieren, der ausschließlich die Angaben der Körpertemperatur von Menschen zulässt. In diesem Fall 3 Dezimalstellen, 1 Nachkommastelle sowie Minimal- und Maximalwerte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;simpleType name=&amp;quot;celsiusKörperTemp&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;restriction base=&amp;quot;xsd:decimal&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;totalDigits value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;fractionDigits value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;minInclusive value=&amp;quot;30.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;maxInclusive value=&amp;quot;42.5&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/restriction&amp;gt;&lt;br /&gt;
&amp;lt;/simpleType&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Constraint]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* [[Alfons Kemper]], André Eickler: &amp;#039;&amp;#039;Datenbanksysteme. Eine Einführung.&amp;#039;&amp;#039; 5., aktualisierte und erweiterte Auflage. Oldenbourg, München u. a. 2004, ISBN 3-486-27392-2.&lt;br /&gt;
* Victor M. Markowitz: &amp;#039;&amp;#039;Safe Referential Structures in Relational Databases.&amp;#039;&amp;#039; In: Guy M. Lohman, Amílcar Sernadas, Rafael Camps (Hrsg.): &amp;#039;&amp;#039;Very large Data Bases.&amp;#039;&amp;#039; Proceedings of the Seventeenth International Conference on Very Large Data Bases. September 3–6, 1991, Barcelona (Catalonia, Spain). Kaufmann, San Mateo CA u. a. 1991, ISBN 1-55860-150-3, S.&amp;amp;nbsp;123–132.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://dev.mysql.com/doc/refman/5.1/de/ansi-diff-foreign-keys.html Fremdschlüssel] in [[MySQL]] 5.1, [http://dev.mysql.com/doc/refman/5.1/de/example-foreign-keys.html Beispiele zu MySQL 5.1]&lt;br /&gt;
* [http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/Integritaetsbedingung Klassifizierung von Integritätsbedingungen und weitere Beispiele]&lt;br /&gt;
&lt;br /&gt;
{{SORTIERUNG:Integritatsbedingung}}&lt;br /&gt;
[[Kategorie:Datenbanktheorie]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Peter Gröbner</name></author>
	</entry>
</feed>