2019独角兽企业重金招聘Python工程师标准>>>

每个blog服务提供商无论是新浪,csdn,博客园还是Blogger,都特工了博客分类和添加标签的功能,而标签机制又不只存在于博文,还存在一些公共聊天室类似的社交平台,比如微博话题,OSChina动弹,脸书动态,Twitter等等,那么分类机制和标签机制的区别是什么呢,首先最明显的一个就是:

类与内容体是一对多的关系

标签与内容体是多对多的关系

数据库如何存储上述两种关系?

文章的分类就是一个简单嵌套关系,对于关系型mysql,最外面肯定是按时间顺序存放的全部文章列表,同时有一个auto_increment的id,然后可以根据每一个分类建一个索引表(通过id)从而避免全表扫描.
关于索引的哲学可以参考这篇:

http://blog.csdn.net/github_38885296/article/details/77854630

标签机制就比较麻烦了,其实分类与标签可以类比java里面的类与接口:

 
  1. java类我们都知道,一个子类只能有一个父类,但一个类可以有多个子类;刚开始只有类与对象机制的时候,java程序员还是用的不亦乐乎的,但是随着需求的增加,他们慢慢发现类已经无法满足所有需求 了, 比如一个Car类既要继承一个Vehicle类,又要属于Expensive父类.这种平行意义上的两种划分方式单继承是无法满足的**多继承**的需求的,所以好像从jdk7开始,支持多继承的接口正式支持,接口的出现打破了传统的经典嵌套理论,提供了更开放的多对多关系的存储方式和逻辑关系.

当然和接口不通的是,标签机制需要我们自己实现,有一种最简单暴力的方式是将所有多对多关系转化为一对一的关系,比如:

图中双方各有3个单元,之间关系复杂,任务是多对多;

这个关系图中共有6条线,那么就可以转换成6个一对一的关系:

于是关系型数据库表中只要存这样的一对一关系就可以了,非常清晰易懂.
但是这样的缺陷也很明显,那就是经常需要全表扫描才能parse出完整的多对多关系,才能在显示出完整的标签分类图.

所以留一个疑问,有没有更好的方法来存储呢,如果你有请留言:D.

2018-01-22 12:08:06 星期一

转载于:https://my.oschina.net/jinhengyu/blog/1611083

浅谈分类与标签机制的特色相关推荐

  1. 浅谈ASP.NET内部机制(五)

    浅谈ASP.NET内部机制(五) 前言:本章要谈页面生命周期了,过程挺多的,但是一点都不难.不信可以看看.我尽量的讲的平实一些,而且理解页面的生命周期对喜欢开发自定义控件和组件的朋友是很有帮助的. 系 ...

  2. 浅谈 LiveData 的通知机制

    LiveData 和 ViewModel 是 Google 官方的 MVVM 架构的一个组成部分.巧了,昨天分析了一个问题是 ViewModel 的生命周期导致的.今天又遇到了一个问题是 LiveDa ...

  3. ajax机制 缓存,浅谈Ajax的缓存机制

    浅谈Ajax的缓存机制 Ajax的缓存机制和浏览器处理资源时的缓存机制是一样的. 三条简单规则: 只要是URL相同的GET请求,浏览器会使用缓存(当然还要看服务器的Cache-Control/Expi ...

  4. js 单页面ajax缓存策略,浅谈ajax的缓存机制---IE浏览器方面

    这篇文章主要介绍了IE浏览器关于ajax的缓存机制,文中给大家提到了Ajax解决浏览器的缓存问题,解决方法有很多种.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. IE浏览器对于同一 ...

  5. 浅谈java的反射机制

    java的反射机制 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为 ...

  6. tcp retransmission 出现的原因_浅谈TCP的keepalive机制

    相关背景: hbase集群大量regionserver节点进程挂掉,排查log发现每个节点上的有大量的和datanode建立连接失败的报错信息,进一步排查是大量的Too Many Open Files ...

  7. 若要加载模块二进制_春哥说 | 浅谈NodeJs的模块机制-2

    ★ 目录 ★ 01 Node的模块实现概述 02 优先从缓存中加载 03 路径分析和文件定位 Node的模块实现概述 Nodejs再集成CommonJs的模块机制的规范时进行了取舍,同时增加了特性. ...

  8. 浅谈runtime运行时机制

    由于OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法. 下面就介绍运行时一种很简单的使 ...

  9. 浅谈Android事件分发机制

    在Android实际开发过程中经常会遇到View之间的滑动冲突,如ScrollView与Listview.RecyclerView之间的嵌套使用.在很好的解决此类问题之前,我们应深入的了解Androi ...

  10. 浅谈Java多线程同步机制之同步块(方法)——synchronized

    在多线程访问的时候,同一时刻只能有一个线程能够用 synchronized 修饰的方法或者代码块,解决了资源共享.下面代码示意三个窗口购5张火车票: 1 package com.jikexueyuan ...

最新文章

  1. Java算法-奇怪的分式
  2. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
  3. boost::math::boost::math::interpolators::cardinal_cubic_b_spline用法的测试程序
  4. angularjs 弹出框 $modal传值
  5. POJ 3984 迷宫问题
  6. 一位Oracle顶流铁粉的“躬身入局”
  7. 联发科梦碎高端化:2015年净利恐降4成股价腰斩
  8. Web前端工作笔记006---各种弹框框架
  9. github博客安装jekyll的RUBY更换源
  10. C++多继承构造和析构顺序
  11. Win10提示没有权限使用网络资源问题解决
  12. VOC 2007数据集结构
  13. MATLAB之模型仿真(一)简单自由落体运动
  14. CORE | AAAI2020:分子自动优化模型
  15. [AHK]爬虫基础 解析IP138网站返回的结果
  16. 高德地图API的一些使用心得
  17. 正规蓝牙耳机一般多少钱?音质好又便宜的蓝牙耳机
  18. 资产会计中常见日期(资本化日期、资产价值日等)解析
  19. 第3-5课:24 点计算器
  20. MongoDB——ISODate日期类型

热门文章

  1. Android仿58同城Loading View
  2. MAC环境配置SDK
  3. python数据库操作——Oracle超详细安装过程
  4. vant ui 官方文档_转载:微信小程序UI组件库合集
  5. radiogroup多选_Android实现单项、多项选择操作
  6. 文件和参数一起上传_基于netty的文件上传下载组件
  7. java窗口全屏_java如何改全屏为窗口?求啊啊啊啊
  8. go语言环境搭建以及监测命令
  9. oracle不能插入,oracle – 在过程中截断和插入不能一起工作
  10. 四张照片合成一张怎么弄_教你5种照片创意手工,简单好看实用