项目中有一个功能。 就是记录资源的的评分数,收藏,点赞类似的功能。其中不同的开发人员对相似的功能做了不同的设计。就以 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

数据库设计 资源表与资源收藏表的设计相关推荐

  1. 多表关系、数据库设计的范式、数据库的备份和还原、多表查询、事务、DCL(了解)

    文章目录 多表关系 数据库设计的范式 数据库的备份和还原 多表查询 多表查询的分类:内连接查询 隐式内连接:使用where条件消除无用数据 显式内连接 多表查询的分类:外连接查询 左外连接 右外连接 ...

  2. 15 个第三方Web 表单资源

    几乎每个 Web 站点都需要表单,不管是留言表单,还是会员注册表单,还是调查表或订单,尽管表单很有用,但对 Web 开发与设计者来说,表单的设计非常繁琐,本文搜集了15个免费或收费的第三方 Web 表 ...

  3. SQL数据库不用SQL语句能显示全表的内容_MySQL DBA必读:万字归总表设计与SQL编写技巧...

    作者介绍 刘书浩,"移动云"DBA,负责"移动云"业务系统的数据库运维.标准化等工作:擅长MySQL技术领域,熟悉MySQL复制结构.Cluster架构及运维优 ...

  4. 数据库表设计的随笔(分库分表)

    笔者目前就职的是一家创业型的互联网公司,既然算是互联网公司,那么就会设计到无论是应用系统还是数据库的分布式.下面简单介绍下有关数据库方面的一些设计. 数据库表的设计,根据自己的业务所需可以拆分成多库. ...

  5. 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )

    文章目录 一.AAPT2 资源编译工具 二.resources.arsc 资源映射表 工作机制 三.参考资料 一.AAPT2 资源编译工具 资源的编译 , 生成 R.java 文件 , 都是通过 AA ...

  6. 收藏表数据库_选择您的收藏库

    收藏表数据库 这真的是您应该烦恼的吗? java.util.ArrayList和java.util.HashMap从根本上有问题吗? 对于大多数源代码,答案是–不: 这些实现完全可以. 但是,一如既往 ...

  7. 逻辑数据库设计 - 单纯的树(邻接表、路径枚举、嵌套集、闭包表)(引)

    相信有过开发经验的朋友都曾碰到过这样一个需求.假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复. 这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系.这是一种典 ...

  8. jquery 自定义正方形图标_8个设计师必看的,免费UI图标设计资源站,赶紧收藏!...

    图标是我们日常APP及网页设计过程中必不可少的元素之一,通过小小的图标,可以快速方便的实现视觉引导和功能划分.在创作时,我们需要寻找各种各样的图标来满足自己的设计需求,非常浪费时间和精力. 今天,我给 ...

  9. 数据库设计之E-R图和关系表

    一 概念 E-R图:也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型. 实体:用矩形框表示,矩形框内写明实体 ...

  10. 数据库实验报告 设计便利店数据表、商品数据表 查询需要上货的商品列表 SQL Kingbase

    一.实验题目 已有条件:假设你拥有多个连锁便利店,名字不一样,每个便利店有店名.国家.城市.地址等信息要登记,每个便利店有多种商品要登记,包括商品ID.商品名称等信息.每个店销售的商品种类.价格和促销 ...

最新文章

  1. 独家 | 一文解析统计学在机器学习中的重要性(附学习资源)
  2. 【原创视频教程】学生信息管理系统1--登陆
  3. 对OCR文字识别软件进行自动分析和识别设置的教程
  4. PS滤镜制作下雨照片特效
  5. 月均活跃用户达1.3亿,B站高可用架构实践
  6. 昨日我是谁,今日谁是我
  7. linux libpcap 效率,Linux ubuntu PF_RING+libpcap 极速捕获千兆网数据包,不丢包
  8. 利用dos进入mysql数据库操作数据
  9. css3中的变形(transform)、过渡(transtion)、动画(animation)
  10. 百度地图加载空白颜色_详细解析百度收录和百度排名关系
  11. java和php哪个开发网站好,网站开发,Java和php两种开发语言,应该选哪一种,你知道吗?...
  12. 刚构桥的优缺点_[中交公规院]预应力连续刚构桥总体设计及主要尺寸
  13. java jdk 安装教程_JDK下载安装配置教程(详细)
  14. SheetJS中文文档-js导出Excel脚本库
  15. 科大讯飞实习 第七周日记
  16. 5 个市值较小的去中心化游戏
  17. 谷歌五笔输入法_输入法之争
  18. UNIAPP 怎么引入字体
  19. 【分布式训练-Ring AllReduce】
  20. 监控与日志的黄金法则

热门文章

  1. 计算机主机插槽图,图片解说看个透 教你认识主板上的插槽
  2. 单独设置一页或者多页的页眉或者页脚
  3. 新浪邮箱服务器密码被盗,邮箱密码盗取严重的注意事项以及处理建议
  4. 2020年计算机组装行业,组装电脑已成夕阳产业?DIY装机发展的道路在何方?
  5. 计算机关机键 自动重启,电脑关机后自动重启怎么办?原因及解决方详解
  6. python极速入门(适合有基础)
  7. HTML背景图片设置
  8. 大话设计模式:第27章 解释器模式
  9. linux 默认网关自动消失,route add default gw 添加默认网关,重起后消失
  10. 微信公众平台怎么发PDF文件?