kostenloser Webspace werbefrei: lima-city


Internes Nachrichtensystem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    dunkeltuten

    Kostenloser Webspace von dunkeltuten

    dunkeltuten hat kostenlosen Webspace.

    Hallo,

    ich schreibe gerade ein internes Nachrichtensystem :smokin:

    Was ist da "Best Practise"

    Variante A)
    Alle Mails (abgeschickte und empfangene Mails) in einer grossen MySQL-Tabelle verwalten.

    Variante B)
    zwei Tabellen verwenden:
    1) für gesendete Mails (Postausgang)
    2) für empfangene Mail (Posteingang)

    Wie machen andere Systeme das, die auch ein internes Mailsystem verwenden?



    Beitrag zuletzt geändert: 27.10.2014 15:02:31 von dunkeltuten
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. dunkeltuten schrieb:
    Wie machen andere Systeme das, die auch ein internes Mailsystem verwenden?

    Alle, die ich kenne (inklusive mein eigenes CMS), nutzen Variante A.

    Vielleicht, noch als Anregung, der SQL-Befehl, der meine Tabelle erzeugt:
    CREATE TABLE IF NOT EXISTS `$PREFIX_nachrichten` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `userFrom` int(11) NOT NULL,
    `userTo` int(11) NOT NULL,
    `subject` varchar(220) NOT NULL,
    `body` text NOT NULL,
    `sendtime` datetime NOT NULL,
    `readen` tinyint(4) NOT NULL,
    `inbox_delete` tinyint(4) NOT NULL,
    `outbox_delete` tinyint(4) NOT NULL,
    `lang` varchar(220) NOT NULL,
    PRIMARY KEY (`ID`)
    );
  4. Ich denke, dass alle Systeme Variante A verwenden und zwar ziemlich genauso, wie webfreclan es beschrieben hat.

    Variante B würde doch auch keinen Sinn ergeben, da bei einem internen Mailsystem ja jede abgeschickte Nachricht, eine empfangene Nachricht eines anderen Users ist., das hieße damit doch auch, dass jede Mail doppelt im System ist. Dadurch kann es auf keinen Fall "Best Practice" sein.

    Oder habe ich falsch verstanden was du bei Variante B meinst?
  5. mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    Da es sich um ein internes System handelt, sind ja alle abgeschickten=alle empfangenen. Also Nachrichten in einer Tabelle.

    Es gibt allerdings noch ein kleines Problem, wenn es in deinem Nachrichtensystem möglich sein soll, eine Nachricht an mehrere Empfänger zu schicken. Dann benötigt man eine 2.Tabelle, in der die Empfänger (ihre ID) abgespeichert sind. Dort lassen sich dann auch weitere Informationen ablegen, z.B. ob Empfänger-ID 95 die Nachricht-ID 123 schon gelesen hat.
  6. Autor dieses Themas

    dunkeltuten

    Kostenloser Webspace von dunkeltuten

    dunkeltuten hat kostenlosen Webspace.

    grashuepfer schrieb:
    Variante B würde doch auch keinen Sinn ergeben, da bei einem internen Mailsystem ja jede abgeschickte Nachricht, eine empfangene Nachricht eines anderen Users ist., das hieße damit doch auch, dass jede Mail doppelt im System ist.


    Die Mail muss doppelt in die Tabelle!!! Begründung:
    wenn die Nachricht nur einmal vorhanden wäre, dann kann sie auch nur 1x gelöscht werden.
    was aber, wenn die Mail vom Empfänger gelöscht wird?
    dann wäre die Mail ja auch in den "gesendeten Mails" des Absender gelöscht
  7. mein-wunschname

    mein-wunschname hat kostenlosen Webspace.

    dunkeltuten schrieb:
    grashuepfer schrieb:
    Variante B würde doch auch keinen Sinn ergeben, da bei einem internen Mailsystem ja jede abgeschickte Nachricht, eine empfangene Nachricht eines anderen Users ist., das hieße damit doch auch, dass jede Mail doppelt im System ist.


    Die Mail muss doppelt in die Tabelle!!! Begründung:
    wenn die Nachricht nur einmal vorhanden wäre, dann kann sie auch nur 1x gelöscht werden.
    was aber, wenn die Mail vom Empfänger gelöscht wird?
    dann wäre die Mail ja auch in den "gesendeten Mails" des Absender gelöscht


    Schau dir einfach mal den Tabellenaufbau bei phpBB an. Dort kannst du gut erkennen, wie man dieses Problem löst, nämlich durch die von mir schon vorher beschriebene 2. Tabelle, in der Nachrichten-ID, Sender-ID und Empfänger-ID enthalten sind.
  8. airfield-manager

    Kostenloser Webspace von airfield-manager

    airfield-manager hat kostenlosen Webspace.

    dunkeltuten schrieb:

    Die Mail muss doppelt in die Tabelle!!! Begründung:
    wenn die Nachricht nur einmal vorhanden wäre, dann kann sie auch nur 1x gelöscht werden.
    was aber, wenn die Mail vom Empfänger gelöscht wird?
    dann wäre die Mail ja auch in den "gesendeten Mails" des Absender gelöscht


    Redundante Daten in einer Datenbank ist nie eine gute Lösung.
    Das System wird langsam und Fehleranfällig.

    Stattdessen gibt es in deinem Beispiel die Möglichkeit mit einer zweiten Tabelle zu arbeiten wie zuvor beschrieben.
    Oder du kannst eine zusätzliche Spalte pro Nachricht in der Tabelle anlegen, in der du abfragst ob diese vom Empfänger gelesen/gelöscht wurde oder ob der Absender diese gelöscht hat.
    Anhand dieses Status wird die Mail dem jeweiligen benutzer im Postfach nicht mehr angezeigt oder eben als gelesen markiert. ;)
  9. dunkeltuten schrieb:
    grashuepfer schrieb:
    Variante B würde doch auch keinen Sinn ergeben, da bei einem internen Mailsystem ja jede abgeschickte Nachricht, eine empfangene Nachricht eines anderen Users ist., das hieße damit doch auch, dass jede Mail doppelt im System ist.


    Die Mail muss doppelt in die Tabelle!!! Begründung:
    wenn die Nachricht nur einmal vorhanden wäre, dann kann sie auch nur 1x gelöscht werden.
    was aber, wenn die Mail vom Empfänger gelöscht wird?
    dann wäre die Mail ja auch in den "gesendeten Mails" des Absender gelöscht



    Wie wäre es denn mit boolean-Variablen in der Datenbank für:

    - gesendet (beim Absender als Entwurf angezeigt; beim Empfänger gar nicht)
    - gelesen (als (un)gelesen anzeigen beim Empfänger; evtl. Bestätigung an den Absender, dass die Nachricht gelesen wurde)
    - gelöscht aus dem Posteingang (dass die Nachricht nicht mehr im Posteingang des Empfängers angezeigt wird)
    - gelöscht aus dem Postausgang (dass die Nachricht nicht mehr im Postausgang des Absenders angezeigt wird)
  10. Autor dieses Themas

    dunkeltuten

    Kostenloser Webspace von dunkeltuten

    dunkeltuten hat kostenlosen Webspace.

    @grashuepfer:
    Das mit den boolean-Variablen finde ich eine klasse Idee :thumb:
    Werde ich entsprechend so umsetzen :smokin:

    @mein-wunschname:
    Wozu zwei Tabellen?
    Das habe ich einfach mit "comma separted values" umgesetzt und klappt schon einwandfrei :wink:
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!