数据库多对多设计方案(贴标签的设计方案)
为什么80%的码农都做不了架构师?>>>
二进制数字的每一位表示一个标签,1 表示被贴了这个标签,0 表示未被贴这个标签。 同时,标签在表中的 ID 表示二进制中对应的位。举个例子: 标签表:
tag_id tag_name1 标签-12 标签-23 标签-3
商品表:goods_id tag_id(二进制,省略前置0)1 1(1)2 3(11)3 5(101)4 6(110)5 7(111)6 4(100)
当要选择 标签-1 的商品时,可以通过位运算中的与运算(&),来获取二进制右起第一位为1的商品,偏移值 offset 为: 1<<(tag_id-1),当商品表中的 tag_id & offset 的结果与 offset 相等的时候,即得到了 标签-1 的商品,SQL 如下:
SELECT * FROM `商品表` WHERE tag_id & (1<<(1-1))=1<<(1-1)
得到的结果:
goods_id tag_id(二进制,省略前置0)1 1(1)2 3(11)3 5(101)5 7(111)
当要选出 标签-1、标签-2,标签-3 的商品时,offset = (1<<(1-1))+(1<<(2-1))+(1<<(3-1)),SQL 如下:
SELECT * FROM `商品表` WHERE tag_id & ((1<<(1-1))+(1<<(2-1))+(1<<(3-1)))=(1<<(1-1))+(1<<(2-1))+(1<<(3-1))
得到结果:
goods_id tag_id(二进制,省略前置0)5 7(111)
通过这种方式,就可以抛弃掉关联表,直接通过位运算,获取到相应标签的数据。
转载于:https://my.oschina.net/nixus/blog/854537
数据库多对多设计方案(贴标签的设计方案)相关推荐
- 关系型数据库 多对多(many to many)关系 三表还是两表
关系型数据库 多对多关系 三表还是两表 ? 多对多一般都是三张表,两张各自的单个信息表,一张表明关系的连接表. student//学生基本信息表 id name ... course//课程基本信息表 ...
- 数据库多对多关系示例 - 使用sqlite演示
多对多,可以理解为是一对多和多对一的组合:要实现多对多,一般都需要有一张中间表(也叫关联表),将两张表进行关联,形成多对多的形式: 例如: 老师表.班级表.课程表,中间表为:课程表: 如果sq ...
- 锂电池供电电路设计方案汇总(四款设计方案)
锂离子电池以其优良的特性,被广泛应用于: 手机.摄录像机.笔记本电脑.无绳电话.电动工具.遥控或电动玩具.照相机等便携式电子设备中. 一.锂电池与镍镉.镍氢可充电池: 锂离子电池的负极为石墨晶体,正极 ...
- Flask 数据库多对多关系
数据库使用关系建立记录之间的联系.其中,一对多关系是最常用的关系类型,它把一个记录和一组相关的记录联系在一起.实现这种关系时,要在"多"这一侧加入一个外键,指向"一&qu ...
- C语言学生信息管理系统设计方案,c语言程序设计方案报告图书标准管理系统
<c语言程序设计方案报告图书标准管理系统>由会员分享,可在线阅读,更多相关<c语言程序设计方案报告图书标准管理系统(6页珍藏版)>请在人人文库网上搜索. 1.c 语言程序设计方 ...
- 织梦php标签查询数据库,织梦DedeCMS模板标签sql调用代码大全
织梦Dedecms确实是非常强大的系统,编程之家以前也分享了很多自己在使用织梦时遇到的一些问题及其解决办法.下面是要分享在Dede系统里面,如何使用sql语句来配合织梦标签进行更多的个性化调用.如织梦 ...
- 数据库多对多关系建表
对于多对多的关系,建表的方式是有两种的,最常见的做法就是建立一张中间关系表b,关联另外两张表a和c的主键,不要其他多余信息,这种做法通常的情况就是a表和c表中的数据不能有重复的,所以我们只能建立单独的 ...
- 数据库多对多的通俗理解
定义: 多对多关系是关系数据库中两个表之间的一种关系, 该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关.第二个表中的一个行也可以与第一个表中的一个或多个行相关 理解: 产品和订单是多对多 ...
- 数据库分页和使用jstl标签替换分页的jsp代码
参考链接: http://www.mossle.com/docs/jsp/html/jsp-ch-15.html 转载于:https://www.cnblogs.com/wenjieyatou/p/6 ...
最新文章
- 新iPhone全面5G!4种杯型,最便宜只要5500,均内置中国北斗
- Funambol Developer#39;s Guide 中 connector development样例的问题
- 【JUC并发编程10】阻塞队列
- 网络编程1之计算机网络及参考模型、域名、服务器
- 计算机一代的特点,计算机的特点_第一代计算机的特点
- cocos2dx 3.2之Lua打飞机项目
- python 分析html_用python的BeautifulSoup分析html
- 因为没钱买衣服,我女朋友不要我了......
- 1305. GT考试
- 程序员面试金典 - 面试题 17.12. BiNode(BST中序遍历)
- matlab读取时间数据,Matlab有关数据库读取及时间项的设定
- Java,AXIS,webService 调用 完整实例 xml 入参出参
- OpenCV读图、展示和保存新图
- 在windows上传一个新的项目到GitHub上
- Eclipse中集成SVN
- Github上多人协作方式之一
- 工商数据抓取全部方法
- python基础----Day06
- IOS Websocket (一) Starscream实现Websocket通讯
- 程序员希望收到什么礼物