MYSQL- Anfängerfrage 2 Tabellen

florian13

Grünschnabel
Hallo,

ich bin MYSQL Anfänger und habe folgendes Problem.

Ich habe zwei Tabellen die ich mit Daten befüllen möchte.

Tabelle 1: Liste

id (primärschlüssel und auto_increment)
vorname
nachname
idort
id|vorname|nachname|idort
1| Hans| Heinrich| 1
2| Marion| Müller| 2
3|Uta| Geske| 4
4| britta| Meier| 3
5|Thorsten| Mann| 1
6|Dirk| Passau| 3


Tabelle 2 : ort

id2 primärschlüssel und auto_increment)
ort

id2|ort
1|Berlin
2|München
3|Hamburg
4|Frankfurt

Mit meiner Abrfage (SELECT vorname, nachname, ort FROM liste LEFT JOIN ort ON (ort.id2=liste.idort))bekomme ich auch schon mein Ergebnis so wie ich es haben möchte.

vorname, nachname, ort (mit id aus tabelle 2)

Hans| Heinrich| Berlin
Marion| Müller| München
Uta| Geske| Frankfurt
britta| Meier|Hamburg
Thorsten| Mann| Berlin
Dirk| Passau| Hamburg

So nun meine Fragen:

Macht mein Tabellenaufbau bzw Datenbankaufbau so sinn?

Wie kann ich Daten in die Tabellen schreiben?

wenn ich in München wohne würde ich bei Ort ja München schreiben und wie kommen die Daten in Abhängigkeit in die Tabellen?

Wir wäre hier der SQL Befehl?

Was würde passieren wenn ich nun Köln wohne und dies dann eintrage wird dann automatisch eine neue id erzeugt oder muss ich den Ort vorher in der Tabelle 2 anlegen ... das ist aber dann auch nicht gut ich weiß ja nicht aus welcher Stadt die neuen Personen kommen.

Bestimmt ist es ganz einfach zu lösen ... ich habe einen Knoten im Hirn. Auch die suche hat nicht geholfen oder ich habe die falsche Fragestellung.

Vielleicht könnt ihr mir helfen:)

Danke
 
>Macht mein Tabellenaufbau bzw Datenbankaufbau so sinn?
Ja und Nein.
Es macht Sinn, verlangt aber eine saubere Datenhaltung in der Tabelle orte. Weiter unten dazu mehr.
Darum hast du in vielen DBs den Ort nicht getrennt, sonder einfach als Textfeld bei der Adresse. Kommt sehr an die Anforderungen drauf an.

>Wie kann ich Daten in die Tabellen schreiben?
Mit einem INSERT-Statement

>wenn ich in München wohne würde ich bei Ort ja München schreiben und wie kommen die Daten in Abhängigkeit in die >Tabellen?
Das ist gefährlich. Am besten sind die Ort seperat erfasst und bei der EIngabe hast due ein Dripdown oder sowas. Das Problem ansonsten ist, dass ev. 'Berlin' schon drin ist. Jetzt kommt aber jemand der aus versehen 'Brelin' schreibt. Das würde bei einer ungeprüften manuellen Eingabe automatisch ein Ort namens 'Brelin' anlegen. Der nächste schreibt 'Berlin-SPandau' und wieder einer 'Berliin' und der letzte 'Spandau'. Nun hast du 5 Einträge in der Ort-Tabelle die alle eigentlich derselbe sein sollten (je nachdem ob due SPandau zu Berlin zählen willst doer nicht...).
 
Halllo Yaslaw,

danke für deine schnelle antwort.

Das mit dem Insert wusste ich ... wäre ja dann so

INSERT INTO liste (vorname,name,ort ) VALUES ('Hans','Meier','Berlin')

was ich nicht verstehe wie ich es hin bekomme dass dann in der Tabelle Liste die 1 für Berlin steht. Also dieses Tabelübergreifende Eintragen mit den Id werten. Hoffe ihr versteht mich.


Die Werte waren jetzt auch nur mal so zum Testen ...könnten auch Bücher mit Autoren sein. Ich bin im Moment am PHp und MYSQL lernen. Habe mir Bücher zugelegt und versuche es mir zu erabeiten. Aber man hat halt manchmal ein Verständnisproblem und kommt nicht weiter ;-). Deswegen habe ich mich an die Profis gerichtet.

Dropdown klingt gut habe ich auch schon Probiert und ich bekomme auch die Daten aus der DB in das Dropdownfeld. Die Frage ist dann nur wie kann der user einen neuen Eintrag einfügen der nicht im Dropdown drin ist. Muss ich dann ein extra Textfeld machen oder gibt es hier auch wieder einen Trick das Dropdown zu Beschreiben. Mal angenommen man möchte, dass der user Einträge generieren kann
 
setz einen unique index auf ort.

dann machst du einfach

INSERT INTO ort VALUES('Berlin');
SELECT id2 FROM ort WHERE ort = 'Berlin';
um die ID zu bekommen

und die ID fügst du in deine liste ein.

Ob ein derart hoher normalisierungsgrad sinn macht ist zu überlegen. Der verwaltungsoverhead für die tabelle wiegt warscheinlich den vorteil den du durch die normlisierung gewinnst wieder auf, daher wird in der praxis oft darauf verzichtet.

Grade bei kleinen datenbanken mit wenig users (ein paar tausend), ist das relativ egal.

Zu der frage wie man das dem user anzeeigen könnte:

Nun das hängt davon ab wie du das UI baust. Es gibt es beispielsweise die möglichkeit Combo-boxes zu verwenden (das ist ein dropdown, wo man selber daten eintragen kann), oder wenn du HTML Forms verwenden willst, halt das übliche "other" in dem downdown, und ein input field drunter um die eingabe zu machen.
 
Zurück