Hauke: Abgeleitete Attribute in einer Relation

Hallo,

ich habe folgende Frage und zwar wie realisiere ich ein abgeleitetes Attribute, dass zum Beispiel in einem ER-Model aufgezeichnet ist? Wenn ich zum Beispiel eine Entität "BLUB" habe mit den Attributen A und B, und Attribute C soll nun die Summer von A und B sein, wie realsiert man sowas?

Ich habe es zZ per SELECT gemacht, also
SELECT A,B,SUM(A,B) AS C FROM BLUB   (so ungefähr)
aber ich glaube das ist das kein abgeleitetes Attribut, weil es ja nicht in der Datenbankstruktur ist.

Nun habe ich überlegt, ob sowas mit Triggern (Oracle) funktioniert, also die onupdate und oninsert das Attribut neu setzen, nur da weiß ich nicht, wie das funktioniert. Dazu kommt, dass es in Oracle scheinbar keine onUpdate Funktion gibt (hatte hier schonmal gestern jemand gefragt, aber keine Antwort erhalten). Oder kann es sein, dass das mit Funktionen in Oracle gemacht wird? Also ich brauche eigentlich nur einmal die Richtung und Ansätze, den Rest finde ich schon irgendwie raus :-)

Es sollte möglichst "professionell" sein, da es für eine Diplomarbeit verwendet wird :-)

Ich danke euch schonmal allen für Eure Hilfen
Mfg Hauke

