Zwei Fragen zu Chat
-
also ich versuchs mal, es gibt folgende 2 situationen...
mögl. a
id_chat_room | id_user ---------------------- 1 | 1 1 | 2 1 | 3 1 | 4 2 | 1 2 | 2 2 | 3 2 | 4
mögl. b
tbl id_chat_room_1 id_user ---------------------- 1 2 3 4 tbl id_chat_room_2 id_user ---------------------- 1 2 3 4
wo sind jetzt die redundanzen bzw. normalisierung
-
Klär mich doch mal auf, warum es in Deinen Augen unlogisch ist
-
LordJaxom schrieb:
Klär mich doch mal auf, warum es in Deinen Augen unlogisch ist
logisch wirds, wenn man wissen will, in welchen räumen user 1 ist, was vllt. nicht gefordert ist...
-
KingKarl schrieb:
logisch wirds, wenn man wissen will, in welchen räumen user 1 ist, was vllt. nicht gefordert ist...
select raum_id from chat_tabelle where user=1 ???
Wozu braucht man da mehrere Tabellen?
-
LordJaxom schrieb:
Wozu braucht man da mehrere Tabellen?
Er geht wahrscheinlich von Millionen von Chattern aus, die gleichtzeitig da sind.
-
inflames2k schrieb:
LordJaxom schrieb:
Wozu braucht man da mehrere Tabellen?
Er geht wahrscheinlich von Millionen von Chattern aus, die gleichtzeitig da sind.
wieso? macht man dann ein select * from user_1_chat_rooms;
@edit: dann geht sogar ein performantes limit 10,10... was bei der tabellen lösung ohne 3. spalte echt schwer wird... aber hey, wer ist in so vielen räumen
-
Du würdest doch auch nicht für jeden Chatraum eine neue Klasse entwickeln. Schließlich hat die Klasse "Chatroom" schon alle Felder, Properties etc. die benötigt werden und nach dem Prinzip sollte auch bei der Datenbankarchitektur vorgegangen werden.
-
inflames2k schrieb:
Du würdest doch auch nicht für jeden Chatraum eine neue Klasse entwickeln.
nö, aber ich würde mehrere instanzen erstellen!
@edit: falls ich es noch nicht gesagt hab, datenbanken sind eh scheiße... die brauchen immer eine extrawurst :p
-
KingKarl schrieb:
@edit: falls ich es noch nicht gesagt hab, datenbanken sind eh scheiße... die brauchen immer eine extrawurst :p
Das begründe mir mal...
Zu den Tabellen, folgende würde ich konzipieren:
tbl_Users
----------
- UserID
- UserName
...tbl_ChatRooms
-------------
- RoomID
- RoomName
...tbl_??
-------
- UserID (Fremdschlüssel)
- RoomID (Fremdschlüssel)
...Somit komme ich mittels Selects an alles was ich brauche.
Beispiel:
Alle Nutzer in Raum 1SELECT a.UserID, a.UserName FROM tbl_?? c INNER JOIN tbl_Users a ON c.UserID = a.UserID INNER JOIN tbl_ChatRooms b ON c.RoomID = b.RoomID WHERE RoomName = 'Raum 1';
Alle Räume in denen Nutzer 1 ist:
SELECT a.RoomID, a.RoomName FROM tbl_?? c INNER JOIN tbl_ChatRooms a ON a.RoomID = c.RoomID INNER JOIN tbl_Users b ON b.UserID = c.UserID WHERE b.UserName = 'Nutzer 1';
-
mir reichts, ich muß jetzt autowaschen... dafür bekomm ich zumindest was
-
Danke für eure Antworten
Ich glaube ich werde die Lösung zur ersten Frage von inflames2k nehmen, scheint mir sehr praktisch.Zu meiner zweiten Frage, dass da Ajax als antwort kommt, hatte ich mir schon gedacht. Das Problem ist aber, dass soweit ich weiß, man mit Ajax nur Teile der Seite neuladen kann. Wie aber schaffe ich es, dass mit einem Klick auf einen Link oder auf F5 alles bis auf den Chat geladen wird, der Chat aber immernoch im Vordergrund bleibt?
-
Du kannst selbst definieren, was neu geladen wird. "Neu geladen" ist hier jedoch sehr schwammig, grundlegend werden eigentlich über AJAX die dahinter liegenden Daten neu geladen, der Seitenaufbau nicht.
-
Zu 2
Schau Dir das hier mal an, musst Du natürlich anpassen, aber läuft super:
https://github.com/balupton/History.js/Hier gibts ne Demo, die Du Dir für nahezu jede beliebige Seite anschauen kannst..
https://gist.github.com/919358