MS-SQL und Fremdschlüssel-Beziehungen verstehe ich noch nicht!

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    MS-SQL und Fremdschlüssel-Beziehungen verstehe ich noch nicht!

    Moin!
    Ich habe eine Anfängerfrage zu MS-SQL.
    Ich habe eine Datenbank mit verschiedenen Tabellen.
    In meiner Visual Basic.NET Anwendung, kann ich erfolgreich Daten eintragen und auslesen.
    Da aber nun alle Tabellen ohne Beziehungen sind, und der Code läuft.
    Deshalb frage ich mich ob man es dann so lassen kann? :?:
    Wie wichtig sind Beziehungen? :?:
    Im Anhang habe ich ein Beispiel „Datenbank Diagramm“.
    Bis jetzt verwende ich als INNER JOIN immer die „ID“.
    Da diese immer die gleiche ist, und jeder User eine feste ID hat.
    Ich werde mich morgen mit Primär- und Fremdschlüssel intensiv beschäftigen.

    Da meine Anwendung auch ohne Fremdschlüssel funktioniert, weiß ich nicht
    wie wichtig diese sind und ob man diese braucht!
    Freue mich auf eure Antworten.
    BIG THX

    Visual Basic.NET 8o
    MS-SQL
    8o
    Nun, so wie ich das sehe, haben alle deine Tabellen einen Primärschlüssel namens ID. Das ist soweit schonmal ganz gut.
    Komischerweise scheinen sich deinen Tabellen in keinster Weise auf einander zu beziehen, daher kann ich aus dem Modell nicht wirklich herausbekommen, wie deine Anwendung arbeitet.

    Natürlich kann man eine Anwendung bauen, ohne feste Fremdschlüsselbeziehungen in der Datenbank. Diese (im Falle von MySQL, ich denke bei MSSQL ist es ähnlich) dienen, neben dem dass sie zumeist indiziert sind, als Blockade für Löschungen, wenn anderswo noch Referenzen auf Zeilen in dieser Tabelle existieren. Rein praktisch gesprochen.

    Logisch gesehen, ist es wichtig, dass man sich der Beziehungen seiner Tabellen untereinander bewusst ist, und auch entsprechend designed. Aus einer Gut überlegten Datenbank lässt sich oftmals der Programmablauf ableiten, bzw. wird geradezu vorgeschrieben.
    Ohne Tabellenbeziehungen sagst Du dem Leser: alle Tabellen sind unabhängig voneinander und haben nichts miteinander zu tun. Da Du es anders beschreibst (Stichwort Join), widerspricht Deine App aber dem Datenbankschema.
    Das Joinen von (Primär)IDs hingegen ergibt nur kurz Sinn. Und zwar, wenn ein User immer nur einen Login haben kann, ein Guthaben, ein VerbundenesGerät (Umlaute in der DB?!?) und eine SufZeit (also wenn ich nur zu einer Zeit saufen kann, dann werd ich aber grantig! :cursing: ; entweder Suffzeit oder wahrscheinlich eher Surfzeit). Wenn dem so wäre: Was bringt Dir das? Dann könntest Du gleich alles in eine Tabelle hauen. Mit Fremdschlüssel-IDs kannst Du aber eine 1:n-Beziehung aufbauen. Ein User kann mehrere Logins haben (keine Ahnung, ob das sinnvoll ist). Oder mehrere SuffSurfzeiten. Oder Guthaben.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich denke das Hauptverständnisproblem ist hierbei die Art der Verknüpfung von Informationen (Stichwort Relationale Datenbanken).

    Im Anhang siehst du in vereinfachter Form, wie die Verknüpfungen hergestellt werden. Zum Beispiel lagert man sowas wie Länder in einer separaten Tabelle, um die Datenredundanz zu verringern und das Joinen zu vereinfachen.

    Einfaches Beispiel (5 Tabellen):

    Artikel
    Land
    Frachtkosten
    Mehrwertsteuer
    Kunde

    Du willst jetzt ein Angebot erstellen und rufst den Kunden auf:

    Über die folgenden JOINs ermittelst du die Frachtkosten und Mehrwertsteuer die in Rechnung gestellt werden
    Kunde.LandesID -> Land.ID
    Land.ID -> Frachtkosten.LandID
    Land.ID -> Mehrwertsteuer.LandID

    Tabelle
    Feld

    ForeignKeys bieten dir für die voneinander abhängige Datensätze neue Möglichkeiten. Du kannst beispielsweise Wenn beispielsweise ein Kunde aus der Kundentabelle gelöscht wird kannst du das löschen kaskadieren auf die Tabelle Zahlungsinformationen, damit die gleich mit entfernt werden. Standardmäßig wird beispielsweise auch das Löschen eines Datensatzes vom SQL-Server abgelehnt solange noch abhängige ForeignKey-Einträge in anderen Tabellen auf den Datensatz verweisen. Es gibt noch bedeutend mehr Möglichkeiten und Funktionen, aber ich denke das Prinzip sollte an dieser Stelle klar sein. Gerade für SQL gibts es unglaublich viele Infos im Internet, einfach mal google.de anschubsen. Ich persönlich mochte die Erklärungen von W3school. Das hat mir damals sehr geholfen SQL zu verstehen.
    Bilder
    • RelationeDatenbanken.png

      17,89 kB, 700×700, 93 mal angesehen


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

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