Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Frage zu foreign keys

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.10.2004
    Beiträge
    19

    Frage zu foreign keys

    Hallo,

    ich bin absoluter DB-Neuling, habe zum ersten Mal mit MySQL zu tun, von daher seid bitte gnädig mit mir.

    Nun aber zu meiner Frage:
    Über ein Webformular sollen Veranstaltungen in die Datenbank eingetragen werden. Ich habe eine Tabelle für die Veranstaltungen und eine weitere für den Veranstaltungsort. Ich habe mich für die Variante mit 2 Tabellen entschieden, um redundante Daten in der DB zu vermeiden. Nun wird in der DB mit den Veranstaltungen einfach die ID des Ortes angegeben. So können auch alle User einfach auf die für sie zugelassenen Orte zugreifen.
    Nun muß ja aber beim Speichern die richtige ID aus der Tabelle mit den Veranstaltungsorten eingetragen werden. Und wenn es den Ort noch nicht gibt, ist das für mich ein Problem, denn wie bekomme ich den Wert der nächsten gültigen ID heraus? Einfach das ID-Feld auslesen und um 1 erhöhen? Aber was passiert dann, wenn in der Zwischenzeit jemand anderes schneller ist mit dem Speichern?
    Ich hoffe ich konnte mein Problem überhaupt einigermaßen deutlich darstellen.

    Vielen Dank für Eure Hilfe.

  2. #2
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Alle mir bekannten Datenbanken bieten etwas wie "auto_increment" an, dass bei leerer ID den Wert mit dem nächsten freien füllt.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  3. #3
    Registrierter Benutzer
    Registriert seit
    16.10.2004
    Beiträge
    19
    Ja, mit autoincrement sind die Spalten der IDs ja auch versehen.
    Anscheinend war meine Problembeschreibung doch ein wenig zu chaotisch.

    Über ein Formular sollen beide DB-Tabellen geändert werden. Die ID der einen Tabelle wird durch auto_increment automatisch hochgesetzt, aber in der anderen Tabelle möchte ich ja nun einen Verweis auf die gerade erstellte ID angeben. Wie bewerkstellige ich das? Erst erstellen, dann auslesen und in die 2te Tabelle schreiben oder schon vorher auslesen, erhöhen und dann einfach in die 2te Tabelle schreiben? Oder geht das alles viel einfacher?

  4. #4
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Du musst ja beim Speichern zunächst prüfen, ob der Ort schon vorhanden ist. Ist er vorhanden, hast du die ID und somit kein Problem.
    Ist er nicht vorhanden, musst du zunächst den Ort speichern, dann die vergebene id ermitteln und dann die Veranstaltung speichern. Das Ganze solltest du in eine Transaktion kapseln. Je nachdem, mit welcher Programmiersprache du den Datenbankzugriff machst, wird es eine Funktion geben, die vergebene Nummer zu ermitteln (Die Datenbank führt hier Buch). So lange nur ein einzelnes Programm auf die Datenbank zugreift, kann das konkurrierende Schreiben leicht geregelt werden. Andernfalls musst du die Sperrfunktion der Datenbank nutzen.

    Disclaimer: Mit MySQL kenne ich mich nicht aus.
    Geändert von mwanaheri (18-07-2006 um 19:57 Uhr)
    Das Ziel ist das Ziel.

  5. #5
    Registrierter Benutzer
    Registriert seit
    16.10.2004
    Beiträge
    19
    Ich danke Dir mwanaheri,
    jetzt ist mir das ganze doch klarer geworden und ich weiß, wie ich daran gehen muß. Ich werde es jetzt so ausprobieren, falls etwas nicht klappt, melde ich mich hier wieder.

    Danke!

  6. #6
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Such mal nach "last_insert_id" (oder so ähnlich). Die liefert den letzten Auto-Inc der geöffneten Verbindung.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •