系统和用户消息结构

时间:2019-06-03 20:00:59

标签: php mysql

我正在创建一个应用程序,其中有一个用户表和一个管理表。在此应用程序中,我要构建的功能之一是消息传递,其中用户会收到某种消息,然后会通知用户。

我正在为数据库体系结构而苦苦挣扎,请注意这是否是最好的方法。在我的表格消息中,我还有另一个表格,messages_translationsuser_messages

我的目标是使其具有可扩展性,并且成为最佳实践。

起初,我有这样的表格消息:

messages:
- id;
- user_id (to);
- admin_id (from);
- title;
- body;
- is_read;

但是我不记得两件事:首先,我忘了用多语言制作,而且我还需要一种方法来说明此消息是从管理员发给用户还是从系统发来的。 例如,在某些情况下,系统会通知您消息(例如:是否接受了候选人,是否有新的职位空缺或某种程度上的批准),基本上来自系统的与用户有关的事件,以及其他情况。时间是从管理员发给用户或用户组的消息,其中包含更具体的消息。

我创建users_messages的原因之一是为了防止内容重复,因为在某些情况下,管理员需要根据性别或其他详细信息向一组用户发送相同的消息。 / p>

这是我最后做的方法:

messages:
- id;
- type (SYSTEM, ADMIN)

messages_translated:
- id;
- message_id;
- locale (en, es...);
- title;
- body;

user_messages:
- id;
- message_id;
- user_id;
- admin_id (nullable);
- is_read;

基本上我做了什么,这种结构有意义吗?

1 个答案:

答案 0 :(得分:0)

我认为您可以减少一张桌子:

table "message":
- id;
- creation_date_time;
- language (ENG, SPA... ISO 639-2);
- title;
- body;

table "message_sent":
- id;
- message_id;
- sent_date_time;
- receiver_user_id;
- sender_admin_id (if null then it is a system message);
- is_read;

因此,由于内容对于许多接收者而言都是相同的,应该进行翻译,因此我将内容放置在单独的表中。

另一个表用于已发送的消息。我不使用TYPE,因为系统消息可以根本没有发件人,也可以没有发件人ID -1。

在大多数情况下,最好使用ISO 639-2作为语言。其他代码也可以,但是使用最多的是这样,因此,如果您开始与其他库进行交互,则可能是您会遇到的代码。