数据库设计 资源表与资源收藏表的设计
项目中有一个功能。 就是记录资源的的评分数,收藏,点赞类似的功能。其中不同的开发人员对相似的功能做了不同的设计。就以 A,B,C 来代替吧。下面我以收藏数作为实例进行说明。
资源表 tb_d_resource
CREATE TABLE tb_d_resource
(
ID
int(11) NOT NULL AUTO_INCREMENT,
NAME
varchar(50) DEFAULT NULL,
URL
varchar(100) DEFAULT NULL,
CREATE_TIME
datetime DEFAULT NULL,
PRIMARY KEY (ID
)
)
收藏表 tb_d_collection
CREATE TABLE TB_D_COLLECTION
(
ID
int NOT NULL AUTO_INCREMENT ,
RID
int NOT NULL ,
UID
int NOT NULL ,
CREATE_TIME
datetime NULL ,
PRIMARY KEY (ID
)
)
;
A 方案:
通过left join 关键字 直接在数据库统计出来返回给前台
SELECT
ID,
NAME,
URL,
COUNT_COLLECTION ‘收藏数统计’
FROM
tb_d_resource r
LEFT JOIN (
SELECT
RID,
COUNT(RID) COUNT_COLLECTION
FROM
tb_d_collection
GROUP BY
RID
) CC ON R.ID = CC.RID
LIMIT 0,10
方案B
将查询资源列表的sql 和统计资源收藏数的sql 分开写,能后通过java 代码进行数据合并。
查询资源sql: SELECT ID, NAME, URL FROM tb_d_resource r LIMIT 0, 10
查询具体资源的收藏数sql : select count(RID) ‘收藏数’ FROM tb_d_collection where rid=’资源id’
通过查询资源sql 里面返回的数据,能后在去调用统计的sql 语句,并把统计的结果拼接到集合中返回给前台
方案C
在资源表加一个收藏总数的属性 collections 来记录收藏总数,当用户发生了收藏、取消收藏的行为时同时对资源表的数据进行+/-1 。 这样实时的把统计数据记录在资源表,页面在做展示的时候可以直接把相关信息展示出来,而不通过与收藏表的关联或者是在java 代码层进行拼装。
个方案的优缺点
A:
优点 : 简单方便,所需的数据一条sql 语句搞得
缺点: 在做收藏统计的时候一次把所有资源的收藏数都统计出来了,性能差
B:
优点: 一次只统计所需资源的收藏数,没有不必要的操作,性能快
缺点: 需要循环调用统计的sql据库的性能(当能一般也不会出现分页太大的情况,基本可以不考虑这个因数)
C
优点: 方便,也是一条sql 搞定所有数据,性能最快
缺点: 需要在资源表添加一个新的字段,同时在添加收藏和删除收藏的时候要也要实时的更新资源表里面 collections 属性的值,繁琐。
其中这个方案还需要考虑数据强一致性的问题,因为统计数据不是实时的从统计表里面统计出来的,所以有时候会出现两边数据不一致的问题(运维人员手动删除了收藏表里面的数据,或者手动改动了资源表的统计数据)
上就是本人以以及团队成员在做相似功能出现的三种方案。各有优劣,其中本人更推荐使用方案B
数据库设计 资源表与资源收藏表的设计相关推荐
- 多表关系、数据库设计的范式、数据库的备份和还原、多表查询、事务、DCL(了解)
文章目录 多表关系 数据库设计的范式 数据库的备份和还原 多表查询 多表查询的分类:内连接查询 隐式内连接:使用where条件消除无用数据 显式内连接 多表查询的分类:外连接查询 左外连接 右外连接 ...
- 15 个第三方Web 表单资源
几乎每个 Web 站点都需要表单,不管是留言表单,还是会员注册表单,还是调查表或订单,尽管表单很有用,但对 Web 开发与设计者来说,表单的设计非常繁琐,本文搜集了15个免费或收费的第三方 Web 表 ...
- SQL数据库不用SQL语句能显示全表的内容_MySQL DBA必读:万字归总表设计与SQL编写技巧...
作者介绍 刘书浩,"移动云"DBA,负责"移动云"业务系统的数据库运维.标准化等工作:擅长MySQL技术领域,熟悉MySQL复制结构.Cluster架构及运维优 ...
- 数据库表设计的随笔(分库分表)
笔者目前就职的是一家创业型的互联网公司,既然算是互联网公司,那么就会设计到无论是应用系统还是数据库的分布式.下面简单介绍下有关数据库方面的一些设计. 数据库表的设计,根据自己的业务所需可以拆分成多库. ...
- 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )
文章目录 一.AAPT2 资源编译工具 二.resources.arsc 资源映射表 工作机制 三.参考资料 一.AAPT2 资源编译工具 资源的编译 , 生成 R.java 文件 , 都是通过 AA ...
- 收藏表数据库_选择您的收藏库
收藏表数据库 这真的是您应该烦恼的吗? java.util.ArrayList和java.util.HashMap从根本上有问题吗? 对于大多数源代码,答案是–不: 这些实现完全可以. 但是,一如既往 ...
- 逻辑数据库设计 - 单纯的树(邻接表、路径枚举、嵌套集、闭包表)(引)
相信有过开发经验的朋友都曾碰到过这样一个需求.假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复. 这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系.这是一种典 ...
- jquery 自定义正方形图标_8个设计师必看的,免费UI图标设计资源站,赶紧收藏!...
图标是我们日常APP及网页设计过程中必不可少的元素之一,通过小小的图标,可以快速方便的实现视觉引导和功能划分.在创作时,我们需要寻找各种各样的图标来满足自己的设计需求,非常浪费时间和精力. 今天,我给 ...
- 数据库设计之E-R图和关系表
一 概念 E-R图:也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 实体:用矩形框表示,矩形框内写明实体 ...
- 数据库实验报告 设计便利店数据表、商品数据表 查询需要上货的商品列表 SQL Kingbase
一.实验题目 已有条件:假设你拥有多个连锁便利店,名字不一样,每个便利店有店名.国家.城市.地址等信息要登记,每个便利店有多种商品要登记,包括商品ID.商品名称等信息.每个店销售的商品种类.价格和促销 ...
最新文章
- 独家 | 一文解析统计学在机器学习中的重要性(附学习资源)
- 【原创视频教程】学生信息管理系统1--登陆
- 对OCR文字识别软件进行自动分析和识别设置的教程
- PS滤镜制作下雨照片特效
- 月均活跃用户达1.3亿,B站高可用架构实践
- 昨日我是谁,今日谁是我
- linux libpcap 效率,Linux ubuntu PF_RING+libpcap 极速捕获千兆网数据包,不丢包
- 利用dos进入mysql数据库操作数据
- css3中的变形(transform)、过渡(transtion)、动画(animation)
- 百度地图加载空白颜色_详细解析百度收录和百度排名关系
- java和php哪个开发网站好,网站开发,Java和php两种开发语言,应该选哪一种,你知道吗?...
- 刚构桥的优缺点_[中交公规院]预应力连续刚构桥总体设计及主要尺寸
- java jdk 安装教程_JDK下载安装配置教程(详细)
- SheetJS中文文档-js导出Excel脚本库
- 科大讯飞实习 第七周日记
- 5 个市值较小的去中心化游戏
- 谷歌五笔输入法_输入法之争
- UNIAPP 怎么引入字体
- 【分布式训练-Ring AllReduce】
- 监控与日志的黄金法则