PS.: Schonmal frohe Ostern an alle :-D

  1. ich habe folgende Frage und zwar wie realisiere ich ein abgeleitetes Attribute, dass zum Beispiel in einem ER-Model aufgezeichnet ist? Wenn ich zum Beispiel eine Entität "BLUB" habe mit den Attributen A und B, und Attribute C soll nun die Summer von A und B sein, wie realsiert man sowas?

    Beschaeftige Dich mal mit dem Thema Normalisierung.
    Berechnete Werte sollten U.E. nur in Ausnahmefaellen gespeichert werden.
    Und ja, was ist eigentlich genau Deine Frage?

    Ich habe es zZ per SELECT gemacht, also
    SELECT A,B,SUM(A,B) AS C FROM BLUB   (so ungefähr)
    aber ich glaube das ist das kein abgeleitetes Attribut, weil es ja nicht in der Datenbankstruktur ist.

    Es gibt keine "abgeleiteten Attribute" in dem zumindest von Dir Uns suggerierten Sinn.

    Nun habe ich überlegt, ob sowas mit Triggern (Oracle) funktioniert, also die onupdate und oninsert das Attribut neu setzen, nur da weiß ich nicht, wie das funktioniert.

    Klar, sowas wuerde funktionieren, ist aber nicht gut.

    Dazu kommt, dass es in Oracle scheinbar keine onUpdate Funktion gibt (hatte hier schonmal gestern jemand gefragt, aber keine Antwort erhalten).

    Aber einen entsprechenden Trigger.

    Oder kann es sein, dass das mit Funktionen in Oracle gemacht wird? Also ich brauche eigentlich nur einmal die Richtung und Ansätze, den Rest finde ich schon irgendwie raus :-)

    Schreib mal, was Du wirklich willst. Irgendwie scheint Uns das mit dem Speichern einer Summe als "abgeleitetes Attribut" etwas, aeh, gewoehnungsbeduerftig.

    Es sollte möglichst "professionell" sein, da es für eine Diplomarbeit verwendet wird :-)

    Wer kriegt die denn zu lesen?   :-

    1. Hallo,

      also ich versuche es mal genau zu formulieren ;-)

      Ich habe folgendes:

      Wasserkosten | Kennzahl | Jahr | Schmutzwasser | Regenwasser |
      --------------------------------------------------------------
                   | 12345678 | 1999 |    1,99       |    2,99     |
                   | 12345678 | 2000 |    2,99       |    3,99     |
                   | 23456789 | 1999 |    0,99       |    2,99     |
                   | ........ | .... |    ....       |    ....     |

      ALLG_WERTE   |   NAME   | Wert |
      --------------------------------
                   | Flaeche  | 130  |
                   | Verbrauch| 20   |

      Soweit wie es zur Zeit aussieht.
      In der Relation Wasserkosten sind ca. 10.000 Einträge

      Nun muss für jede Kennzahl aus dem neusten Jahr (dem aktuellsten welches vorhanden ist) berechnet werden :
       4 * ALLG_WERTE(Verbrauch -> Wert) * 365 / 1000 * WASSERKOSTEN(Kennzahl, Jahr -> Schmutzwasser) + WASSERKOSTEN(Kennzahl, Jahr -> Regenwasser) * ALLG_WERTE(Flaeche -> Wert)

      Ich weiß jetzt nicht genau wie ich das schreiben soll, am besten am Beispiel:
      Wenn die aktuelle Kennzahl 12345678 ist, dann soll da stehen
       (4 * 20 * 365 / 1000 )* 2,99 + (3,99 * 130)

      Das könnte ich jetzt zwar direkt mit einem komplexen SQL - Select Query machen, nur ich brauche auch die Max-, Min- und Mittelwerte von allen Ergebnissen diser Formel für alle Kennzahlen (zum aktuellsten Jahr). (Also um die Abweichung von der aktuellen Kennzahl zum Durchschnitt, Max und Min zu haben)

      Also wäre es ja am besten, wenn das Ergebnis dieser Formel irgendwo gespeichert wird, damit ich mit min und max arbeiten kann.

      Ich hoffe das ist etwas verständlicher geworden, ich weiß nicht wie ich das sonst am besten formulieren soll.

      Danke trotzdem,
      Hauke

      1. Hallo

        Wasserkosten | Kennzahl | Jahr | Schmutzwasser | Regenwasser |

        | 12345678 | 1999 |    1,99       |    2,99     |
                     | 12345678 | 2000 |    2,99       |    3,99     |
                     | 23456789 | 1999 |    0,99       |    2,99     |
                     | ........ | .... |    ....       |    ....     |

        ALLG_WERTE   |   NAME   | Wert |

        | Flaeche  | 130  |
                     | Verbrauch| 20   |

        Ich weiß jetzt nicht genau wie ich das schreiben soll, am besten am Beispiel:
        Wenn die aktuelle Kennzahl 12345678 ist, dann soll da stehen
        (4 * 20 * 365 / 1000 )* 2,99 + (3,99 * 130)

        Warum?
        Aus Deinen Daten geht überhaupt nicht hervor, warum diese Werte für Flaeche und Verbrauch bei der Kennzahl 12345678 genommen werden sollen. Warum der Datensatz für das Jahr 2000.

        Wie kommt Deine zweite "Relation" zustande? Sowas speichert man doch niemals so ab.

        Das könnte ich jetzt zwar direkt mit einem komplexen SQL - Select Query machen, nur ich brauche auch die Max-, Min- und Mittelwerte von allen Ergebnissen diser Formel für alle Kennzahlen (zum aktuellsten Jahr).

        Wo ist das Problem? Ja, Du kannst sowas mit "komplexen SQL-Abfragen" machen. Wenn Du allerdings noch nicht einmal weißt, das SUM() keineswegs eine Summe zweier Spalten berechnet, dann traue ich Dir noch nicht mal eine etwas aufwendigere Abfrage zu.

        Wenn Du das für Deine Diplomarbeit benötigst, dann erlerne bitte das dafür erforderliche Handwerkszeug. SQL kann bestimmt das leisten, was Du benötigst. Du solltest Dich aber auch mit dem speziellen Dialekt, den speziellen Funktionen und insbesondere auch Einschränkungen im Funktionsumfang des von Dir verwendeten Datenbankmanagementsystems vertraut machen.

        Viel Erfolg

        Vinzenz