Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Normalform Aufgaben

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von hhbr89, 2 Februar 2014.

  1. hhbr89

    hhbr89 Aktiver Benutzer

    Hallo habe eine Aufgabe an meiner UNI gelöst wie ich meine, bräuchte aber nochmal eine kurze Bestätigung ob das so stimmt :) , damit ich später nicht falsch weiter lerne.

    Übung und Lösung bfndt sich im Anhang als pdf (geht leider nicht) DB_uebung.pdf


    Vielen Dank!
     
  2. Hony%

    Hony% Datenbank-Guru

    Hi.

    Ich kann in der Lösung keinen Fehler entdecken.

    Gruß
    Hony
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Yo, schaut okay aus.
     
  4. hhbr89

    hhbr89 Aktiver Benutzer

    Okay, heute habe ich mich dann mal an etwas größeres rangewagt:

    1. Stellen Sie ein vollständiges ER-Modell (Min-Max Kard., identifizierenden Eigenschaften, ein beschreibendes Attribut) für den Servicebereich eines Unternehmens dar, das hochwertige Kaffeemaschinen für die Gastronomie herstellt. Folgende Sachverhalte sind zu berücksichtigen: Verkauft werden Basismaschinen mit unterschiedlichem Zubehör. Die Maschinen haben eine Garantiezeit, zu deren Ende eine kostenfreie Inspektion durch den Kunden angefordert werden kann. Die Wartung der Maschinen erfolgt leistungsbezogen nach einer bestimmten Betriebszeit und wird durch einen Techniker des Unternehmens selbst oder eines Fremdunternehmens ausgeführt. Das Klassenmodell soll die Informationen liefern, um für jeden Gerät und seine Zusatzteile eine Historie vom Kauf und Käufer bis hin zur letzen Wartung (Arbeiten und Ersatzteile) und zum Wartungstechniker zu dokumentieren.


    Habe ein Bild angehangen, was ich mit DB-Designer exportiert habe. Habe die Aufgabenstellung auch nicht zu 100% verstanden um ehrlich zu sein :/
     

    Anhänge:

  5. Hony%

    Hony% Datenbank-Guru

    Genau genommen ist das kein ER-Modell.

    Davon abgesehen habe ich ein paar Schwierigkeiten bei der Interpretation, da mir die Bedeutung der einzelnen Farben nicht ganz klar ist. Speziell diese weiß/schwarzen Rauten. Ich vermute 1:n auf schwarz/weiß bzw. n:m für weiß.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Geht mir ähnlich.

    Garantiezeit TIME? In PG ist das Time of Day, von 00:00 bis 24:00 Uhr. Wäre wir a bissl kurz, wäre wohl eher INTERVAL. Aber ich weiß auch ned, was Du als DB nehmen willst.
    Tabelle Bestellposition: mir ist unklar, was die 3 Bestell_Position_FKIndex? zu bedeuten haben.

    Aber, wie gesagt, mit solchen Bildchen steh ich eh auf Kriegsfuß... CREATE TABLE - Anweisungen sind mir da lieber.
     
  7. Hony%

    Hony% Datenbank-Guru

    Das sind Fremdschlüssel auf die Relationen Kaffeemaschine, Zubehör und Bestellung. Die haben in einem ER-Modell aber nichts verloren.

    Und Normalisierung findet auch keine statt.
     
  8. hhbr89

    hhbr89 Aktiver Benutzer

    Ich dachte bevor ich es alles auf einem Blatt aufzeichne und es abfotografieren muss etc. mach ich es eben in DB-Designer. Die DB an sich müssen wir nicht anlegen, deshalb spielt der genaue Begriff keine Rolle, aber natürlich ist Time der falsche Datentyp.

    Habe ich denn wenigstens die richtigen Relationen und Attribute gewählt? Ich werde es nachher noch einmal zu Papier bringen, denn das muss auf jeden Fall sitzen. Was meinst du mit es findet keine Normalisierung statt Hony% ? Ich kann keine Redundanzen oder transitive Relation sehen. (3NF)
     
  9. Hony%

    Hony% Datenbank-Guru

    Eben! Ein ER-Modell ist nicht normalisiert. Das kommt erst später.

    Für ER-Diagramme finde ich Dia nicht mal schlecht.
     
  10. hhbr89

    hhbr89 Aktiver Benutzer

    Haha, jetzt habe auch ich es verstanden! Ich werde das mal ausprobieren und eine neue Version hochladen, sehe ein, dass das so nicht viel bringt.

    @akretschmer
    Code:
    CREATE TABLE Bestellung (
      idBestellung INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      Wartung_idWartung INTEGER UNSIGNED NOT NULL,
      Kunde_idKunde INTEGER UNSIGNED NOT NULL,
      Datum DATETIME NULL,
      PRIMARY KEY(idBestellung),
      INDEX Bestellung_FKIndex1(Kunde_idKunde),
      INDEX Bestellung_FKIndex2(Wartung_idWartung)
    );
    
    CREATE TABLE Bestell_positionen (
      Bestellung_idBestellung INTEGER UNSIGNED NOT NULL,
      Zubehör_idZubehör INTEGER UNSIGNED NOT NULL,
      Kaffeemaschine_idKaffeemaschine INTEGER UNSIGNED NOT NULL,
      INDEX Bestell_positionen_FKIndex1(Kaffeemaschine_idKaffeemaschine),
      INDEX Bestell_positionen_FKIndex2(Zubehör_idZubehör),
      INDEX Bestell_positionen_FKIndex3(Bestellung_idBestellung)
    );
    
    CREATE TABLE Ersatzteile (
      idErsatzteile INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      e_name VARCHAR(45) NULL,
      PRIMARY KEY(idErsatzteile)
    );
    
    CREATE TABLE Ersatzteile_has_Wartung (
      Ersatzteile_idErsatzteile INTEGER UNSIGNED NOT NULL,
      Wartung_idWartung INTEGER UNSIGNED NOT NULL,
      PRIMARY KEY(Ersatzteile_idErsatzteile, Wartung_idWartung),
      INDEX Ersatzteile_has_Wartung_FKIndex1(Ersatzteile_idErsatzteile),
      INDEX Ersatzteile_has_Wartung_FKIndex2(Wartung_idWartung)
    );
    
    CREATE TABLE Kaffeemaschine (
      idKaffeemaschine INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      Zubehör_idZubehör INTEGER UNSIGNED NOT NULL,
      k_name CHAR NULL,
      Garantiezeit TIME NULL,
      PRIMARY KEY(idKaffeemaschine),
      INDEX Kaffeemaschine_FKIndex1(Zubehör_idZubehör)
    );
    
    CREATE TABLE Kunde (
      idKunde INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      ku_name VARCHAR(45) NULL,
      adresse VARCHAR(45) NULL,
      PRIMARY KEY(idKunde)
    );
    
    CREATE TABLE Techniker (
      idTechniker INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      Unternehmen_idUnternehmen INTEGER UNSIGNED NOT NULL,
      t_name VARCHAR(45) NULL,
      PRIMARY KEY(idTechniker),
      INDEX Techniker_FKIndex1(Unternehmen_idUnternehmen)
    );
    
    CREATE TABLE Unternehmen (
      idUnternehmen INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      u_name VARCHAR(45) NULL,
      PRIMARY KEY(idUnternehmen)
    );
    
    CREATE TABLE Wartung (
      idWartung INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      Techniker_idTechniker INTEGER UNSIGNED NOT NULL,
      Arbeiten VARCHAR(255) NULL,
      PRIMARY KEY(idWartung),
      INDEX Wartung_FKIndex1(Techniker_idTechniker)
    );
    
    CREATE TABLE Zubehör (
      idZubehör INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      z_name VARCHAR(45) NULL,
      PRIMARY KEY(idZubehör)
    );
    
    
     
    Zuletzt bearbeitet: 3 Februar 2014
  11. hhbr89

    hhbr89 Aktiver Benutzer

    Anbei das ERM mit Dia erstellt. Habe die nicht Schlüsselattribute bei Wartung etc. weggelassen, wichtig ist denke ich erstmal das ich die Beziehungen richtig setze.
     

    Anhänge:

  12. Hony%

    Hony% Datenbank-Guru

    Jetzt kommen wir der Sache doch langsam näher.
    Ich vermute, dass hier die ISO Notation verlangt wird:
    https://de.wikipedia.org/wiki/Entity-Relationship-Modell#ER-Diagramme
    https://de.wikipedia.org/wiki/Min-Max-Notation
    [​IMG]
    By Frank Roeing (Own work) [Public domain], via Wikimedia Commons
     
  13. hhbr89

    hhbr89 Aktiver Benutzer

    Ja, dort war ich auch gerade. Allerdings vermute ich das nicht die ISO Notation verlangt wird, das ist immerhin nur eine Aufgabe in der Klausur und bei so vielen Entitätstypen ist das ja ein relativ großer Aufwand. Kann mich aber auch irren und werde mir das einprägen. Sind denn die Beziehungen zu den E.Typen wenigstens richtig, abgesehen von der Notation? Siehe Anhang.

    PS: Ich finde es relativ verwirrend das man die "Seiten" bei der Chen und Min. & Max. Notation vertauscht was 1, N und so weiter angeht. Konnten die sich nicht entscheiden :D
     

    Anhänge:

  14. Hony%

    Hony% Datenbank-Guru

    Da es bei dieser Aufgabe explizit dabei steht könnte es auch auch ein Einzelfall sein um genau den Sonderfall der vertauschten Kardinalitäten zu prüfen.

    Die haben sich entschieden. Chen zählt Entitäten und Min/Max die Relationen. Dadurch ergeben sich Unterschiede in der Ausdrucksstärke.

    Ok. Schauen wir uns die Aufgabe an:

    Verkauft werden Basismaschinen mit unterschiedlichem Zubehör.
    Wenn wir von Zubehörsets ausgehen stimmt (1,n)/(1,1).

    Ist das Zubehör aber einzeln wie "Automatischer Milchschäumer" oder "Kaffeemühle" wäre meiner Meinung nach (0,n)/(1,n) richtig um Basis- bis Luxuspaket abzubilden.

    Die Maschinen haben eine Garantiezeit, zu deren Ende eine kostenfreie Inspektion durch den Kunden angefordert werden kann.
    Die Garantiezeit willst du anscheinend über die Bestellung abbilden. Als Kardinalität gibst du zu Kaffeemaschiene und Zubehör je (1,n)/(1,n) an. Es gibt also immer mindestens eine Bestellung? Selbst für neue Artikel?

    Die Wartung der Maschinen erfolgt leistungsbezogen nach einer bestimmten Betriebszeit und wird durch einen Techniker des Unternehmens selbst oder eines Fremdunternehmens ausgeführt.
    Die kostenfreie Inspektion mag vom Vorgang her mit der Wartung identisch sein. Aber bezieht sich die Betriebszeit auch auf das Alter oder eher auf die Betriebsstunden die nicht zu Rechnung sondern zu Kaffeemaschine gehören? Selbst wenn wir von einer zyklischen Wartung ausgehen kann es aber pro Bestellung mehrere Maschinen geben. Auf welche bezieht sich die Wartung?

    Das Klassenmodell soll die Informationen liefern, um für jeden Gerät und seine Zusatzteile eine Historie vom Kauf und Käufer bis hin zur letzen Wartung (Arbeiten und Ersatzteile) und zum Wartungstechniker zu dokumentieren.
    Klassenmodell? Wie auch immer... Der Rest scheint soweit keine logischen Fehler zu enthalten.
     
  15. hhbr89

    hhbr89 Aktiver Benutzer

    1. Das nicht jeden Maschine Zubehör hat ergibt Sinn.
    2. Zu jeden Bestellung gehört doch eine Kaffeemaschine, da der Hersteller nur diese anbietet. Die Kardinalität vom Zubehör habe ich auf (0,n)/(0,n) geändert, da nicht jede Bestellung Zubehör enthält.
    3. Kann das durch ein einfaches Attribut Betriebszeit gelöst werden? Ich frage mich gerade ob ich das bei der Wartung mit einbinde, dort kann es ja erst ausgelesen werden.

    Diagramm3.png
     
    Zuletzt von einem Moderator bearbeitet: 5 Februar 2014
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden