MySQL: "verknüpfte Tabellen"?
MySQLFrager
- datenbank
Hi, ich frage mich, wie ihr folgende Situation am elegantesten lösen würdet (sprich: für den Server am ressourcenschonensden):
Ein Chat mit zwei Tabellen, in einer stehen die Nachrichten (Autor, Nachricht), in einer anderen die Benutzerdaten (Name, PW, Schriftfarbe, ...).
Wenn die Chatnachrichten angezeigt werden, sollen sie stets in der Schriftfarbe des Autors gezeigt werden.
Die Schriftfarbe kann nachträglich geändert werden und alle alten Farben sollen dann in der neuen Schriftfarbe erscheinen.
Kann man bei der Chat-Tabelle irgendwie ein Feld einfügen, das mit der Benutzerdaten-Tabelle veknüpft ist?
Oder sollte ich bei den Chatnachrichten ein Feld Farbe einfügen, in das beim Abschicken der Nachricht die Farbe gespeichert wird und beim ändern der Farbe der Eintrag bei allen Nachrichten geändert wird.
Oder sollte ich beim Auslesen der Chatnachrichten immer eine Abfrage machen welche Farbe der Autor derzeit ausgewählt hat?
Oder wäre ein gänzlich anderer Weg besser?
MfG
Oder wäre ein gänzlich anderer Weg besser?
Verknüpfte Tabellen gibt es afaik in MySQL nicht, da musst du schon mit JOIN-Techniken arbeiten.
Mahlzeit MySQLFrager,
Hi, ich frage mich, wie ihr folgende Situation am elegantesten lösen würdet (sprich: für den Server am ressourcenschonensden):
Ein Chat mit zwei Tabellen, in einer stehen die Nachrichten (Autor, Nachricht), in einer anderen die Benutzerdaten (Name, PW, Schriftfarbe, ...).
Wenn die Chatnachrichten angezeigt werden, sollen sie stets in der Schriftfarbe des Autors gezeigt werden.
Also so etwas wie:
SELECT N.Nachricht
, B.Schriftfarbe
FROM Chat_Nachricht N
JOIN Chat_Benutzer B ON N.Autor = B.Name
Damit liest Du doch automagisch immer die aktuelle Schriftfarbe des jeweiligen Autors aus - was genau ist Dein Problem?
Die Schriftfarbe kann nachträglich geändert werden und alle alten Farben sollen dann in der neuen Schriftfarbe erscheinen.
Das tun sie - wenn Du es auf die oben skizzierte Weise tust (oder wenigstens so ähnlich).
Kann man bei der Chat-Tabelle irgendwie ein Feld einfügen, das mit der Benutzerdaten-Tabelle veknüpft ist?
Ähm ... ja. Ich bin davon ausgegangen, dass Du so etwas bereits hast.
Merke: es ist IMHO in fast allen Fällen sinnvoll, jede Tabelle mit einem PRIMARY KEY auszustatten, der UNIQUE ist und entsprechende INDEX besitzt (ich persönlich wurde diesen rein technischen Schlüssel immer als NUMBER anlegen).
Dann kann man nämlich problemlos von beliebigen anderen Tabellen auf jede Tabelle referenzieren.
Vielleicht interessiert Dich das Thema "Normalisierung"?
Oder sollte ich bei den Chatnachrichten ein Feld Farbe einfügen, in das beim Abschicken der Nachricht die Farbe gespeichert wird und beim ändern der Farbe der Eintrag bei allen Nachrichten geändert wird.
Nein. Auf keinen Fall. Außer natürlich, Du legst Wert auf instabil laufende Systeme und ständig auftretende Race Conditions.
Oder sollte ich beim Auslesen der Chatnachrichten immer eine Abfrage machen welche Farbe der Autor derzeit ausgewählt hat?
Ja. Und zwar über passende JOINs (wie ich bereits weiter oben skizziert habe).
MfG,
EKKi