root/doc/DB.txt

Revision 1:7546a58a245c, 9.0 KB (checked in by anselm, 7 years ago)

This is the initial commit of the base Project Lancelot software. It does
not yet do anything useful, but the Perl packaging stuff seems to work (#7).

Line 
1PROJEKT LANCELOT -- DATENBANKDESIGN (Stand: 26.2.2005)
2======================================================
3
4Für jede Liste führt Lancelot eine relationale Datenbank mit den
5folgenden Tabellen:
6
7Tabelle »subscribers«
8---------------------
9
10Enthält die Daten über die aktuellen Abonnenten.
11
12Feld        Bedeutung
13-----------------------------------------------------------------------
14id          Laufende Nummer (Primärschlüssel)
15local       Lokalteil der Abonnentenadresse [*]
16domain      Domain der Abonnentenadresse [*]
17realname    Beigefügter Name (falls vorhanden)
18status      Abonnementsstatus [**]
19timestamp   Zeitstempel des Eintritts in den aktuellen »status«
20moderator   1, wenn diese Adresse die eines Moderators ist, sonst 0
21nomail      1, wenn diese Adresse keine Mails bekommen soll, sonst 0
22digest      1, wenn diese Adresse Digests bezieht, sonst 0
23moderated   1, wenn diese Adresse der Moderation unterliegt, sonst 0
24
25[*] Die Idee ist hier, daß man bequem Adreßlisten generieren kann, die
26    nach der Domain sortiert sind (zum vereinfachten SMTP-Versand)
27
28[**] Zustandsübergangsdiagramm für Abonnementsstatus:
29
30                                                              Timeout; löschen
31                                           Übermäßige   BOUNCING------> Ende
32                                               Bounces    ^   |
33      Abo-Wunsch erhalten;                                |   | Lebens-
34        Bestätigungs-                    Korrekte         |   | zeichen
35        aufforderung                   Bestätigung        |   | erhalten
36           schicken                      erhalten         |   v
37Start -----------------> UNCONFIRMED ---o-------------> SUBSCRIBED -> BLACKLIST
38                             |     _____|                   | | ^         |
39     Timeout oder falsche    |    /        Abbestellung     | | `---------'
40       Bestätigung erhalten; |    |   erhalten (bei bestät. | |
41       Vorgang stornieren,   |    |     Abbestellung); BA   | `-------`
42          Adresse löschen    |    |         schicken        v         |
43                             v    |                     UNSUB-UNCONF  |
44                           Ende   |                      |      |     |
45                                  |      Falsche Best.   |      | Korrekte
46                                  |        erhalten;     |      | Bestätigung
47                                  |  Vorgang stornieren  |      | erhalten;
48                                  |                      |      | Adr löschen
49                                  `----------------------'      |      |
50                                                                v      |
51                                                              Ende <---'
52
53
54    UNCONFIRMED: Adresse ist noch unbestätigt
55    SUBSCRIBED:  Adresse ist abonniert (darf Nachrichten einreichen und
56                 bekommt ggf. Nachrichten oder Digests geschickt)
57    BOUNCING:    Adresse ist abonniert (darf Nachrichten einreichen), aber
58                 bekommt nichts geschickt. Kommt eine Nachricht von dieser
59                 Adresse an, wird sie wieder auf SUBSCRIBED gesetzt.
60    UNSUB-UNCONF: Adresse ist abonniert (darf Nachrichten einreichen) und
61                 bekommt ggf. Nachrichten oder Digests geschickt)
62    BLACKLIST:   Adresse ist in der Datenbank, aber darf weder Nachrichten
63                 einreichen, noch bekommt sie etwas geschickt, noch darf
64                 sie ihre Optionen ändern oder die Liste offiziell
65                 abbestellen. Dieser Zustand ist für Adressen, die sich
66                 extrem danebenbenommen haben und mit denen man nichts mehr
67                 zu tun haben will. Er wird ggf. explizit vom Eigentümer
68                 gesetzt.
69
70
71Tabelle »subhistory«
72--------------------
73
74Speichert Protokoll über die Zustandsübergänge von Abonnenten
75
76Feld        Bedeutung
77-----------------------------------------------------------------------
78subid       Schlüssel der betroffenen Adresse
79status      Zustand (s.o.)
80timestamp   Zeitstempel des Eintretens in den betreffenden Zustand
81
82
83Tabelle »confirmations«
84-----------------------
85
86Speichert Daten über ausstehende Konfigurationswünsche (Abonnieren und
87Abbestellen, Parameteränderungen)
88
89Feld        Bedeutung
90-----------------------------------------------------------------------
91subid       Schlüssel der betroffenen Adresse
92timestamp   Zeitpunkt des Versands der Bestätigungsaufforderung
93cookie      In der Bestätigungsaufforderung verschickter Cookie
94option      Bei korrekter Bestätigung zu verändernde Einstellung [*]
95value       Neuer Wert der benannten Einstellung
96
97[*] Mögliche Werte umfassen:
98    status: Abonnementsstatus
99    nomail: NOMAIL-Status
100    digest: Digest-Status
101
102Bei einer eingehenden Bestätigungsnachricht wird geprüft, ob deren
103Absenderadresse und Cookie mit einem Eintrag in dieser Tabelle
104korrespondieren. Ist das der Fall, wird die in »option« und »value«
105beschriebene Konfigurationsänderung umgesetzt. Ansonsten wird eine
106Fehlermeldung zurückgeschickt (an die Adresse in der
107Abonnentendatenbank, nicht die Absenderadresse der Mail!) und der Vorgang
108storniert.
109
110Vorgänge mit länger als eine bestimmte Zeit ausstehenden
111Bestätigungsnachrichten werden storniert.
112
113
114Tabelle »modpending«
115--------------------
116
117Speichert Daten über zu moderierende Nachrichten
118
119Feld        Bedeutung
120-----------------------------------------------------------------------
121message     Nummer der betroffenen Nachricht
122timestamp   Zeitstempel des Versands an die Moderatoren
123cookie      Cookie, der an die Moderatoren verschickt wurde
124approve     Anzahl der Moderatoren, die für das Ausliefern waren
125reject      Anzahl der Moderatoren, die für das Verwerfen waren
126comment     Moderatoren-Kommentare
127
128Beim Eingang einer Antwort von einem Moderator wird geprüft, ob
129Nachrichtennummer und Cookie zu einem Eintrag in dieser Tabelle
130passen. Wenn ja, wird je nach der Art der Antwort der »approve«- oder
131der »reject«-Zähler erhöht. Ist anschließend »approve« größer oder
132gleich dem Listenparameter »mod.aquorum«, wird die Nachricht
133zugelassen; ist »reject« größer oder gleich »mod.rquorum«, wird die
134Nachricht abgewiesen.
135
136Zu moderierende Nachrichten, bei denen über eine bestimmte Zeit hinweg
137(»mod.timeout«) kein Quorum erreicht wurde, werden kommentarlos
138abgewiesen.
139
140
141Tabelle »bounces«
142-----------------
143
144Speichert Daten über mißglückte Zustellversuche.
145
146Feld        Bedeutung
147-----------------------------------------------------------------------
148subid       Schlüssel des betroffenen Abonnenten
149btype       Bounce-Typ: 1=Nachricht, 2=»Probe«
150message     Nummer der betroffenen Nachricht
151timestamp   Zeitstempel des Bounce-Eingangs
152
153Idee: Bouncet eine Nachricht, wird das hier vermerkt. Bei mehr als n
154  Bounces pro Zeitabschnitt (Woche?) wird eine »Probe«-Nachricht
155  geschickt; bouncet diese, wird die Adresse deaktiviert. Salzen und
156  pfeffern nach Geschmack.
157
158
159Tabelle »config«
160----------------
161
162Speichert Konfigurationsdaten für die Liste
163
164Feld        Bedeutung
165-----------------------------------------------------------------------
166key         Name eines Konfigurationsparameters
167value       Wert eines Konfigurationsparameters
168
169Die folgenden Parameter könnte es z. B. geben:
170
171Name                Bedeutung
172-----------------------------------------------------------------------
173general.listname    Name der Liste
174
175subscribe.confirm   1, wenn Abonnementswünsche bestätigt werden sollen
176subscribe.type      »open«, wenn Benutzer sich selbst abonnieren können
177                    »mod«, wenn Abowünsche moderiert werden müssen
178                    »closed«, wenn nur Eigentümer/Moderator Adressen
179                      hinzufügen/streichen können
180subscribe.digestdefault       Standardwerte für die Optionen digest,
181subscribe.nomaildefault       nomail und moderated, für neue Abonnenten
182subscribe.moderateddefault
183subscribe.digestchange        Ob Benutzer diese Optionen selber ändern
184subscribe.nomailchange        dürfen
185
186mail.subjecttag     Text, der ins »Subject« eingebaut wird
187mail.replyto        Wert eines festen »Reply-To«-Headers
188mail.forcereplyto   1, wenn »mail.replyto« zwangsweise eingesetzt werden soll
189
190digests.enable      1, wenn Digests erlaubt sind, 0 sonst
191digests.maxperiod   Maximaler Zeitraum (in Tagen) zwischen Digests
192digests.maxsize     Maximale Größe (in Kibibytes) pro Digest
193
194mod.enable          1, wenn alle Nachrichten moderiert werden sollen
195mod.aquorum         Anzahl der Mod., die eine Nachricht akzeptieren müssen
196mod.rquorum         Anzahl der Mod., die eine Nachricht verwerfen müssen
197mod.timeout         Zeitraum (in Tagen), bevor eine Nachricht verworfen
198                    wird, für die kein Quorum erreicht wurde
199
200
201Tabelle »parameters«
202--------------------
203
204Speichert Laufzeitinformationen der Liste
205
206Feld        Bedeutung
207-----------------------------------------------------------------------
208key         Name eines Laufzeitparameters
209value       Wert eines Laufzeitparameters
210
211Die folgenden Parameter könnte es z. B. geben:
212
213Name                Bedeutung
214-----------------------------------------------------------------------
215dbversion           Versionsnummer des Datenbankschemas
216messagenumber       Nummer der zuletzt verschickten Nachricht
217lastdigestmsg       Nummer, bei der der letzte Digest aufgehört hat
218lastdigesttime      Zeitstempel des Versands des letzten Digest
Note: See TracBrowser for help on using the browser.