数据库案例

article/2025/10/8 15:21:12

目录

微信朋友圈设计

用户及用户关系

发朋友圈

CDN

发布表

相册表

时间线

刷朋友圈

删除、拉黑、标签、不让他看、三天可见该怎么办

谁可以看

标签

第二步的权限控制

评论和赞


微信朋友圈设计

用户及用户关系

肯定有用户表作为基础

用户关系表,用户id1,用户id2,关系

用户关系分组表,用户id1,用户id2,对应分组

发朋友圈

CDN

当我们把精心修好的图,朋友圈点击发送。是不是有一种秒发零延迟的感觉?

那是因为,我们在发朋友圈时,第一步动作是把你发布的图片传到腾讯就近的CDN节点,这时是不经过微信后台服务器的,所以会很快很快。

(CDN这里就不展开了,可以想象下淘宝的菜鸟仓配网络一样,先把货发到仓配点,然后再配送给你。)

发布表

当图片成功传到CDN后,这时微信客户端才会通知朋友圈CDN,说这里有个人发了个自拍耶。

你发朋友圈时,很可能会屏蔽掉你EX或领导老板之类的对吧。

所以呢,微信朋友圈的后台会把你发的图片、这个图片的URL地址、然后谁能看到这图片(很关键)等等信息写到发布表里。

发布id,发布人id,发布人名字,朋友圈内容,朋友圈图片url,权限信息

相册表

当发布表写完后,会把你这自拍索引到你的相册表里,相册表实际上很小,因为它就存了个索引指针而已。

也就是说,当你打开自己的相册列表看到你过去发的成百上千的照片时,都是根据索引去发布表里取的数据。

时间线

当相册表写好了,就会到一个很关键的步骤了,会触发一个批处理动作。

就是会有个跑腿的,跑过去通知你所有的通讯录好友,说你发了个自拍,然后就会把你发的这个自拍插入到你好友的时间线里。

当你好友刷新时,就会看到你的自拍了!Oh Yeah!

当然这前提是,你的好友没有删除你、拉黑你、屏蔽你、不看你。扎心,我们后面会讲这些过滤的权限问题是怎么处理的。

看的用户id,发布用户id,发布时间线,发布内容id,权限信息

刷朋友圈

好了。假设小王是你的微信好友,工作了五分钟累的不行了,休息休息刷下朋友圈。

当小王点开朋友圈时,会拉他自己的时间线,这时他的时间线会得知有个你的新发布,小王的微信客户端会根据你的发布的元数据去CDN找这个图片的URL,拉到本地,然后小王就能看到你发的自拍了。

删除、拉黑、标签、不让他看、三天可见该怎么办

谁可以看

当我们发朋友圈的时候,会有个谁可以看的选项,默认是公开,也就是你所有的好友(非删除、黑名单状态)都会看到。

除此,还有部分可见和不给谁看的选项,这里就是第一步的权限控制。

但这里控制的是,你发的这个照片,要加到哪些好友的时间线里;也就是说,假设你选择了不给“领导”标签下的人看,那领导标签下的所有人的时间线都不会加上你的这条新朋友圈。

标签

标签实际上是帮助你更方便选择可见好友范围的一个东西,只有这一个作用。

举个例子:比如说你发了自拍,选择“男神”标签发了出去,此时“男神”标签下有吴彦祖和古天乐两个人,那么吴彦祖和古天乐都能刷到你的自拍。

这时呢,你又把刘德华加到“男神”标签下,刘德华是不会刷到你发的这张自拍的!

同理,你渐渐厌倦了古天乐,把古天乐从“男神”标签里移了出去,古天乐依然可以看到你发的这个自拍哦。

明白了吧,你通过标签选择的可见范围,都是具体到标签下的人的。在你发布的那一瞬间,发布加到了谁的时间线里,就都定下来了。所以无论后面怎么调整标签下的人,都不会影响这条已经发出去的自拍了。

那你说,我就是不想让古天乐看我的这张自拍怎么办?好办,你可以选择删除他、拉黑他、不让他看、自拍设置成仅自己可见。

第二步的权限控制

当小王刷朋友圈时,上面提到会更新他的时间线。

这个时候,小王的客户端还会做一个事情:就是查一遍权限。

也就是说,查一下时间线上的发布,有没有是属于不给小王看的。包括:删除、拉黑、不给他看、三天可见,这些都是可以随时变更设置的,因此小王每一次刷新朋友圈,时间线都会被筛选一下。

那就有宝宝说,会不会太麻烦了呀,每次都要查吗?

实际上不太麻烦。因为首先在你发布时,就确定了要加到哪些好友的时间线里,因此小王在刷朋友圈时,不用去每个好友的相册里去捞,这相册还有可能存在几百个不同的服务器里。而只需要读自己的时间线这一个动作就行了,这样的话效率就高上天了。

