PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu foreign keys



fabter
18-07-2006, 16:17
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.

Turbohummel
18-07-2006, 17:56
Alle mir bekannten Datenbanken bieten etwas wie "auto_increment" an, dass bei leerer ID den Wert mit dem nächsten freien füllt.

fabter
18-07-2006, 18:12
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?

mwanaheri
18-07-2006, 19:23
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.

fabter
18-07-2006, 22:32
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!:D

Turbohummel
19-07-2006, 06:18
Such mal nach "last_insert_id" (oder so ähnlich). Die liefert den letzten Auto-Inc der geöffneten Verbindung.