Tom: Frage zum Design einer mySQL-Tabelle...

Beitrag lesen

Hello,

Die Frage ist: Wie speichere ist das am besten und efizientesten in einer Datenbank? Eine große 3-spaltige Tabelle, in die ich alle Nachrichten aller Benutzer reinschreibe (empfaengername, absender, text)? Die Nachrichten eines bestimmten Benutzers müsste ich dann bei jedem Zugriff über "SELECT text, absender WHERE empfaenger=einuser" raussuchen. Ist das halbwegs effizient oder gibt es eine bessere Möglichkeit?

Man sollte den Namen des Empfängers vom OWNER des Datensatzes trennen. Gibt es denn vielleicht auch eine Dialog-Funktion, mit der festestellt wird, welche Kommunikation zwei Teilnehmer untereinander betrieben haben?

ID_msg      bigint unsigned primary  ID der Message
  ID_OWNER    bigint unsigned
  ID_SENDER   bigint unsigned
  MSG_DATE    datetime
  MSG_SUBJ    char(40)
  MSG_TEXT    text                     Text der Meldung
  MSG_READ    tiny int                 Die Meldung ist schon geöffnet worden
  MSG_REPLY   tiny int                 Die Meldung wurde schon bearbeitet
  MSG_DEL     tiny int                 Delete-Flag um nicht bei jeder Löschung tatsächlich
                                       löschen zu müssen. Da stirbt die Performance
  MSG_OP_FLAG tiny int                 Merker für den Operator, wenn Meldungen z.B. ausgeblendet
                                       werden müssen aber nicht gelöscht werden dürfen

Das gibt geschäftze ca. 1.300 Bytes pro Datensatz
  Das macht bei 100 Meldungen pro User, und 20.000 Usern ca. 2.6 GB

Damit ist MySQL 3.x für Deinen Anwendungsfall ungeeignet. Die Spezifikation von
  4.x kenn ich noch nicht auswendig.

Da wirst Du wohl entweder ein intelligenteres Flat-File Komzept bauen müssen, oder gleich auf z.B. Informix gehen müssen. Denn bei einem DBMS gleich in die Begrenzug zu fahen, ist ja nicht sehr sinnvoll.

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau