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 Java

    Und eine Relation Programmiersprachen :

    Programmiersprache
    C++
    Java
    Pascal

    Die 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 1

    Ich 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! 🕶 🤡


Anmelden zum Antworten