Datenbank Modell - Frage

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Sio_x.

    Datenbank Modell - Frage

    Hallo,

    ich bin mich gerade an Datenbanken heranwagen. Ich habe vor eine Art Essensverwaltung zu testzwecken zu erstellen. Dafür habe ich mir eine Microsoft SQL Datenbank lokal installiert und folgende Datenbank erstellt.


    Mein Sinn dahinter ist folgender:
    Jede Speise kann jeweils einem Restaurant und einer Kategorie zugeordnet werden.
    So weit so gut (hoffe ich).
    Wie aber finde ich so zBsp heraus, welches Restaurant welche Kategorien besitzt?
    Nicht jedes Restaurant wird die selben Kategorien haben (zBsp Pizza). Das war so gedacht, dass ich später in einer TreeList die Restaurants anzeige und jeweils als untergeordnete TreeNode die Kategorien zu diesem Restaurant. Und Anhand der Auswahl der Kategorie lasse ich die Speisen in einem DataGridView anzeigen.

    Das ganze wird über das Entity Framework 6 stattfinden, damit ich mich dort auch direkt einarbeiten kann.

    Wie lässt sich mein Ansatz also verbessern?
    Ist der Ansatz richtig?

    Schönen Abend.
    ich empfehle immer, Datenmodellierung ohne Datenbank zu erlernen. Mit Db - auch wenns EF-getrieben ist - holt man sich nur lauter zusätzliche Komplexität ins Projekt, die man viel besser in einer eigenen Baustelle behandeln sollte.
    Also ohne Db gehts so: codeproject.com/Articles/10309…l-Datamodel-for-Beginners

    Wie dem auch sei.
    Bei deim Datenmodell verstehe ich schon garnet, was du eiglich modellieren willst.
    Die Kategorien - sind das Speise-Kategorien (Mehlspeisen, Steak, Kartoffelgerichte, Salat) oder Restaurant-Kategorien (Bürgelich, Italiener, Snob_SuperTeuer, Mensa) ?

    Jo, weiter brauch ich garnet gehen, an deine Antwort schließen sich sicherlich weitere Fragen an.
    @ErfinderDesRades

    Kategorien sollen verschiedene "Arten" von Speisen darstellen. Man hat zBsp die Kategorien "Pizza" und "Brötchen". Da sind dann jeweils verschiedene Pizzen und belegte Brötchen hinterlegt -sprich die Speisen.
    Ich gebe da ErfinderDesRades recht. Ein Datenmodell zu verstehen ist grunsätzlich wichtig.

    Dennoch bin ich der Meinung, falls du EF 6 mit CodeFirst Ansatz betreibst ist in diesem Fall nicht notwendig ZU tief in die Materie einzutauchen.

    Wenn du die Kategorie in der Speise hinterlegst passt das schon.
    Du hast ein Restaurant. Ein Restaurant hat X Speisen eine Speise aber nur 1 Restaurant.
    Eine Speise hat eine Kategorie aber eine Kategorie kann X Speisen zugeordnet werden.

    Bilde das so in Klassen mit ICollections ab und EF wird dir die richtigen Tabellen erzeugen.
    Du kannst aber auch Kategories anlegen für welche es (noch) keine Speisen gibt indem du das Feld als Nullable definierst.

    Du kannst dann ganz leicht mit _context.Categories.ToList alle Kategories abfragen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Eine Speise kann in mehreren Restaurants (zu unterschiedlichen Preisen) vorhanden sein.

    Restaurant A Pizza Salami 8,00€
    Restaurant B Pizza Salami 7,80€
    Restaurant C Pizza Salami 8,10€

    Ansonsten muss man die Salami Pizza jedes mal neu anlegen. Evtl. Sollte man eher an einen "Speisen-Stamm" denken.

    Du legst jede Speise an, egal wo.man die kaufen kann. Dann kann man jeder Speise X Restaurants zuordnen und angeben was sie dort kosten.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Salami Pizza jedes mal neu anlege

    Ich würe es so machen. Flexibler, so kann in verschiedenen Restaurants die Pizza einen anderen Belag oder Rezept haben sowie unterschiedliche Allergene.
    Ne Pizza Diavolo ist nicht überall gleich. ;)

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    KingLM97 schrieb:

    Das sieht mir irgendwie richtiger und besser aus, oder?
    Zumindest kann man (ich zumindest) nun sofort dein Datenmodell verstehen, und Knackpunkte ansprechen.

    Bei dir hat eine Speise viele Kategorien, und eine Kategorie hat viele Speisen - eine m:n-Relation.
    Bei dir soll es also Speisen geben können, die sowohl Brötchen sind als auch Suppe?

    Ein Restaurant hat viele Kategorien und eine Kategorie hat viele Restaurants - eine m:n-Relation.
    Bei dir soll es also Restaurants geben können, die sowohl ein Imbiss sind als auch FeinschmeckerTeuer?

    Und die Spitze ist, dass beide Entitäten - Restaurant und Speise - mit derselben Kategorien-Entität verknüpft sind.
    So sind bei dir Speisen der Kategorie Imbiss möglich, aber auch Restaurants der Kategorie Brötchen.

    Hmm - äh - unkonventionell... ;)



    Wie im Link erläutert: Zum Datenmodellieren muss man weniger an Code oder sonstwas schwieriges denken, sondern über die Realität, und möglichst konkret über die Realität denken.
    Also in meiner Welt hat eine Speise eine Kategorie: Entweder es ist ein Brötchen, oder es ist Suppe - beides geht nicht.
    Ebenso die Restaurants: Entweder Italiener oder Grieche.

    (Prinzipiell gibt es durchaus Problemstellungen, die eine multiple Kategorisierung nahelegen - etwa eine Fotosammlung, da kann ein Foto sowohl Landschafts-Aufnahme als auch Porträt sein.
    Aber ob vergleichbares bei dir zutrifft ziehe ich in Zweifel.)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @ErfinderDesRades

    Du gehst nicht so oft Essen?

    Ein Restaurant kann sowohl griechisch, wie auch gut Bürgerlich anbieten. Es gibt Imbisse die sind dennoch Snob-teuer.
    Eine Suppe kann sowohl Vorspeise sein, wie auch Hauptgericht, Vorspeise und vegan ....
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    @ErfinderDesRades

    Habe mich direkt nach der Berufsschule ran gesetzt und versucht es zu verbessern. Dabei ist folgendes rausgekommen.


    Meinem Verständnis nach hat jetzt jede Speise eine Kategorie und jedes Restaurant mehrere Kategorien.
    Ich hoffe ich habe das auch richtig modelliert :)

    KingLM97 schrieb:

    Meinem Verständnis nach ... jedes Restaurant mehrere Kategorien.
    Wie wolle.
    Deine Entscheidung, nu lebe mit den Konsequenzen...



    Bleibt noch das 2. von mir genannte Problem.
    Nenn bitte mal ein paar beispiele für Speise-Kategorien - also was du dir vorstellst, was in Kategorie-Tabelle an Datensätzen eingetragen sein könnte - Name reicht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ganz einfach: Eine Speise-Kategorie ist was anderes als eine Restaurant-Kategorie.
    Daher müssens 2 getrennte Tabellen sein.



    Nächster Punkt: Ich hätte erwartet, dass eine Zuordnung möglich ist zwischen Speisen und Restaurants.
    Also dass ich sehen kann: welche Speise bekomme ich in welchem Restaurant?

    Oder hast du das mit Absicht nicht vorgesehen?
    Vielleicht habe ich mich falsch ausgedrückt.

    Die Restaurants sollen keine Kategorien bekommen (also zBsp Italiener, Grieche etc), sondern ich möchte einfach nur jedem Restaurant beliebig viele Kategorien zuordnen können.

    So soll ein Restaurant zBsp die Kategorien Nudelgerichte, Salate und Suppen haben, ein anderes Restaurant Nudelgerichte, Salate und Pizza.

    ​Oder hast du das mit Absicht nicht vorgesehen?

    Korrekt. Wäre dennoch "Nice to Have", kann aber darauf verzichten.
    Da steckt trotzdem ein Denkfehler drin. Denn die Speisen sind an Kategorien gebunden. Das Restaurant bietet aber verschiedene Speisen an! Also kann das Restaurant nicht direkt an "Nudelgerichte" gebunden werden. Sondern die Speise "Nudel ala Mama" ist an die Kategorie "Nudelgerichte", "Tomatengericht", "Vegan" gebunden. Und ein Restaurant bietet diese Speise an oder nicht.

    Der zweite Entwurf war richtig. Nur muss RestaurantKategorie verworfen werden. Dafür muss die Kreuztabelle SpeisenRestaurant erstellt werden. Damit lassen sich dann über die Speisen einer Kategorie die Restaurants finden oder über die Restaurants die angebotenen Speisen einer Kategorie.

    Und selbst hier habe ich noch einen Denkfehler, weil "Vegan" auf Restaurant 1 zutreffen kann aber nicht auf Restaurant 2.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Sio_x“ ()