天天看點

零售商販mysql表設計:banner+banner_item+image關聯表(輪播圖表)

作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主

文章目录

  • ​​banner管理表(轮播图管理表)​​
  • ​​解析banner管理表(轮播图管理表)​​
  • ​​id解析:​​
  • ​​数据​​
  • ​​(banner子项表->banner_item)​​
  • ​​id解析:​​
  • ​​数据​​
  • ​​图片在image表中。​​
  • ​​解析​​
  • ​​什么是banner位?​​

banner管理表(轮播图管理表)

CREATE TABLE `banner` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL COMMENT 'Banner名称,通常作为标识',
  `description` varchar(255) DEFAULT NULL COMMENT 'Banner描述',
  `delete_time` int(11) DEFAULT NULL,
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='banner管理表';      

解析banner管理表(轮播图管理表)

你看啊。为什么要用这个表呢banner,因为是不是得划分一个区域来把图片(banner_item)放进去啊。

你看啊。为什么要使用name这个字段呢?因为一个轮播图得有名称把。得有描述把。描述是这个轮播图是什么名字.

名称是一个标识.说明这个是一个置顶的轮播图.

​​

​delete_time​

​​

​update_time​

​ 这两个字段代码这个轮播图要不要删除。要不要更新一下这个轮播图.

​

​PRIMARY KEY (​

​​id​

​)​

​的意思是?

id解析:

为什么要设置自增主键 id ? PRIMARY KEY (​

​id​

​​)

可以唯一标识一行数据,在 InnoDB 构建索引树的时候会使用主键。

自增 id 是顺序的,可以保证索引树上的数据比较紧凑,有更高的空间利用率以及减少数据页的分裂合并等操作,提高效率。(数字顺序搜索快一点)

一般使用手机号、身份证号作为主键等并不能保证顺序性。

流水号一般相对较长,比如 28 位,32 位等,过长的话会二级索引占用空间较多。同时为了业务需求,流水号具有一定的随机性。

int(11)是什么意思?

“int(11)中,11代表的并不是长度,而是字符的显示宽度

为什么id不能为空NOT NULL?

如果查询中包含可为 NULL 的列,对 MySQL 来说更难优化 ,因为可为 NULL 的列使 得索引、索引统计和值比较都更复杂 。可为NULL 的列会使用更多的存储空间 ,在 MySQL 里也需要特殊处理 。当可为NULL 的列被索引肘,每个索引记录需要一个额 外的字节,在 MyISAM 里甚至还可能导致固定大小 的索引 (例如只有一个整数列的 索引) 变成可变大小的索引。(为null是占用存储空间的。为空不占用存储空间哦)

AUTO_INCREMENT的特点?

默认情况下,AUTO_INCREMENT的起始值为1,每个新记录增加1。

数据

零售商販mysql表設計:banner+banner_item+image關聯表(輪播圖表)

(banner子项表->banner_item)

CREATE TABLE `banner_item` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `img_id` int(11) NOT NULL COMMENT '外键,关联image表',
  `key_word` varchar(100) NOT NULL COMMENT '执行关键字,根据不同的type含义不同',
  `type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '跳转类型,可能导向商品,可能导向专题,可能导向其他。0,无导向;1:导向商品;2:导向专题',
  `delete_time` int(11) DEFAULT NULL,
  `banner_id` int(11) NOT NULL COMMENT '外键,关联banner表',
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='banner子项表';      

​

​PRIMARY KEY (​

​​id​

​)​

​的意思是?

id解析:

为什么要设置自增主键 id ? PRIMARY KEY (​

​id​

​​)

可以唯一标识一行数据,在 InnoDB 构建索引树的时候会使用主键。

自增 id 是顺序的,可以保证索引树上的数据比较紧凑,有更高的空间利用率以及减少数据页的分裂合并等操作,提高效率。(数字顺序搜索快一点)

一般使用手机号、身份证号作为主键等并不能保证顺序性。

流水号一般相对较长,比如 28 位,32 位等,过长的话会二级索引占用空间较多。同时为了业务需求,流水号具有一定的随机性。

int(11)是什么意思?

“int(11)中,11代表的并不是长度,而是字符的显示宽度

为什么id不能为空NOT NULL?

如果查询中包含可为 NULL 的列,对 MySQL 来说更难优化 ,因为可为 NULL 的列使 得索引、索引统计和值比较都更复杂 。可为NULL 的列会使用更多的存储空间 ,在 MySQL 里也需要特殊处理 。当可为NULL 的列被索引肘,每个索引记录需要一个额 外的字节,在 MyISAM 里甚至还可能导致固定大小 的索引 (例如只有一个整数列的 索引) 变成可变大小的索引。(为null是占用存储空间的。为空不占用存储空间哦)

AUTO_INCREMENT的特点?

默认情况下,AUTO_INCREMENT的起始值为1,每个新记录增加1。

​

​img_id​

​​是关联下面的图片image表的id字段.

​​

​key_word​

​​ ​

​type​

​​ 是关联起来的,代表根据type的不同,跳向商品 专题 其他.

banner_id关联banner表的id,这篇文字第一张表啦

使用innodb表的优点是啥?

支持事务.

InnoDB 被设计对于CPU效率和最大性能 当处理大量数据时

InnoDB 表可以处理大量的数据,即使操作系统 文件限制为2GB

CHARSET=utf8mb4 这是字符集

数据

零售商販mysql表設計:banner+banner_item+image關聯表(輪播圖表)

上图的img_id关联image表的id字段.

image数据如下:

图片在image表中。

CREATE TABLE `image` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` varchar(255) NOT NULL COMMENT '图片路径',
  `from` tinyint(4) NOT NULL DEFAULT '1' COMMENT '1 来自本地,2 来自公网',
  `delete_time` int(11) DEFAULT NULL,
  `update_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8mb4 COMMENT='图片总表';      

你看啊。图片是不是得有路径啊。是不是的显示是本地图片还是线上的啊。

零售商販mysql表設計:banner+banner_item+image關聯表(輪播圖表)

解析

banner表是banner位.

什么是banner位?

Banner位,通常位于界面的顶部,是广告、运营活动、专题、新产品推广等重要信息的展示区域,通过运营同学来进行内容信息的维护,运用视觉表现的手法突出重点信息,来吸引用户的关注。

特点:

  1. Banner位主要存在于首页、发现页和资源列表页等信息集合页面中
  2. Banner位多数情况是轮播图,展示数量在28个,通常情况下35个为佳,数量太多的话不利于所有的banner的曝光,且用户错过一个就需要滑动多个才重新找见,体验感也不是很好。

banner_item是什么?

比如轮播图里面的图片.就是banner_item