Announcement

Collapse
No announcement yet.

Probleme bei Aufgabenstellung: (Views und Trigger)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme bei Aufgabenstellung: (Views und Trigger)

    Einen wunderschönen guten Abend allen anwesenden,

    wie der Titel des Beitrags schon sagt, habe ich einige Probleme was SQL-Anweisungen angeht. Kurz einleitend sei zu sagen, dass ich arbeitsbedingt dringt SQL benötige und mich nun auch schon seit einigen Wochen, quasi im Eigenstudium mit der Materie auseinandersetze. Vom einem guten Bekannten habe ich dafür auch eine Art Aufgaben/Lernbuch bekommen, zu diesem ihm aber das enstsprechende Lösungsbuch abhanden gekommen ist. Er selbst hat sich mit dem Thema nie wirklcih auseinandergesetzt, so das ich auch ihn als Hilfe ausschließen kann. Deshalb also der Weg hier ins Forum, der mir absolut richtig erscheint, aufgrund der Beiträge die ich hier schon gelesen habe heute. Doch ich weiche glaub ich zusehr vom Thema ab ^^

    Ich möchte also zu meinem Problem zurückkommen:

    Folgende Situation liegt vor:
    Ich habe eine Tabelle mit Angestellten. Diese soll ich nun dahingehend abändern, dass zusätzlich zu Name etc, nun auch das Herkunftsland und das entsprechende KFZ Kennzeichen in der Tabelle zu finden ist. Heißt also für Deutschland D, Italien I und so weiter. Grundsätzlich kein Problem.

    Erste Unklarheit:
    Bei dieser Aufgabenstellung soll ich die referentielle Intigrität sicherstellen. Ich interpretiere das so, dass ich eine weitere Tabelle anlege, die die KFZ Kennzeichen beinhaltet. Könnte so aussehen, das ich dort folgende Spalten habe: ID, KFZ, LAND. Diese Werte, also die ID fungiert dann quasi als Fremdschlüssel in der Tabelle Angestellte. Lieg ich da richtig oder falsch?

    Nun mein View bzw. Trigger-Problem:
    Ich soll laut Aufgabe eine View schreiben, die Folgenden Datensatz in die Tabelle Angestellte einfügt.

    Paolo Garibaldi, 05.11.1949, Milano, Via Romana 5, Italien, I

    Diese View würde ich vielleicht einigem anschlagen noch zusammen kriegen, doch nun kommt der Trigger ins Spiel. Denn die Aufgabe sagt weiterhin:

    Erstellen sie den zugehörigen Trigger, der die Eingabe der vorstehenden Daten innerhalb der View ermöglicht.

    So ... und nun steh ich auf dem Schlauch, versteh nur noch Bahnhof und weiß nicht weiter. Bitte helft mir, bevor ich das Buch aus dem Fenster werfe, mein SQL Dasein vorzeitig atakter lege und mich Dingen widme, die mich wohl um einiges glücklicher machen könnten ^^

    Ich glaube einfach das ich die Sache, den Trigger mit der View zu kombinieren scheinbar nicht in den Kopf krieg. Irgendwas scheint da bei mir zu blockieren.
    Hoffentlcih kann mir jemand helfen und danke schon vielmals im Voraus.

    greetz
    RoKro

  • #2
    Originally posted by RoKro View Post
    ...So ... und nun steh ich auf dem Schlauch, versteh nur noch Bahnhof und weiß nicht weiter.
    Wenn es dich tröstet - ich auch Die Aufgabe hab ich nämlich nicht verstanden.
    Wie kann eine View einen Datensatz einfügen? Eine View ist - wie der Name schon sagt - eine Sicht auf eine Tabelle, eine komplexe Abfrage wie auch immer, aber doch niemals Mittel und Zweck zum Einfügen von Daten
    Und dann noch ein Trigger der Daten einfügt? Wann den? Beim Aufruf der View? *grusel*

    Sorry, aber du solltest das Buch wegschmeißen...

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo,

      da scheint ja begrifflich ja wirklich einiges durcheinander gelaufen zu sein (oder vielleicht stehen die Lösungen wirklich in dem 'verlorenen' Buch...)
      Zuerstmal zur Verwendung der View: http://www.computerbase.de/lexikon/S...28Datenbank%29
      Und ein hoffentlich guter Literaturtip
      MfG
      Cheat-Sheets for Developers / Programming Quotes

      Comment


      • #4
        Originally posted by Falk Prüfer View Post
        Wie kann eine View einen Datensatz einfügen?
        Also wenn ich das richtig verstanden hab, kann ich mit dem INSERT auch über eine VIEW daten in die Tabelle eintragen, ich verstehe halt nur ncoh nicht was der TRIGGER da soll.

        Vielleicht soll er wirklich beim Aufruf der VIEW gestartet werden *grübel* aber warum? Vielleicht um zu testen ob das Land Italien schon in der Tabelle vorhanden ist um es einem Fall das es nciht vorhanden ist dort einzufügen?

        Wie ihr seht bin ich sichtlich überfordert aber ich danke auf jedenfall schon mal für den Beistand bis hier hin

        Comment


        • #5
          Originally posted by RoKro View Post
          Also wenn ich das richtig verstanden hab, kann ich mit dem INSERT auch über eine VIEW daten in die Tabelle eintragen, ich verstehe halt nur ncoh nicht was der TRIGGER da soll.
          Ok, das macht dann etwas mehr Sinn und so langsam kann ich mir was zusammenreimen

          Du Sollst ja jetzt eine relationale Beziehung herstellen, sprich das Länderkennzeichen und das Land liegen nicht mehr in der Angestellten-Tabelle. Jetzt sollst du sicher eine View erstellen, die den Join über beide Tabellen realisiert. Auf solch eine View kann normalerweise kein DML-Statement angewendet werden. Man kann jedoch für die View s.g. INSTEAD OF-Trigger für Insert, Update und Delete erstellen, die die eigentliche Logik implementieren und die Daten quasi auf die zugrundeliegenden Tabellen "aufteilen". Damit wird die View DML fähig.

          Deine View könnte dann etwa so aussehen:
          [highlight=sql]
          create or replace view angestelle_v as
          select a.*, l.KFZ, l.LAND
          from angestellte a
          inner join laender l on l.id = a.land_id
          [/highlight]

          Für diese View kannst du jetzt einen INSTEAD OF-Trigger erstellen:
          [highlight=sql]
          create or replace trigger ins_angestellte_v
          INSTEAD OF INSERT
          ON angestelle_v as
          begin
          // PK für angestellte erzeugen
          ...
          insert into angestellte (id, vorname, name, geb_dat,...)
          values (neu_erzeugter_pk, :new.vorname, :new.name, :new.geb_dat, ...);

          // Prüfung ob zu :new.KFZ und :new.LAND bereits ein Datensatz in laender existiert
          ...
          // ggfs. die ID dieses DS holen
          ...
          // wenn nicht neue ID für laender erzeugen
          ...
          update angestellte set
          land_id = die_oben_ermittelte_id
          where ... Primärschlüssel für angestellte?

          end;
          [/highlight]

          Ist noch nicht ganz vollständig, aber du willst ja was lernen . Die Feldnamen hab ich frei gewählt und auch die Erzeugung von IDs für Primärschlüssel müssen an das verwendete DBMS - um welches gehts überhaupt? - angepasst werden.

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment

          Working...
          X