Hallo Leute!
Ich sitze hier über einem kleinen VB-Programm, welches auf eine MySQL-DB zugreifen und dort mehrere Tabellen erzeugen soll.
Bei den einfachen Tabellen, die nur einen Primärschlüssel und x Wertespalten besitzen, klappt das ja auch ganz toll.
Nun kommen aber die etwas komplexeren Tabellen, die (neben dem PK und Wertespalten) mittels FK auf andere Tabellen verweisen.
Beispiel:
Ich habe eine Tabelle „Ort“ mit numerischem PK (Integer) und der Wertespalte, in welcher der Ort eingetragen wird:
strAbfrage = "CREATE TABLE `tab_ort`(" & \_
"`id_ort` INTEGER UNSIGNED NOT NULL AUTO\_INCREMENT, " & \_
"`ort` varchar(50), " & \_
"PRIMARY KEY(`id_ort`)) " & \_
"ENGINE = InnoDB;"
DBVerbindung.Execute strAbfrage
Das funktioniert.
Nun möchte ich aber eine Tabelle „tab_plz“ erzeugen, die Spalte ‚id_plz‘ wird PK und die Spalte „fk_ort“ soll auf die Tabelle tab_ort verweisen.
Ich habe schon einige Variationen ausprobiert, trete aber auf der Stelle.
Mein letzter Versuch war:
strAbfrage = "CREATE TABLE `tab_plz`(" & \_
"`id_plz` VARCHAR(10) NOT NULL, " & \_
"key `fk_ort` INTEGER UNSIGNED NOT NULL, " & \_
"PRIMARY KEY(`id_plz`), " & \_
"FOREIGN KEY(`fk_ort`) references tab\_ort)" & \_
"ENGINE = InnoDB;"
Achja, der Datentyp Varchar ist für id_plz absichtlich gewählt worden, um z.B. das englische Zipcode-System verwalten zu können. Dazu noch eine Frage, der Einfachheit halber hier gestellt, wenn auch nicht hundertpro das richtige Brett.
Kann ich das so lassen oder sollte ich den Primärschlüssel besser als Integer mit autoincrement und eine Extraspalte für die PLZ anlegen?
Ich finde es so ok, laß mich aber gerne vom Gegenteil überzeugen.
Eine Tabelle „tab_person“ soll Namen, Adressdaten etc. aufnehmen und ich will plz und Ort seperat speichern, so das man lediglich die PLZ eingiebt und die Stadt dann ausgelesen wird. Eine Eingabe der Ortsbezeichnung ist also erst notwendig, wenn die PLZ unbekannt ist.
Kann mir jemand ein gutes Buch empfehlen, das sich schwerpunktmäßig mit VB und SQL beschäftigt?
Vielen Dank und liebe Grüße,
Ute