Announcement

Collapse
No announcement yet.

Hilfe bei Primary Key und Foreign Key

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hilfe bei Primary Key und Foreign Key

    Hallo,

    Hatte heute meine 4 Vorlesung in Oracle Datenbanken. Kann mir jemand helfen bei Primary Key und Foreign Key, ich kapiere es nicht so richtig. Wäre euch sehr dankbar!!!! Vielleicht per e-mail oder MSN!?

    lg

  • #2
    Das schlimme ist dass es sehr ähnlich klingende Begriffe sind, die eigentlich nicht wirklich viel miteinander zu tun hab.

    Ein Primary Key beschreibt einfach das was einen Eintrag in einer Datenbank eindeutig macht. In den meisten Fällen ist das z.B. eine ID. In einer Tabelle hat also jeder Eintrag einen anderen Primary Key.

    Ein Foreign Key ist ein Verweis von einem Eintrag in einer Tabelle auf einen anderen Eintrag in einer anderen Tabelle. Hierzu muss man die ID des Eintrags auf den verwiesen wird in einem Feld der Tabelle speichern. Beispiel:

    Code:
    Tabelle Kunde
    ---------------------
    ID Name         AdresseID
    1  Caro         1
    2  Caros Mutter 1
    3  Florian      2
    
    Tabelle Adresse
    ---------------------
    ID Stadt
    1  Berlin
    2  Ingolstadt
    In der Tabelle Kunde und Adresse wäre jetzt ID der Primary Key. Jeder Eintrag hat eine eindeutige ID (1 -> Caro, 2 -> Caros Mutter, 3 -> Florian).

    Der Foreign Key ist hierbei die AdresseID. Diese ist KEIN Primary Key der Tabelle Kunde, sondern sie verweist auf die ID der Tabelle Adresse. Wie Du siehst hat Deine Mutter die gleiche Adresse wie Du (das hab ich jetzt einfach mal angenommen ). Und ich habe eine andere Adresse.

    Folgende Sachen sollte man übrigens nicht machen, auch wenn euch die euer Prof mit Sicherheit erklären will:
    - Immer nur rein technische IDs verwenden. In der Praxis kann es vorkommen dass z.B. pro Tabelle der Name einer Person immer eindeutig ist und dieser theoretisch als Primärschlüssel verwendet werden könnte. In der Praxis ist das allerdings nicht brauchbar, denn wenn man den Wert des Primärschlüssels ändern möchte ist das nur schwierig möglich. Deswegen IMMER einen rein technischen generierten Schlüssel verwenden (hochzählende ID, GUID).

    - Keine zusammengesetzten primary Keys verwenden. Es gibt die Möglichkeit einen Datenbankeintrag auch über mehrer Felder eindeutig zu machen (z.B. Name + Vorname + Stadt). Das hat allerdings den Nachteil dass man, sollte man einen Eintrag per Foreign Key referenzieren wollen, immer diese Felder durch die komplette Datenbank schleift, weil man ALLE Felder braucht die den zusammengesetzten Schlüssel bilden um einen Eintrag zu referenzieren.

    Ich hoffe das hat etwas geholfen. Ich fand das in der Uni auch etwas wirr. Am Besten Du setzt Dir einfach mal eine kleine DB auf (SQL Express oder so) und probierts selbst etwas herum. Versuch das ganze nicht nur auf dem Papier zu verstehen

    Gruß
    Florian

    Weiterführende Links:
    http://de.wikipedia.org/wiki/Schl%C3%BCssel_(Datenbank) oder auf google

    Comment


    • #3
      Mit der Frage nach Privatunterricht wirst Du hier wenig Begeisterung ernten. (siehe 2 oder 3 Threads "tiefer", das erklärt glaub ich alles)
      Am besten, Du stellst hier konkrete Fragen, dann haben alle was davon.

      Deine Frage ist ja recht generell gehalten, sie betrifft ein grundlegendes Prinzip von SQL und RDBMS (nicht nur Oracle). Zu Syntax und zugehörigen Fachbegriffen dürftest Du in der Vorlesung genug Material bekommen, also mal eine umgangssprachliche Erläuterung:

      In einem RDBMS werden Daten in >Mengen< abgebildet. Einfache, vordefinierte und fest strukturierte Mengen sind zunächst die Tabellen. Jedes Select Statement definiert dann im Grunde eine neue, eigenständige Menge. (Das nur am Rande)
      Die >Schlüssel< kommen dabei an zwei Punkten ins Spiel:
      1. Ein bestimmtes Element innerhalb einer Menge (eindeutig) zu bestimmen / zu finden.
      klassisches Anwendungsbeispiel: Kundennummer in Kundenstamm
      2. Eine Zugehörigkeit von Elementen unterschiedlicher Grundmengen zu definieren.
      klassisches Anwendungsbeispiel: Kundennummer in einer Rechnung

      Hilfreich ist vielleicht schon die deutsche Übersetzung der Begriffe.
      Der Primärschlüssel (Primary Key) dient der eindeutigen Identifizierung eines Elementes (Datensatz) einer Menge (Tabelle). Das könnte man aber auch als >Eigen<Schlüssel bezeichnen.
      Im Gegensatz zum >Fremd<Schlüssel (Foreign Key), der wie unter 2. beschrieben, ein Element einer Datenmenge dem Element einer >fremden< Menge zuordnet.

      Um per Select Statement nun 2 Mengen zu vereinigen >joinen<, sagt man der DB, welche Spalten der beiden Mengen verbunden werden sollen.
      Hier gibt es tatsächlich eine Besonderheit bei Oracle, das nicht unbedingt wie viele andere Systeme eine Join Clause benötigt. Nicht weil es ohne diese Angaben auskommt. Es kann aber syntaktisch (fast) alle Funktionen eines Joins in einer Where Clause behandeln.
      Ich persönlich arbeite fast immer nur mit Where-Clause, Join kann aber (bei Oracle) etwas mehr und es differenziert deutlich, scheint mir insofern lehrreicher zu sein.

      Klassisches Beispiel
      Kunden- und Rechnungsnummern sind in ihrer Verwendung allgemein bekannt, insbesondere ihre Eindeutigkeit. Auf den ersten Blick vielleicht verwirrend, beide sind eindeutig und werden in einem Datenmodell sicher als Primärschlüssel für Kunden bzw. Rechnungen verwendet und natürlich auch so bezeichnet und definiert. Das allein wäre aber wenig hilfreich, wenn die Kundennummer nicht eine weitere Funktion übernehmen würde. Sie ist der Fremdschlüssel in der Rechnungstabelle und erlaubt damit die Zuordnung von Rechnungen zu einem Kunden.
      Für das Verständnis nicht unbedingt hilfreich ist dabei, dass die Tabellenspalten für Fremd- und Primärschlüssel in der Realität beliebig benannt werden können. Egal ob identische Namen oder ganz unterschiedliche, entscheidend ist zunächst in Deinem Fall die Definition als Primär oder Fremdschlüssel und letztlich vor allem der Feldinhalt. Der Feldwert eines Fremdschlüssels zeigt auf das Element der >Fremdmenge< mit dem identischen Feldwert im Primärschlüssel.

      Das Prinzip ist beliebig verschachtelbar und beinhaltet, dass zumindest der Begriff Fremdschlüssel kontextabhängig ist. Eine Spalte, auf der ein Fremdschlüssel definiert ist, zielt immer auf einen Primärschlüssel.

      Bevor das nun alles in eine ganz falsche Richtung läuft:
      Wo benötigst Du genau Unterstützung?
      Als Gedanken-Übung kannst Du Dir vielleicht mal die Frage stellen, warum Excel keine Datenbank ist.
      Gruß, defo

      Comment


      • #4
        Originally posted by defo View Post
        Eine Spalte, auf der ein Fremdschlüssel definiert ist, zielt immer auf einen Primärschlüssel.
        Das stimmt nicht, ein Fremdschlüssel kann auch auf einen eindeutigen Schlüssel (Unique-Key) zielen, es muss nicht zwingend der Primärschlüssel sein.

        Und da vermutlich gleich die Frage auftaucht: Was der Unterschied zwischen einem "Eindeutigen Schlüssel" und einem "Primärschlüssel", bzw. Primary-Key und Unique-Key?

        Antwort: Eine Spalte mit einem Unique-Key kann leer (NULL) sein, ein Primary-Key muss immer einen Wert haben.

        Gruss

        Comment


        • #5
          Originally posted by Wernfried View Post
          ...Was der Unterschied zwischen einem "Eindeutigen Schlüssel" und einem "Primärschlüssel", bzw. Primary-Key und Unique-Key?

          Antwort: Eine Spalte mit einem Unique-Key kann leer (NULL) sein, ein Primary-Key muss immer einen Wert haben.
          ...und ein Primärschlüssel kann nur EINMAL pro Tabelle existieren, während es mehrere Unique Keys pro Tabelle geben kann.

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment

          Working...
          X