Tupel
Der Begriff Tupel stammt aus der Mathematik und bezeichnet eine geordnete Menge von Objekten, die auf bestimmte Weise zusammengefasst und dargestellt werden – zum Beispiel als Listen mit Datenfeldern. Im Gegensatz zu einer Menge, deren Elemente ungeordnet sind, sind Tupel in einer Reihenfolge geordnet. Bei Mengen ist die Reihenfolge egal, bei Tupeln spielt die Reihenfolge dagegen eine wichtige Rolle, da hierdurch eine Ordnung entsteht. Diese mathematischen Eigenschaften der Tupel sind der Grund, warum sie in der Informatik verwendet werden, denn Tupel können als geordnete Listen aufgefasst werden, wenn ihre Ordnung oder die sogenannte Indexmenge genau definiert ist. Bei relationalen Datenbanken, Indexstrukturen und in der Programmierung dienen Tupel als theoretische Grundlage für den Aufbau spezieller Datenstrukturen.
Allgemeine Informationen zum Thema
Ein Tupel ist als geordnetes Paar definiert, das in einer Klammer geschrieben und durch Kommata oder Semikolons getrennt wird: 2-Tupel = (1,2) oder 3-Tupel = (1,2,3). Die Objekte, die in der Klammer sind, werden als Komponenten bezeichnet. In diesem Fall sind es lediglich zwei beziehungsweise drei Komponenten, die numerisch aufeinander folgen. Tupel können aber auch mehrere Komponenten enthalten, wobei 3-Tupel als Tripel, 4-Tupel als Quadrupel und 5-Tupel als Quintupel bezeichnet werden können.[1] Im Grunde lassen sich mit dieser Notation auch Tupel beschreiben, die n-Komponenten enthalten: n-Tupel = (1,...,n), was in der Informatik als Stream bezeichnet wird.
Diese abstrakte mathematische Definition von Tupeln soll verdeutlichen, dass jede Komponente eines Tupels einem damit verknüpften Datensatz eindeutig zugeordnet werden kann. Andernfalls wäre der Zugriff auf eine derartige Datenstruktur nicht möglich. Wenn ein Anwender einen Datensatz aus einer relationalen Datenbank aufrufen möchte, muss dieser Datensatz auf bestimmte Weise geordnet sein. Genau dies erledigen Tupel – wobei es unterschiedliche Schemata der Ordnung gibt und die Tupel in der Informatik eher mit den Bezeichnungen einzelner Datenstrukturen aufgerufen werden. Etwa als Array, Liste oder Stream. Die Tupel bilden für diese Datentypen oder -modelle die zugrunde gelegten Strukturen.
Funktionsweise
In der Informatik beschreibt der Begriff Tupel eine geordnete Zusammenfassung von Werten, die auch als Attribute oder Datenfelder definiert werden. Jedes Datenfeld ist charakterisiert durch den sogenannten atomaren Inhalt. Das heißt, dass das, was sich im Datenfeld befindet, kein komplexer Inhalt sein darf und somit nicht weiter zerlegt werden kann. Bei dem folgenden Tupel dürften also die Werte wie Name oder Adresse nicht weiter zerlegt werden, da jeder Wert genau einen Datensatz darstellt:
Datenbankeintrag 1 = (Name, Adresse, Email, Telefonnummer)
Sowohl bei der Speicherung eines neuen Datensatzes als auch beim Abruf eines alten Datensatzes ist die Reihenfolge wichtig. Zwar können einzelne Datenfelder gesucht und gelesen werden, aber dies ist nur möglich, weil sie eine bestimmte Reihenfolge aufweisen, die durch den Datenbankeintrag 1 bis n gegeben ist. Gleiches gilt für die Speicherung: Jeder neue Datensatz wird den Einträgen durch diese Reihenfolge eindeutig zugeordnet. Der Datenbankeintrag wird dabei als Schlüssel bezeichnet. Jeder Schlüssel darf nur ein Mal vorkommen.
Falls Datenfelder zerlegt werden sollen, wird dies über die Datenstruktur und die Anzahl der Schlüssel geregelt, denn Tupel können durchaus andere Listen, Strings oder Datentypen enthalten – aber lediglich in anderen Tabellen, deren Zuordnung durch einen Schlüssel eindeutig ist. Relationale Datenbanken haben ja gerade den Vorteil, dass sie durch die Schlüssel (auch Indexmenge) auf bestimmte Weise geordnet sind. Die meisten relationalen Datenbanken arbeiten dabei mit einer Attributnotation: Das bedeutet, dass jeder Tupel durch die Angabe von Schlüssel-Wert-Paaren definiert ist, die auch Attribute genannt werden. Eine Tabelle hat dann eine Reihenfolge von Schlüsseln, deren Datenfelder aus der Angabe von Attributen und Eigenschaften bestehen.[2] Auf diese Weise kann der oben genannte Datenbankeintrag 1 folgendermaßen erweitert werden:
Datenbankeintrag 1 = (Name = Martin, Adresse = Musterweg, Email = martin@muster.de, Telefonnummer = 017012345)
Ein Problem bei dieser Notation besteht darin, dass kein Datenfeld oder Attribut-Wert-Paar doppelt sein darf. Dies würde zu einer Uneindeutigkeit führen. Die Relationen zwischen Datenbankeinträgen und den Attribut-Wert-Paaren wären nicht mehr klar bestimmt und das verarbeitende System gibt Ergebnisse aus, die sich widersprechen können.
Allerdings können derartige Probleme durch eine klare und umfangreiche Datenstruktur, die zu den zu speichernden Daten passt, vermieden werden. Konkret heißt das, dass es durchaus möglich ist, die Anzahl der Datenfelder so zu wählen, dass widersprüchliche oder doppelte Einträge effektiv vermieden werden. Zum Beispiel können die Datenbankeinträge um weitere Attribut-Wert-Paare wie Stadt, Straße, Alter, Kundenummer oder andere Daten erweitert werden. Zentral in diesem Zusammenhang ist die Reihenfolge der Schlüssel: Sie darf sich nicht verändern, damit die Relationen zwischen den Datenbankeinträgen 1 bis n und den damit verbundenen Datenfeldern eindeutig bestimmt sind.
Beispiele
Die Nutzung von Tupeln in Datenstrukturen ist oft von dem verwendeten Programmierparadigma abhängig. In den meisten funktionalen und imperativen Programmiersprachen werden Tupel angewendet, in der objekt-orientierten Programmierung lassen sich dagegen häufig Objekte als Tupel beschreiben. Ein Auswahl an Beispielen:[3]
- In der Datenbanksprache SQL sind Tupel eine Datenstruktur, die bei der Definition, Speicherung und den unterschiedlichen Abfragen zum Einsatz kommen kann. Die Basis für Tupel bilden bekanntlich Tabellen und Tabellen sind der Basisdatentyp in SQL.
- Tupel werden in vielen Programmiersprachen als Daten- und Abfragetyp verwendet – ebenso wie Tabellen. Zum Beispiel in Haskell, Prolog, Python, Java, C++ oder Lisp.
- In Standard-Programmierbibliotheken oder Frameworks wie .NET oder Ruby werden Tupel ebenfalls als Datentyp angeboten.
Bedeutung für die Programmierung
Die Bedeutung von Tupeln für die Programmierung ist enorm. Ein wesentlicher Vorteil von Tupeln und der Darstellung von Informationen als Tabellen besteht in der Option, komplexe Daten und Sachverhalte so abzubilden, dass informationstechnische Abfragen in diesen Daten stattfinden können. Dadurch, dass Daten in Relationen oder Tupeln gespeichert werden können, ist es möglich, diese Informationen via Computer zu extrahieren und die Daten beispielsweise an einen anderen Programmteil abzugeben, um eine bestimmte Aktion durchzuführen. Denn die zweiwertige Logik in der Informatik erfordert Datenstrukturen, die binär gespeichert werden können. Tabellen, Tupel, Arrays und Matrizen erfüllen diese Bedingung.
Einzelnachweise
Weblinks