# SQL und Foreign Key



## Shaguar (18. Sep 2007)

Hallo Leute,

hab folgendes kleines Prolemchen,
ich habe eine Java Anwendung bei der man selbst SQL Tabellen erstellen und editieren kann (um sie später mit Daten zu befüllen, was hier aber grad keine Rolle spielt).
Also das was ich erreichen will ist folgendes : 
2 Tabellen erstellen, Tabelle A und Tabelle B. Tabelle A hat von  mir au 6 Felder, wobei eins der Felder nur mit Werten die in Tabelle B stehen befüllt werden darf. (Später mit einer ComboBox oder so realisiert)
Wie muss ich da die Tabellen erstellen? einfach in dem ich bei Tabelle A bei der entsprechenden Spalte einen Foreign Key zur Tabelle B setze? also in etwa so :


```
CREATE TABLE A (Id AUTO_INCREMENT int(11), Value_B VARCHAR(20), PRIMARY KEY (Id), FOREIGN KEY (Value_) REFERENCES B(Value))

CREATE TABLE B (Id AUTO_INCREMENT int(11), Value VARCHAR(20))
```

Wie würde das dann später aussehen wenn ich eine neue Zeile in Tabelle A einfügen will und das in der besagten Spalte dann nur Werte aus Tabelle B eingeben kann?


----------



## SnooP (18. Sep 2007)

Beim Einfügen selbst musst du nichts weiter beachten, wenn du aus Versehen falsche Werte einfügst, wird er dir sagen, dass entsprechende Constraints verletzt wurden... - d.h. du musst schon von dir aus dafür sorgen, dass die Werte die einzufügen sind, die richtigen sind, ansonsten gibt's halt Exceptions, die man abfangen kann...
aber wenn du z.B. eh ne combobox darstellen willst, dann stehen dort halt die entsprechenden Werte drin und gut


----------



## Shaguar (18. Sep 2007)

Also reicht der Foreign Key damit er mir bei falscher Eingabe nen Fehler bringt?
und bei der Combobox müsste ich die Werte manuell reinschreiben damit sowas erst gar nicht vorkommen kann.
Also sind die SQL Befehle oben richtig für mein Vorhaben oder muss ich noch irgendwelche Constraints definieren?


----------



## SlaterB (18. Sep 2007)

B.Value sollte vielleicht der PrimaryKey sein, was mit der Id wohl nicht zu vereinbaren ist,
dann wenigstens Unique

allgemein gilt: testen testen testen bevor du auch nur einmal 'wird das so funktionieren' nachfragst,

zumindest Syntaxfehler oder eben logische Bedingungen wie bei diesem Fremdschlüssel könntest du damit aufdecken,
wenn es dann scheinbar läuft, dann ist natürlich immer noch die Frage nach der Korrektheit berechtigt


----------



## ms (18. Sep 2007)

Welche Datenbank verwendest du?

ms


----------



## Shaguar (18. Sep 2007)

äh für das Java Programm benutz ich eine H2 Datenbank.
Ich hab das ganze aber mal auf ner MySQL Datenbank mit PHPMyAdmin getestet. Kann es sein das es PhpMyAdmin völlig egal ist was für Werte ich eintrage. Habe 2 Tabellen erstellt und eine mit dem Constraint Foreign Key zu der anderen Tabellen, aber ich konnt dort trotzdem jeden beliebigen Wert eintragen ohne einen Fehler zu bekommen.


----------



## ms (18. Sep 2007)

Nicht PHPMyAdmin sondern MySql ignoriert contraints, sofern du die Standardinstallation (MyIsam) verwendest.

ms


----------



## Shaguar (18. Sep 2007)

Aber ansonsten müsste es funktionieren mit der Kombi aus Contraints und Foreign Key ?


----------



## ms (18. Sep 2007)

Theoretisch ja.
Ich würds einfach ausprobieren, aber auf einer richtigen Datenbank.

ms


----------