而删除、拉黑、不给他看、三天可见这些权限的设置,并不是说大家时时刻刻每天在改的东西,可能好久才改一次。

因此小王的微信客户端一般会把这些权限数据缓存下来,不需要每次都去拉这个数据,只有变动的时候才去变更一下。所以,怎么说呢,问题不大。

评论和赞

理解了上面讲的整个发布表、相册表、时间线这些东西后,评论和赞就相对好理解了。

微信后台会专门有张表存储评论和赞这些数据,假设三三是你和小王的共同好友,他刷朋友圈时,看到了你的这张自拍。那么会同时去评论表里拉这条发布的小王相关的评论和赞,放到这条朋友圈下面。

如果不是你和小王的共同好友,那就看不到这评论和赞。

评论id,评论用户id,发布id,发布用户id,评论信息,评论时间

商品属性枚举值

要求提出一套商品属性相关的数据库设计思路,要求是商品属性的类别(例如品牌,尺寸,颜色.)不确定,各个属性类别的属性值(例如品牌可能是HP,IBM..)不确定,同时需要实现针对不同属性类别的商品检索,例如检索出品牌为XX,尺寸为XX,颜色为XX的商品,各条件为AND操作,另外每个属性类别的条件可能为品牌=XX or品牌 = YY这样的OR操作,最终实现出类似淘宝商品检索页面那样的功能如下(品牌,裤长等条件为AND关系,品牌中的可以选择多个品牌,为OR关系)

 

属性类别表spec

spec_id -属性类别id

spec_name-属性类别名称

属性值表spec_info

spec_info_id-属性值id

spec_id-属性类别

spec_info_name属性值名称 

商品表goods

goods_id-商品id

goods_name-商品名称

商品属性表goods_spec

goods_spec_id-商品属性id

goods_id商品id

spec_info_id-商品属性值id

建立以上4个数据库后,spec表存放的是品牌,颜色,尺码等的属性名, spec_info表存放的是红色,蓝色,HP, IBM等的实际的属性值,再通过goods_spec表将一个商品跟它的属性进行关联,这样要实现类似淘宝的检索功能的SQL语句就可以编写如下:

假设要检索品牌为IBM或HP(在spec_info表中的spec_info_id分别为1和2) ,颜色为红色(在spec_info表中的spec_info_id为6),尺码为15寸(在spec_info表中的spec_info_id 为5)的商品

$sql = "select * from goods_spec where spec_info_id = 5 and goods_id in (select goods_id from goods_spec where spec_info_id = 6 and goods_id in (select goods_id from goods_spec where spec_info_id = 1 or spec_info_id = 2);


http://chatgpt.dhexx.cn/article/4TZHjswc.shtml

相关文章

SQL数据库编写及示例

一、 数据库编写 1、数据库常用约束 主键约束: primary key 外键约束: foreign key (references) 唯一值约束: unique 默认值约束: default 检查约束: check 非空约束: not null 标识列: identity 2、创建数据表注意事项 主外键数据类型必须一致 列与列之间用,间隔…

sqlserver:什么是数据库实例?

环境: window server 2019 datacentersqlserver2014 x64 问题: 什么是SQL server实例?数据库的对象架构是怎样设计的? 先把官方的解释贴出来: https://docs.microsoft.com/zh-cn/sql/relational-databases/databases…

【转】数据库设计实例一学习

​​​​​​数据库1​​​​​​​​​​​​​​​​​​​​​对多,1对1,M对N学习 以RBAC为例。​​​​​​​​​​​​​​ 于 RBAC(Role-based Access Control)权限访问控制。也就是说一个用户可以有多个角色&#xff…

sql server 数据库设计实例

本实例为综合实例,考察数据库原理中的,sql脚本的编写,创建——增删改查,视图和索引的创建等;数据库ER图,关系模式;以及一些高级的应用包括:触发器,函数和存储过程。 (一). 数据库设计题目如下 有一个图书出版发行管理系统,其主要业务规则如下: 一个作者可以编写多…

达梦数据库创建及数据库实例管理

一、配置助手创建和删除数据库 数据库配置助手创建数据库调用 dbca.sh 图形化界面创建数据库:[dmdbaDCA02 tool]$ ./dbca.sh2021-01-11 11:43:45 [com.dameng.dbca.Startup] [INFO] 启动 DBCA 指定数据库名称、实例名称(单机情况下数据库和实例名称可以…

MySql 数据库操作实例

MySql 数据库操作实例 案例描述创建插入数据内外连接~问题问题1:查询周星星的成绩问题2:查询所有人的平均成绩以及其他信息1)查询所有人的平均成绩2)查询平均成绩最高的前三名3)查询平均成绩排名第三的学生信息 问题3&…

