Fragen zu Mysql?

... komplette Frage anzeigen

4 Antworten

Das kannst du zwar so machen, aber das macht nicht viel Sinn. Höchstens wenn du Schreibfehler bei den Farben vermeiden willst und eine Tabelle mit Farbcodes für jede Farbe anlegst. Also z.B

Tabelle Haarfarben:

ID | Farbe
----------------
1  | Hellblond
2  | Dunkelblond
3  | Braun
4  | Rot
5  | Bunt gefärbt

Tabelle Augenfarben:

ID | Farbe
----------------
1  | Blau
2  | Grün
3  | Braun
4  | Grau
5  | Andere

Dann kannst du in der Tabelle mit den Personendaten halt die Farb-ID speichern, anstatt dem Text mit der Farbe.

Dass du für jede Eigenschaft eine Tabelle anlegst und in den Tabellen dann für jede Person eine ID mit der jeweiligen Eigenschaft anlegst, wäre sinnlos. Ich arbeite seit ein paar Jahren mit Datenbanken. Der einzige Fall, wo wir mal zwei Tabellen mit einer 1:1 Beziehung aufgebaut haben, war in MS Access, weil die Tabellen dort maximal 255 Spalten haben dürfen und die Tabelle zu groß geworden ist. Daher haben wir sie in zwei Tabellen aufgeteilt.

Deine Idee, wie die Abfrage dafür aussehen könnte, passt schon. Ware dann etwa so:

SELECT * 
FROM tblName INNER JOIN tblAlter ON tblName.ID = tblAlter.ID 
             INNER JOIN tblHaarfarbe ON tblName.ID = tblHaarfarbe.ID 
             INNER JOIN tblHaarlänge ON tblName.ID = tblHaarlänge.ID 
             INNER JOIN tblBeschreibung ON tblName.ID = tblBeschreibung.ID 
             INNER JOIN tblNationalität ON tblName.ID = tblNationalität.ID
WHERE tblName.Name = 'Perry Flynn-Fletcher'

Normalerweise würdest du aber einfach eine einzelne Tabelle machen, wo alle Informationen drinstehen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MikeZeen94
12.07.2016, 13:16

Vielen Dank für die Antwort ^^

Habe es bisher auch größtenteils verstanden :)

Nur versteh ich nicht wie ich zwei Tabellen miteinander "verbinden kann".

Das heisst, ich erstelle eine Tabelle in der ich jeder Farbe eine ID zuteile. Was ich nicht verstehe ist wie ich das dann der Haupttabelle zuteile :S

0
Kommentar von RakonDark
12.07.2016, 13:37

komisch das du das so sagst . du magst ja gearbeitet haben aber von Wartung etc scheinst du nicht so die Ahnung zu brauchen. nach deiner Logik brauch man am besten immer nur eine Tabelle für alles.

0

Hallo zusammen,

ich habe mich anscheindend missverständlich ausgedrückt. Ich habe das so verstanden, dass es um Personen geht und das meinte ich auch mit der ID, die muss auch nicht sichtbar sein. Man kann doch jederzeit den unterschiedlichen Zeilen die ID der Person zuweisen. Wenn nun jemand was "blondes" interessiert, so wird die dazugehörige ID abgefragt und eine Tabelle mit nur dieser Person ausgegeben, die z.B. ID 10 hat und so wird jeder "extra" Tabelle die PersonenID mit gegeben, damit man zu den Infos kommt. Wenn es wirklich ALLE blonden Personen sein sollen, so erstellst du einfach eine Abfrage mit (vereinfacht) hole Datensätze wo Haarfarbe = "Blond", das wird dann auch mit einer Schleife ausgegeben. So ginge das mit allen anderen Werten auch.

Ich denke eine Tabelle genügt hier völlig!

Tabelle mit: ID, Alter, Name, Haarfarbe, Nationalität, Geschlecht, Ausbildung, Hautfarbe, Augenfarbe, Wohnort, Tel Nr, Mail, Gewicht, Grösse und und und

Wie du das Darstellst hat ja nichts mit der Abfrage an sich zu tun. Du könntest z.B. mit PHP einfach eine foreach() Schleife schreiben, die alle Daten ausgibt und wenn du Daten trennst, gibst du der extra Ausgabe-Tabelle die ID mit, die ID muss ja nicht ausgegeben werden bzw. wird direkt als zu übergebenden Wert bei Aufruf bereitgestellt.

Aber ich hätte noch einen anderen Vorschlag, warum machst du Spalten nicht ein- und ausblendbar, so kann sich jeder selber aussuchen, was er sehen und vergleichen möchte. Dann könntest du z.B. eine weitere Ansicht machen, wo du wenige Datensätze miteinander verlgeichen kannst, dafür aber vollständig.  ....

Mit DB-Tabellen-Verknüpfungen bin ich nicht besonders stark, aber ich denke auch nicht, dass du für sowas mehrere DB-Tabellen benötigst. LG

Antwort bewerten Vielen Dank für Deine Bewertung

Hallo,

Wenn du deine Werte auffindbar halten willst, so musst du wohl z.B. die Tabellen-ID mit angeben. Wenn jemand auf die Haare klickt, so kannst du ein MySQL Statement erstellen, das nach dieser ID sucht und alle Daten ausgibt. Anstatt der ganzen Tabelle holst du also nur (mittels "where" Klausel) die ID zu der diese "Haare gehören" usw...

Es ist möglich Bilder zu speichern in der DB (glaube als "Blob"). Würde das aber nicht machen, lege lieber den Link in der Tabelle ab.

LG

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von RakonDark
12.07.2016, 13:33

natürlich nicht wehre sondern mit Joins und On Haarfarbe = Haare. id

0

Zur ersten Frage ja!

Es ist wichtig das einen Gute sql Datenbank oder generell Datenbanken über die Normalformen verfügen deswegen nutzt man primär und Sekundär Schlüssel beispielsweise könntest du für Haarfarbe eine eigene Tabelle anlegen und indexiert (1,braun 2,schwarz 3,blond) jeder fabe auflisten in dein "Objekt" schreibst du nun nurnoch den Index als Sekundärschlüssel rein! sowas macht man um die Normalformen einzuhalten einfach mal nach googlen findet man mit Sicherheit viel zu!

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von PaulyPanther
12.07.2016, 16:16

Sorry, das ist jetzt aber um die Ecke gedacht. Was hat das mit der Einhaltung der Normalformen zu tun. Ob da steht braun, gelb, braun oder 2, 1, 2 ist genau dasselbe ... macht nur mehr Arbeit. Der Index muss EINDEUTIG sein und das in einer Tabelle kann nicht zu Redundanzen führen m.E.. Es gibt da schöne HIlfsfunktionen, die die ID selber hochzählen damit es keine Zwillinge gibt. LG

0

Was möchtest Du wissen?