很多朋友对于fk自动采集影视网站源码分享和自动采集影视cms不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
这是一系列关于构建“即时消息”应用的新帖子。
–NicolásParada(作者)
这是一系列关于构建“即时消息”应用的新帖子。你应该对这类应用并不陌生。有了它们的帮助,我们才可以与朋友畅聊无忌。FacebookMessenger、WhatsApp和Skype就是其中的几个例子。正如你所看到的那样,这些应用允许我们发送图片、传输视频、录制音频、以及和一大帮子人聊天等等。当然,我们的教程应用将会尽量保持简单,只在两个用户之间发送文本消息。
我们将会用CockroachDB作为SQL数据库,用Go作为后端语言,并且用JavaScript来制作web应用。
这是第一篇帖子,我们将会讲述数据库的设计。
CREATETABLEusers(\nidSERIALNOTNULLPRIMARYKEY,\nusernameSTRINGNOTNULLUNIQUE,\navatar_urlSTRING,\ngithub_idINTNOTNULLUNIQUE\n);\n
显然,这个应用需要一些用户。我们这里采用社交登录的形式。由于我选用了GitHub,所以这里需要保存一个对GitHub用户ID的引用。
CREATETABLEconversations(\nidSERIALNOTNULLPRIMARYKEY,\nlast_message_idINT,\nINDEX(last_message_idDESC)\n);\n
每个对话都会引用最近一条消息。每当我们输入一条新消息时,我们都会更新这个字段。我会在后面添加外键约束。
…你可能会想,我们可以先对对话进行分组,然后再通过这样的方式获取最近一条消息。但这样做会使查询变得更加复杂。
CREATETABLEparticipants(\nuser_idINTNOTNULLREFERENCESusersONDELETECASCADE,\nconversation_idINTNOTNULLREFERENCESconversationsONDELETECASCADE,\nmessages_read_atTIMESTAMPTZNOTNULLDEFAULTnow(),\nPRIMARYKEY(user_id,conversation_id)\n);\n
尽管之前我提到过对话只会在两个用户之间进行,但我们还是采用了允许向对话中添加多个参与者的设计。因此,在对话和用户之间有一个参与者表。
为了知道用户是否有未读消息,我们在消息表中添加了“读取时间”(messages_read_at)字段。每当用户在对话中读取消息时,我们都会更新它的值,这样一来,我们就可以将它与对话中最后一条消息的“创建时间”(created_at)字段进行比较。
CREATETABLEmessages(\nidSERIALNOTNULLPRIMARYKEY,\ncontentSTRINGNOTNULL,\nuser_idINTNOTNULLREFERENCESusersONDELETECASCADE,\nconversation_idINTNOTNULLREFERENCESconversationsONDELETECASCADE,\ncreated_atTIMESTAMPTZNOTNULLDEFAULTnow(),\nINDEX(created_atDESC)\n);\n
尽管我们将消息表放在最后,但它在应用中相当重要。我们用它来保存对创建它的用户以及它所出现的对话的引用。而且还可以根据“创建时间”(created_at)来创建索引以完成对消息的排序。
ALTERTABLEconversations\nADDCONSTRAINTfk_last_message_id_ref_messages\nFOREIGNKEY(last_message_id)REFERENCESmessagesONDELETESETNULL;\n
我在前面已经提到过这个外键约束了,不是吗:D
有这四张表就足够了。你也可以将这些查询保存到一个文件中,并将其通过管道传送到CockroachCLI。
首先,我们需要启动一个新节点:
cockroachstart–insecure–host127.0.0.1\n
然后创建数据库和这些表:
cockroachsql–insecure-e”CREATEDATABASEmessenger”\ncatschema.sql|cockroachsql–insecure-dmessenger\n
这篇帖子就到这里。在接下来的部分中,我们将会介绍「登录」,敬请期待。
源代码
via:https://nicolasparada.netlify.com/posts/go-messenger-schema/
作者:NicolásParada选题:lujun9972译者:PsiACE校对:wxy
本文由LCTT原创编译,Linux中国荣誉推出
点击“了解更多”可访问文内链接
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!