数据库五个经典实例

创建数据库链接,需要用到connection对象,recordset对象。 对数据库进行操作,需要用到command对象,parameter对象。这两个对象成对出现。 connection对象:创建数据库链接。在对数据库进行操作的前提步骤。 recordset…

Oracle 数据库实例介绍

文章目录 数据库实例介绍实例结构实例配置读写实例与只读实例实例生命周期实例标识Oracle 根目录Oracle 主目录Oracle SID 实例启动与关闭启动实例与数据库管理员登录启动实例加载数据库打开数据库只读模式数据库文件检查 关闭数据库与实例关闭模式关闭数据库正常关闭异常关闭 …

Python:二叉树遍历

二叉树遍历共有四种方法,分别是前序遍历、中序遍历、后序遍历和层次遍历。 前序遍历: 父节点——左孩子——右孩子 中序遍历:左孩子——父节点——右孩子 后序遍历:左孩子——右孩子——父节点 层次遍历:利用队列解…

【算法】二叉树遍历的几种常见方法

二叉树遍历的几种常见方法 一. 二叉树分类: 完全二叉树满二叉树扩充二叉树平衡二叉树 二. 二叉树的四种遍历方式: 前序遍历(先根,再左,最后右)中序遍历(先左,再根,最…

二叉树遍历的非递归算法

非递归的算法主要采用的是循环出栈入栈来实现对二叉树的遍历,下面是过程分析 以下列二叉树为例:(图片来自懒猫老师《数据结构》课程相关内容) 1.前序遍历 前序遍历的顺序为:根结点->左子树->右子树 基本过程&a…

二叉树的中序遍历算法

一,简介 二叉树的中序遍历在计算机行业有着重要的作用,其中一个应用就是判断一棵二叉树是否二叉排序树。 下面介绍递归和非递归两种方式实现中序遍历。 二,递归实现 递归实现非常简单,左根右依次进行即可。 void mid_scan2(n…

JavaScript算法 — 二叉树遍历

目录 1、构造二叉树2、递归遍历3、非递归遍历3.1 先序3.2 中序3.3 后序 1、构造二叉树 树节点: // 二叉树节点的构造函数 function TreeNode(val, left, right) {this.val (valundefined ? 0 : val)this.left (leftundefined ? null : left)this.right (righ…

二叉树遍历算法之一:前序遍历

递归实现前序遍历 二叉树的前序遍历是指从根节点出发,按照先根节点,再左子树,后右子树的方法遍历二叉树中的所有节点,使得每个节点都被访问一次。 当调用遍历算法的时候前序遍历的具体过程如下: 首先访问根节点&…

二叉树遍历小结

前言 二叉树是相当重要的数据结构,目前我还只会玩玩它的遍历(年轻不懂事没好好学,不然早就达到人生巅峰了),LeetCode上二叉树的简单题,大部分通过遍历加一点小逻辑即可解决,所以总结一下几种遍…

二叉树遍历之层次遍历算法入门详解

一、引言 二叉树的遍历常见的方法有先序遍历、中序遍历、后序遍历和层次遍历等,本文给出了C语言版本的层次遍历二叉树的算法。 层次遍历的原理很简单,总结为一句话就是“从上到下,从左到右”,就是从树根开始逐层访问二叉树的结点&…

二叉树的四种遍历算法

二叉树作为一种重要的数据结构,它的很多算法的思想在很多地方都用到了,比如STL算法模板,里面的优先队列、集合等等都用到了二叉树里面的思想,先从二叉树的遍历开始: 看二叉树长什么样子: 我们可以看到这颗…

实现二叉树各种遍历算法

目录 前言一、题目1.二叉树的各种遍历过程及遍历算法设计。2.实现二叉树各种遍历算法 总结 前言 提示:记得关注我哦!!! 一、题目 1.二叉树的各种遍历过程及遍历算法设计。 (1) 先序遍历二叉树&#xff1…

算法分析之二叉树遍历

算法相关数据结构总结: 序号数据结构文章1动态规划动态规划之背包问题——01背包 动态规划之背包问题——完全背包 动态规划之打家劫舍系列问题 动态规划之股票买卖系列问题 动态规划之子序列问题 算法(Java)——动态规划2数组算法分析之数…

二叉树遍历算法总结

A. 二叉树的遍历 1.前序遍历二叉树: (1)若二叉树为空,则为空操作,返回空。 (2)访问根结点。 (3)前序遍历左子树。 (4)前序遍历右子树。 a.二叉树前序遍历的递归算法: void PreOrderTraverse(BiTree BT)…