none
Frage zu "Code First" Entwurf RRS feed

  • Frage

  • Hallo,

    ich möchte mir die Arbeit erleichtern und eine DB-Lösung in Visual C# schreiben.

    Ich habe in der Praxis eine komplexe Maschine, welche aus Gruppen und diese aus einzelnen Teilen bestehen. Für jede Gruppe, ABER AUCH für jedes Teil kann es Bilder und Dokumente geben (muss es aber nicht).

    Zum Zusammentragen aller Bilder und Dokumente gibt es wiederum Mitarbeiter, welche zu einem bestimmten Datum alles fertig haben sollen.

    Das ist die Aufgabenstellung, aus welcher ich jetzt mit Hilfe des Entity Framework unter VS C# 2010 eine Datenbanklösun stricken möchte mit der Methode "Code First".

    Für diese Aufgabenstellung hatte ich mir das so gedacht (jedoch habe ich z. B. die Tabellen Bilder und Dokumente 2x, was ich nicht so gut finde):

    Tabelle 1: Gruppen -Felder: ID, Bezeichnung

    Tabelle 2: Teile - Felder: ID (ist ID von Gruppen), Bezeichnung

    Tabelle 3: Bilder1 - Felder: ID (ist ID von Gruppen), Bild

    Tabelle 4: Bilder2 - Felder: ID (ist ID von Teile), Bild

    Tabelle 5: Dokumente1 - Felder: ID(ist ID von Gruppen), Dokument

    Tabelle 6: Dokumente2 - Felder: ID(ist ID von Teile), Dokument

    Tabelle 7: Mitarbeiter - Felder: ID, Name, Vorname usw.

    Tabelle 8: Fälligkeit - Felder: MID (MitarbeiterID), GID (GruppenID), Datum, Bezeichnung

    Da ich mit dem Entity Framework jetzt anfangen möchte, wollte ich vorab mal nach Eurem Rat fragen wie Ihr das seht. Ich denke, dass bei Bildern und Dokumenten vielleicht eine Vereinfachung möglich ist. Ich möchte jedoch am Anfang keine Fehler machen, welche dann später schwer zu händeln sind.

    Ich würde mich über Anregungen und Tipps freuen.

    mfg

    Claudia

    Sonntag, 9. November 2014 10:04

Antworten

  • Hi Claudia,
    primär sollte nicht die Technologie (EF, Code First usw.) sein, sondern die sachliche Logik inklusive Bedientechnologie.

    Anhand der sachlichen Logik kann man ein Datenmodell entwickeln und dann mit EF umsetzen. Wenn beispielsweise Gruppen Master ist und Teile Master ist und Bilder Child ist, dann ist es recht einfach eine gemeinsame Bilder-Tabelle zu nutzen. Im umgekehrten Fall (ein Bild kann in unterschiedlichen Gruppen oder Teilen vorkommen), wird es schon komplizierter. Dasselbe betrifft auch die Dokumente.

    --
    Peter

    Sonntag, 9. November 2014 17:39
  • Hallo Claudia,

    das Entity Framework kann Kenntnisse im relationalen Entwurf nicht ersetzen und Du solltest Dir Lektüre dazu besorgen.

    Wenn ich das oben richtig interpretiere, handelt es sich hier um Teile und ihre Stückliste.

    Dabei benötigt man keine "Gruppen". Vielmehr wird jede Baugruppe (Zwischenstufe) ebenfalls durch ein Teil identifiziert. Womit die "gedoppelten" Dokumente / Bilder Tabellen hinfällig sind. Grob skizziert hättest Du somit:

    • Teile: TeileID, Bezeichnung, ...
    • Stückliste: StücklisteID, StücklisteTeileID TeileId, Anzahl, ...
    • Teile - Dokumente: TeileID, DokumentID, ...
    • Dokumente: DokumentID, Verweis, ...

    Wobei es bei der Stückliste davon abhängt, ob ein Teil mehrfach vorkommen kann und (oder) die Reihenfolge von Bedeutung ist, dann wäre eine PositionNr zusätzlich als Schlüsselkandidat erforderlich.

    Die Trennung von Teile-Dokumente und Dokumente deshalb, damit identische Dokumente für mehrere Teile verwendet werden kann, und eine Doppelhaltung vermieden wird. Die Bilder wären entweder identisch zu den Dokumenten aufzubauen. Wobei man auch auf diese Tabellen verzichten kann, und anstatt dessen über eine Kennung den "Dokumententyp" identifizieren kann, wie Textdokument, Bild, Video, ... Anmerkung: Soweit es sich bei den "Dokumenten" um Planzeichungen etc. handelt, kann eine Versionierung wichtig sein, damit bei einer Modelländerung die richtigen Plänen verwendet werden (und auch für Alt-Modelle weiter existieren) - und i. a. wichtiger als wer was wann verbockt hat.

    Was die Realisierung mit den Entity Framework angeht: Für die Stücklisten Auflösung ist es weniger nicht geeignet - über rekursive allgemeine Tabellenausdrücke ist das leichter zu realisieren.

    Für die Ablage von Dokumenten / Bildern eignet sich (ab SQL Server 2012) eine FileTable. Damit ist ein Zugriff auch über andere Wege als ADO.NET / EF möglich.

    Gruß Elmar

    Montag, 10. November 2014 07:35
    Beantworter

Alle Antworten

  • Hi Claudia,
    primär sollte nicht die Technologie (EF, Code First usw.) sein, sondern die sachliche Logik inklusive Bedientechnologie.

    Anhand der sachlichen Logik kann man ein Datenmodell entwickeln und dann mit EF umsetzen. Wenn beispielsweise Gruppen Master ist und Teile Master ist und Bilder Child ist, dann ist es recht einfach eine gemeinsame Bilder-Tabelle zu nutzen. Im umgekehrten Fall (ein Bild kann in unterschiedlichen Gruppen oder Teilen vorkommen), wird es schon komplizierter. Dasselbe betrifft auch die Dokumente.

    --
    Peter

    Sonntag, 9. November 2014 17:39
  • Hallo Claudia,

    das Entity Framework kann Kenntnisse im relationalen Entwurf nicht ersetzen und Du solltest Dir Lektüre dazu besorgen.

    Wenn ich das oben richtig interpretiere, handelt es sich hier um Teile und ihre Stückliste.

    Dabei benötigt man keine "Gruppen". Vielmehr wird jede Baugruppe (Zwischenstufe) ebenfalls durch ein Teil identifiziert. Womit die "gedoppelten" Dokumente / Bilder Tabellen hinfällig sind. Grob skizziert hättest Du somit:

    • Teile: TeileID, Bezeichnung, ...
    • Stückliste: StücklisteID, StücklisteTeileID TeileId, Anzahl, ...
    • Teile - Dokumente: TeileID, DokumentID, ...
    • Dokumente: DokumentID, Verweis, ...

    Wobei es bei der Stückliste davon abhängt, ob ein Teil mehrfach vorkommen kann und (oder) die Reihenfolge von Bedeutung ist, dann wäre eine PositionNr zusätzlich als Schlüsselkandidat erforderlich.

    Die Trennung von Teile-Dokumente und Dokumente deshalb, damit identische Dokumente für mehrere Teile verwendet werden kann, und eine Doppelhaltung vermieden wird. Die Bilder wären entweder identisch zu den Dokumenten aufzubauen. Wobei man auch auf diese Tabellen verzichten kann, und anstatt dessen über eine Kennung den "Dokumententyp" identifizieren kann, wie Textdokument, Bild, Video, ... Anmerkung: Soweit es sich bei den "Dokumenten" um Planzeichungen etc. handelt, kann eine Versionierung wichtig sein, damit bei einer Modelländerung die richtigen Plänen verwendet werden (und auch für Alt-Modelle weiter existieren) - und i. a. wichtiger als wer was wann verbockt hat.

    Was die Realisierung mit den Entity Framework angeht: Für die Stücklisten Auflösung ist es weniger nicht geeignet - über rekursive allgemeine Tabellenausdrücke ist das leichter zu realisieren.

    Für die Ablage von Dokumenten / Bildern eignet sich (ab SQL Server 2012) eine FileTable. Damit ist ein Zugriff auch über andere Wege als ADO.NET / EF möglich.

    Gruß Elmar

    Montag, 10. November 2014 07:35
    Beantworter
  • Ich danke Euch für die Antworten. Bin leider erst heute wieder zum lesen gekommen. Das Projekt dient für mich zum Einarbeiten in das Entity Framework. Ich hatte schon einige Tutorials in youtube dazu angesehen - aber meistens ist es so, dass man immer Startschwierigkeiten zu Projektstart hat.

    Könnt Ihr noch brauchbare Literatur oder Links zu dem Thema empfehlen?

    LG

    Claudia

    Donnerstag, 13. November 2014 10:19
  • Hallo Claudia,

    weitere Informationen gibt es unter Entity Framework Resources and Community

    Wobei  im allgemeinen selber programmieren besser zum lernen geeignet ist als Video gucken ;)

    IMO ist dafür ist eine Stückliste nicht unbedingt der ideale Weg, da wie angedeutet, einige Dinge außerhalb des EF besser geregelt werden können.

    Achtung: Das kommende EF 7 wird wieder einige größere Schritte machen, siehe EF7 – v1 or v7?

    Gruß Elmar

    Samstag, 15. November 2014 17:28
    Beantworter
  • Hallo Claudia,

    ich will jetzt nicht alles nochmal wiederholen was schaon gesagt wurde nur eine kurze Zusammenfassung:

    - EF ist ein Objekt-Relationen-Manager bedeutet das die relationelle Struktur der Tabelle einfach auf Objekte übertragen wird. Das bedeutet es wird dir beim Programmieren leichterfallen die Daten zu benutzen da du einfach ein Objekt hast was deinen Datensatz wiederspielgelt inklusive seiner Relationen (z.b. Verweise auf andere Datensätze welche zusammengehörig sind.

    Als Buch Empfehlung kann ich das (englische) Buch "Programming Entity Framework" (OReilly Verlag) empfehlen.

    Weiterhin ist zu bedenken das du die Software nicht ohne weiteres auf Windows XP Geräten zum laufen bringen wirst, aber Gott sei dank ist XP eine Aussterbende Gattung.

    Montag, 17. November 2014 10:11
  • Hi Claudia,
    wichtig bezüglich Windows XP ist noch, dass Du Dich auf das Niveau von EF 5 und Framework 4 begeben musst. Die aktuellen Versionen laufen nicht mehr auf Windows XP.

    --
    Peter

    Montag, 17. November 2014 10:39
  • Danke Euch allen für die Antworten. Mal schauen wie weit ich jetzt komme mit meinen ersten Versuchen;)

    LG

    Claudia

    Montag, 17. November 2014 17:42