Datenbanken: Erstellen eines Protokolls von Aktionen, wie wird mit verschiedenen Referenzen umgegangen?

Ich hoffe ihr alle hattet ein frohes neues Jahr.

Meine Frage ist also, wie man am besten ein Protokoll der Aktionen erstellt. Lassen Sie es mich anhand eines Beispiels erklären:

User

Friend (Benutzer ist ein Freund eines anderen Benutzers, viele zu viele Beziehung)

Message (Ein Benutzer kann einen anderen Benutzer benachrichtigen.)

Group (Ein Benutzer kann in verschiedenen Gruppen sein)

Game (Ein Spiel kann mit verschiedenen Spielern gespielt werden, hat ein Datum wie das des Spiels. Dies führt zu zwei Geschichten, games und games_users. Letzteres speichert eine Beziehung zwischen Benutzer und Spiel.)

Nun wollte ich ein Protokoll erstellen, zum Beispiel:

Benutzer A (Link zum Benutzer) hat einen neuen Freund gemacht, Benutzer B (Link zum Benutzer)

Benutzer A (Link zum Benutzer), B (Link zum Benutzer) und C (Link zum Benutzer) haben ein Spiel gespielt (Link zum Spiel)

Benutzer C (Link zum Benutzer) ist einer Gruppe D (Link zur Gruppe) beigetreten

Ich wollte also ein flexibles Protokoll erstellen, in dem beliebig viele Verweise und Verweise auf verschiedene Entitäten (z. B. Benutzer und Spiel) gespeichert werden können.

Ich kenne zwei Möglichkeiten, aber sie haben alle ein oder mehrere Probleme:

Wenn ich eine Aktion aufzeichne, speichere ich direkt den gewünschten reinen Text (d. H. Nur 1 Zeichenfeld, in dem "Benutzer C ist einer Gruppe beigetreten" gespeichert wird). Aber es gibt ein Problem auf diese Weise, dieser Text muss in andere Sprachen übersetzt werden und ich kann nicht für jede Sprache ein Feld haben.

Einen Haupttisch habenlog, wobei jede Zeile eine Protokollaktion und einen Code darstellt, damit ich weiß, welche Aktion dies ist, d. h. ein Benutzer ist einer Gruppe beigetreten, x Benutzer haben ein Spiel gespielt. Ich habe dann eine andere Tabelle für jeden benötigten Fremdschlüsseltyp, also hätte ichlog_user, log_group undlog_game Zum Beispiel,log_user mit einer Feldreferenzierunglog und eine andere Referenzierunguser. Auf diese Weise kann ich mehrere Benutzer für dieselbe Protokollaktion haben. Probleme: ziemlich komplex und könnten zu einem erheblichen Overhead führen, da ich je nach Protokollaktion mehrere Tabellen abfragen müsste. Ist das richtig, wäre es zu CPU-intensiv?

Ich bin offen für neue Ideen und Brainstorming. Was ist der beste Ansatz für diese Art von Problem? Vielen Dank im Voraus, ich hoffe, ich habe es klar erklärt. Wenn Sie Fragen haben, wenden Sie sich bitte.

Bearbeiten: Ich habe beschlossen, ein Kopfgeld zu erheben, da ich mit den Antworten, die ich erhalten habe, nicht wirklich zufrieden bin. Wird bei Bedarf Abklärungen vornehmen. Vielen Dank

Ich möchte etwas, das Facebook / orkut / sozialen Netzwerken sehr ähnlich ist, "Freundaktualisierungen". Dies wird den Benutzern angezeigt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage