Relationale Algebra: Wie funktioniert die Division?
-
Hallo,
Ich habe ein kleines Problem mit der relationalen Algebra, um genau zu sein mit der Division (%).
Also mal als Beispiel: Angenommen ich habe eine Relation:
Programmierer:
Programmierer | Programmiersprache
Hansi C++
Hansi Java
Hansi Pascal
Bernd Pascal
Klaus JavaUnd eine Relation Programmiersprachen :
Programmiersprache
C++
Java
PascalDie Relation Programmierer % Programmiersprache würde mir dann einfach alle Programmierer liefern die in allen drei Sprachen programmieren, in dem Fall also nur:
Hansi
Soweit ist das auch alles klar, und soweit findet man das auch tausendmal im Internet beschrieben, einen Fall konnte ich aber nicht finden:
Was ist dann in folgendem Fall: Die Realtion Programmierer soll jetzt noch die Spalte Projekt enthalten. Die soll halt angeben in welchem Projekt wer, mit was programmiert:
Programmierer | Programmiersprache | Projekt
Hansi Java Projekt 1
Hansi C++ Projekt 2
Hansi Pascal Projekt 1
Hansi C++ Projekt 1Ich hoffe es ist schon klar worauf ich hinaus will.
Würde mir Programmierer % Programmiersprache in obigen Beispiel folgendes liefern:
Hansi | Projekt 1
Sprich bezieht sich der Divisions-Operator nun auch auf alle anderen Spalten? Also verbal: Der Division Operator wählt nun alle Einträge in deren Spalte Programmiersprache alle Einträge aus "Programmiersprachen" vorkommen und die sich in allen anderen Attributen gleichen?
Oder ist es so, dass der Division-Operator alle Tupel auswählt bei denen der Primärschlüssel (in dem Beispiel die Spalte Programmierer) gleich ist, und in denen alle drei Einträge aus "Programmiersprache" vorkommen ?
-
Du kannst es Dir in der englischen Wikipedia mal durchspielen:
http://en.wikipedia.org/wiki/Relational_algebra
Relation R = (Programmierer | Programmiersprache | Projekt )
Relation S = (Programmiersprache )
Projektion π: Alle Attribute die in R, aber nicht in S auftauchen {Programmierer | Projekt}1. T := Πa1,...,an(R) × S
=>Hansi C++ Projekt 1 Hansi Java Projekt 1 Hansi Pascal Projekt 1 Hansi C++ Projekt 2 Hansi Java Projekt 2 Hansi Pascal Projekt 2 Hansi C++ Projekt 1 Hansi Java Projekt 1 Hansi Pascal Projekt 1 Hansi C++ Projekt 1 Hansi Java Projekt 1 Hansi Pascal Projekt 1
2. U := T - R
=>Hansi Java Projekt 2 Hansi Pascal Projekt 2
3. V := Πa1,...,an(U)
=>Hansi Projekt 2
4. W := Πa1,...,an(R) - V
=>Hansi Projekt 1
Edit: Die Projektion erzeugt lt. Artikel ein Set, das Duplikate mit entfernt. Deshalb hier nur ein Tupel in der Ergebnisrelation.
Hättest Du aber auch selber rauskriegen können!