Dimitri: EER-Modell Tiere

Hallo zusammen!

Ich soll ein EER-Modell für eine Anwendung erstellen. Dabei bin ich auf ein Problem gestoßen, dass ich am besten anhand von Tieren illustrieren kann.
1. Es gibt Tiere.
2. Tiere unterscheiden sich nach Rasse.
3. Es gibt mehrere binäre Relation zwischen Tieren DER SELBEN RASSE.

Rassen könnte man über Relationen oder Subklassen definieren. Aber wie kann ich verhindern, dass Relationen zwischen zwei unterschiedlichen Rassen auftreten? Oder geht das nur über die Business-Logik? Gibt es vielleicht ein bekanntes Design-Pattern? Es kann auch allgemeiner als das EER-Modell sein.

Besten Dank.
Gruß Dimitri

  1. Über einen Trigger könnte man das machen. Der prüft bei INSERT und UPDATE ob die Bedingung verletzt wird und bricht dann mit möglichst viel Getöse ab.
    Und zusätzlich trotzdem in der Programmlogik, oder in der Query für INSERT / UPDATE, denn einen Fehler selber erkennen ist besser als dass einem der ganze Salat um die Ohren fliegt :-)

    Weitere Modellierung würde ich persönlich hier gar nicht erst versuchen.

    1. Hello,

      Über einen Trigger könnte man das machen. Der prüft bei INSERT und UPDATE ob die Bedingung verletzt wird und bricht dann mit möglichst viel Getöse ab.

      Ob der wirklich abbricht, und zwar möglichst mit einer (selbstdefinierbaren) Fehlernummer, hängt vom Datenbanksystem ab. MySQL konnte das zumindest bis vor kurzem noch nicht, allerdings gibt es einen schmutzigen Trick, mit dem man trotzdem einen wiedererkennbaren (auswertbaren) Fehler werfen kann.

      Für die _Einhaltung_ von Regeln sind übrigens eher Strored Routines gedacht. Die kann man auch benutzen, um den Direktzugriff auf die Tabellen gänzlich zu unterbinden. Dann bilden sie praktische eine Shell um die Tabellenfunktionen Select, Insert, Update, Delete, ...

      Triggers sind eher dafür gedacht, bei Eintreten bestimmter Ereignisse noch _kleine_ Veränderungen an den Daten vornehmen zu können, bevor sie dann doch eingetragen, geändert oder gelöscht werden.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bikers-lodge.com
    2. Hallo,

      ... könnte man ... machen ... mit ... viel ... Salat

      Wie du beim Thema Tiere auf Salat kommst, ist mir ein Rätsel

      scnr
      Kalk

      1. Hi,

        ... könnte man ... machen ... mit ... viel ... Salat
        Wie du beim Thema Tiere auf Salat kommst, ist mir ein Rätsel

        wahrscheinlich eine Spezialisierung auf eine bestimmte Weichtier-Gattung. ;-)

        scnr

        scnr,2
         Martin

        --
        Wer mit dem Finger droht, sollte ihn am Abzug haben, und nicht in der Nase.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      2. Wie du beim Thema Tiere auf Salat kommst, ist mir ein Rätsel

        Es könnte einem auch Hack um die Ohren fliegen, aber in diesem Zusammenhang hätte das möglicherweise etwas zu sehr vom Thema abgelenkt.

        1. Hello,

          Wie du beim Thema Tiere auf Salat kommst, ist mir ein Rätsel
          Es könnte einem auch Hack um die Ohren fliegen, aber in diesem Zusammenhang hätte das möglicherweise etwas zu sehr vom Thema abgelenkt.

          Wieso? Das wäre dann doch Hashcode :-)

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bikers-lodge.com
  2. Rassen könnte man über Relationen oder Subklassen definieren.

    Richtig!

    Aber wie kann ich verhindern, dass Relationen zwischen zwei unterschiedlichen Rassen auftreten? Oder geht das nur über die Business-Logik? Gibt es vielleicht ein bekanntes Design-Pattern? Es kann auch allgemeiner als das EER-Modell sein.

    Zwei Möglichkeiten hast Du bereits genannt:

    1. DB-Design
    2. Klassenhierarchie

    Es gibt noch eine dritte Möglichkeit, falls MVC (eine weitere Abstraktion)
    3) Multiple Models, Modelle stehen in Beziehung

    Das Modell "User" fragt Modell "UserGroup", welche Gruppen es gibt. Das Modell "Schäferhund" fragt Modell "Chiwawa" usw.