微信朋友圈表结构设计
『壹』 微信朋友圈数据库模式如何设计的
你好
因为规则很简单:任何信息只有发布者本人的好友可见(准确的说是有朋友圈权限的账号可见)。谁发布 ,谁的好友可见 ,无论信息是 话题主体或话题下的评论。
所以,解决方案也应该比较简单。
比如:背后的表可以是 :
表1:以好友关系为管理对象的表,key为用户账号:userid,好友01id,。。。。
表2:以发布内容为管理对象的表,key为用户账号:userid,发布内容编号,发布时间,具体内容数.
『贰』 微信朋友圈数据库模式如何设计的
其实微信朋友圈的数据库设计模式无非就是符合了三种设置模式,其中最常用的是第三种。
第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。例如,对于图3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。简而言之,第一范式就是无重复的列。
第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
『叁』 如何优雅的进行表结构设计
数据库表的命名
使用名词作为表名
仔细想想便可发现,数据库表中存在的所有数据都是现实世界各种操作的结果,它们有的是中间过程结果,有的是最终数据结果。不论怎样,它们是一份一份没有任何动作的,静态的记录。而表本身就是存储这些记录的容器,从这样的层面理解,表名应该采用名词的形式是完全符合逻辑的。
比如我们要设计一个存储用户邀请的表,invitation 就比 invite 更加的优雅。
相关表采用统一前缀
我们知道,大型系统的设计往往按模块或者子系统进行划分,一个一个模块的处理问题,保证模块间的低耦合,模块内的高内聚。数据库表设计也一样,我们可以对相关联的表采用相同的前缀,使开发人员一眼看上去就知道哪几个表是相关的。
比如对于用户基本信息表、用户的详细信息表和用户的微信绑定表如下的命名更可取:
user
user_profile
user_wecha
字段的命名
本节先介绍几个比较通用的原则,使得字段的含义更容易理解,描述性更强,之后进行简单的总结分类,以便让我们明白这些原则背后的逻辑。
使用动词被动形式+描述性后缀
通过前面我们知道,数据库表中的所有记录都是静态的结果性数据,它是由一定的用户操作产生的。那么它是如何产生的?经过什么样的操作产生的呢?
在解答之前先看一个例子,下面是一个简单的 article 表结构:
id: integer
title: varchar
content: text
user_id: integer
create_time: timestamp
这样的设计本身是没有问题的,目前用的也很多。这个设计主要的问题是没有体现出 user_id 与这篇文章的关系,需要经过一定的猜测和思考才能得出。create_time 虽然还比较直观,但没有体现出这篇文章实在过去的某个时间创建的。
然后我们在来看修改后的设计:
id: integer
title: varchar
content: text
created_by: integer
created_at: timestamp
通过把 user_id 替换为 created_by、create_time 替换为 created_at,使得我们更容易理解对应的文章是被指定的人在指定的时间创建出来的,而不需要我们的多方猜测或者查阅文档,使得整个表结构的描述性更强。
时间区分当前时间和未来时间
英语中表时间的时候, at 一般跟一个时间点,而 in 有表示在未来的某个时间之内的意思。结合起来,笔者倾向于用 at 表示过去或者现在的时间,而用 in 表示未来的时间。比如日历中的 event 有开始时间和结束时间的概念,我觉得如下的命名是比较合理的:
starts_at 事件的开始时间,相对 ends_in 它属于当前时间,采用 _at 后缀
ends_in 事件的结束时间,相对 ends_in 它属于未来时间,从用 _in 后缀
其他我们比较常用的比如 created_at、updated_at、expires_in 都属于这种类型。
使用第三人称单数
当我们采用动词+介词的时候我更倾向与使用第三人称单数,因为字段描述的这个实体是单数的,通过使用第三人称单数,我们可以自然语言的方式表达出需要的意思。比如以 event 为例,翻译成英语是这样的:
The event starts at 2016-05-05 12:00:00
完全符合英语的语法,也表达了想要表达的意思。
区分单数与复数
单数与复数主要是对字段内容的描述,比如通知(notification)有接收人这个字段,如果我们需要通知能够发送给多个人,那么 receivers 这样的字段名称明显好于 receiver,因为 receivers 体现了通知可以发送给多个人这一个事实。
前面从四个原则出发介绍了如何让字段更具有描述性,简单总结下来我觉得从语义上来说,字段可以分为两种类型:描述性字段和动作性字段。
描述性字段是对对应数据库记录(或者说实体)的补充说明,比如以人作为实体,那么人的身高、体重和血压就属于这类描述性字段。
描述性字段如果是动词+介词的形式,动词需要采用第三人称单数的形式,比如 starts_at。然后根据字段的内容,如果内容有多个元素或实体,我们需要使用复数,否则使用单数形式。
动作性字段不仅能对所属实体进行补充说明,还能对这个实体的所涉及操作有所描述。比如我们有 article 这个实体, article 的 created_by 和 created_at 就属于动作性字段,因为它不仅表达了 article 的创建者和创建时间这层信息,它还表达了这个 article 是指定的人被创建的,而不是凭空生成的。
『肆』 做一个功能的版本设计,怎么设计表结构最合理
你好
很高兴为你解答
答案是:你可以参考一个开源的版本控制系统,看看他们是怎么做的。
满意请采纳,谢谢!
『伍』 微信朋友圈的基本数据结构设计是怎么样的
因为规则很简单:任何信息只有发布者本人的好友可见(准确的说是有朋友圈权限的账号可见)。谁发布 ,谁的好友可见 ,无论信息是 话题主体或话题下的评论。
所以,解决方案也应该比较简单。
比如:背后的表可以是 :
表1:以好友关系为管理对象的表,key为用户账号:userid,好友01id,。。。。。。。。
表2:以发布内容为管理对象的表,key为用户账号:userid,发布内容编号,发布时间,具体内容数
『陆』 微信朋友圈里的文字这样显示方式是怎样设计的啊
这是微信在朋友圈里发表文字和图片的一个功能,是这样使用的,打开朋友圈长按上面的相机。他就会让你发表文章和图片,你选择图片,一次最多只能选择九张,你把它们编辑成九宫格的模式就可以了。
『柒』 微信朋友圈数据库模式如何设计的
1、给所有通讯录好友做好分组管理:做好备注(怎么加的你,与你关系的强弱),确定哪些客户是已成交客户(做好成交时间及成交金额记录备注),哪些是待跟进的未成交客户。
2、对自己的头像、背景墙、个性签名、朋友圈内容发布设置,尤其是朋友圈内容发布时,必须要考虑发布内容的时间与好友的生活习惯是否匹配。
3、设置互动及二次转发机制:通过将设定好的发布内容邀请好友转发朋友圈、发微信群或者群发好友,获得对应礼品、赠品、代金券等,尤其建议可以获得跟用户息息相关的可以使用的产品实物,通过快递的方式获取用户的联系方式姓名等,建立数据库。
4、回到第一步,对新加的好友做好分组管理,并做好备注。如果是推广微信公众平台也可以引流到客服个人微信号上。
『捌』 微信列表sql语句设计
select top 1 c_id,主键;c_userId发言人Id;c_target_Id,发言对象ID;C_content发言内容;c_Date发言时间 where c_userId='A' or c_target_Id='a' order by date存储发言时间 desc
『玖』 微信朋友圈的基本数据结构设计是怎么样的
逻辑结构是图,实际上用的是关系数据库的多对多联系来管理的