上一节《关于商城系统中商品表的设计》中我说数据库设计有一块硬伤,到底在哪儿?今天我们来进行分析。

看下图:

看上图中有什么地方是相同的?

“品牌”→“三星”在手机数码分类里面有,在电脑办公分类里面也有,这有什么问题?再来看看上篇中的那个关系图:

再看数据库中存储的数据,首先是(T_FilterCategory表)

如下(T_FilterAttributes表)

如下(T_FilterCategory与T_FilterAttributes之间的关联表)

如上图,既然“品牌”→“三星”在手机数码分类里面有,在电脑办公分类里面也有,那么如果只是像上面这个关联表这么保存筛选条件和筛选条件值,我如何区分哪个是手机数码下的“品牌”→“三星”,哪个是电脑办公分类下的“品牌”→“三星”?如果我不区分它,会发生什么情况?现在有这么个业务,需要我通过用户选择的三级类别,展示出指定三级类型下的“筛选条件”和对应的“筛选条件值”,那么我该怎么实现呢,按照上面的关系图,假设用户点击了“手机数码分类”下的“手机”,它的类别编号为“14”,那么我可以写出如下SQL语句:

第一步,根据用户选择的类别获取其下的“筛选条件”。

 
  1. select fc.fc_Id,fc.fc_Name from T_FilterCategory as fc
  2. inner join RF_Columns_FilterCategory as cfc on fc.fc_Id = cfc.fc_Id
  3. inner join T_Columns as col on cfc.col_Id = col.col_Id
  4. where col.col_Id = '14'

执行结果如下:

现在我再根据上面的“筛选条件”获取对应的“筛选属性值”:

 
  1. select fa.attr_Id,fa.attr_Name from T_FilterAttributes as fa
  2. inner join RF_FilterCategory_TFilterAttributes as fcfa on fa.attr_Id = fcfa.attr_Id
  3. inner join T_FilterCategory as fc on fcfa.fc_Id = fc.fc_Id
  4. where fc.fc_Id in
  5. (select fc.fc_Id from T_FilterCategory as fc
  6. inner join RF_Columns_FilterCategory as cfc on fc.fc_Id = cfc.fc_Id
  7. inner join T_Columns as col on cfc.col_Id = col.col_Id
  8. where col.col_Id = '14')

结果如下:

看上面红色方框中的“筛选属性值”,像宏碁、华硕、戴尔、Gateway、清华同方等,它们是电脑厂商,而不是手机厂商,然而却出现在手机类别下,这不是有问题吗?

所以这种设计有问题,因为它缺了一张表!这张表就是存储关联表RF_FilterCategory_TFilterAttributes与T_Columns表之间的关系的中间表。为什么要加中间表?因为一个三级类别可以对应多个RF_FilterCategory_TFilterAttributes,而一个RF_FilterCategory_TFilterAttributes又可以被多个三级类别拥有。图示见:顶部 图(1)

于是我继续加表,名曰:RF_Columns_FilterCategory_FilterAttributes,如下图:

然后建立外键关联,如下图:

然后完整的关系图如下:

然后我再次执行上面那个业务,假设用户选择的三级类别的编号为14,我需要获取其下的所以“筛选条件值“,那么SQL语句如下:

 
  1. with t as
  2. (
  3. select FA.attr_Id,FA.attr_Name,CDF.col_Id,CDF.sort from T_FilterAttributes as FA
  4. inner join dbo.RF_FilterCategory_TFilterAttributes as DF on FA.attr_Id = DF.attr_Id
  5. inner join dbo.RF_Columns_FilterCategory_FilterAttributes as CDF on CDF.df_Id = DF.df_Id and CDF.col_Id = '14'
  6. )
  7. select t.attr_Id,t.attr_Name from t
  8. inner join dbo.RF_FilterCategory_TFilterAttributes as DF on t.attr_Id = DF.attr_Id
  9. inner join dbo.T_FilterCategory as FC on DF.fc_Id = FC.fc_Id and FC.fc_Id in
  10. (
  11. select fc.fc_Id from T_Columns as tc
  12. inner join dbo.RF_Columns_FilterCategory as cdc on tc.col_Id = cdc.col_Id
  13. inner join T_FilterCategory as fc on cdc.fc_Id = fc.fc_Id14 where tc.col_Id = '
  14. '
  15. )
  16. 16 order by t.sort

然后就得到如下所有手机类别下的“筛选条件“对应的”筛选条件值“,如下图:

关于商商城商品表设计(二)相关推荐

  1. java电商商品基本信息表,Java生鲜电商平台-商品表的设计

    Java生鲜电商平台-商品表的设计 任何一个电商,无论是B2C还是B2B的电商,商品表的设计关系到整个系统架构的核心. 1. 商品基本信息表:用单词:goods做为商品表 2. 商品分类信息表: 说明 ...

  2. 电商平台-商品表的设计

    任何一个电商,无论是B2C还是B2B的电商,商品表的设计关系到整个系统架构的核心. 1. 商品基本信息表:用单词:goods做为商品表 2. 商品分类信息表: 说明:商品分类信息表存在父子级关系,采用 ...

  3. 商品表设计-实现侧滑栏类目Catagory和商品的多对多关系

    商品表设计-实现侧滑栏类目Catagory和商品的多对多关系 需求描述 手机端展示店铺或商城类页面 -- 一般有个左边侧滑栏(slidebar),一般为类目,也可以称为种类.右边为商品的详情展示.如下 ...

  4. (二)购物商城数据库设计-商品表设计

    大家好,今天我们来设计一下购物商城的商品表. 我们的目标是表结构能够满足下面这张图的搜索: 在设计表之前,我们先来了解下商品中的两个概念:SPU和SKU SPU SPU(Standard Produc ...

  5. 抽奖活动mysql表设计_购物商城数据库设计-商品表设计

    大家好,今天我们来设计一下购物商城的商品表. 我们的目标是表结构能够满足下面这张图的搜索: 在设计表之前,我们先来了解下商品中的两个概念:SPU和SKU SPU SPU(Standard Produc ...

  6. 电商商城-商品模块数据库设计

    文章目录 行业概念介绍 数据库设计 调研的高Star开源作品 行业概念介绍 SPU:标准化产品单元(Standard Product Unit),是商品信息聚合的最小单位,是一组可复用标准化信息的集合 ...

  7. 多用户商城系统商品表设计

    多用户商城系统商品表用于存储商家上架的商品信息. 商品表(wst_goods)   字段名称 字段说明 字段描述 类型 长度 默认 必填 goodsId 自增ID   int 11   是 1 goo ...

  8. 商城数据库表设计介绍

    前言 一个商城系统,需要有,用户表,商品表,商品分类表,购物车表,订单表,订单明细表,支付信息表,以及物流信息表. 使用PowerDesigner对数据表以及他们之间的关系进行了粗略的设计得出了如下E ...

  9. 人气流量通通要!电商网站商品页设计超全面指南

    编者按:今天这篇文章读完后,同学们可以来做一个小练习,根据文章,把优设看做一个电商网站,文章看做商品,来分析一下哪篇文章是热门,有哪些突出的方法,文章里藏有哪些引导用户的细节等等,即学即用,不容易忘, ...

最新文章

  1. 偏依赖图(Partial Dependence Plots)是什么?排列重要性(Permutaion Importance)是什么?如何解读?有什么意义?
  2. 网络推广期间遇到页面无效收录情况网络推广专员如何应对?
  3. python爬虫导入数据库_python爬虫爬下来的数据怎么导入到MySQL
  4. matlab guidata两个,Matlab
  5. Spring boot (5):Spring data jpa 的使用
  6. 创建第一个ArcGIS API for Silverlight应用
  7. 约瑟夫环(简单理解版)
  8. photoShop支持retina显示屏
  9. python使用pywinauto驱动微信客户端实现公众号爬虫
  10. java pem 私钥_将PEM传统私钥转换为PKCS8私钥
  11. 【数学建模】多元线性回归(PythonMatlab代码实现)
  12. ROS功能包|mav_control_rw(基于MPC的无人机轨迹跟踪控制)---gazebo仿真测试
  13. linux socket函数详解,linuxSocket_函数.doc
  14. Echarts官方社区,炫酷的Echarts 基地
  15. python安装出错运行不了_mysql-python安装错误:无法打开包含文件“..._慕课猿问...
  16. 输出倒三角—C语言实现
  17. Class文件结构介绍[访问标志,类索引,父类索引,接口索引集合]
  18. 机器学习算法原理:详细介绍各种机器学习算法的原理、优缺点和适用场景
  19. [DTK学习]deepin,dtk抓取锤子科技SmartisanOs应用重绘图标
  20. linux安装jdk1.7.0-79

热门文章

  1. 多行多列mysql_mysql如何将多行变成多列
  2. 没有伞的孩子才会努力奔跑!
  3. IPFS Java实现
  4. java 方法规范_Java规范推荐
  5. 【转】Android权限获取机制与常见权限不足问题分析
  6. Java程序员兼职平台推荐
  7. 环境污染、空气质量数据集:省/市/县PM2.5浓度、空气流通系数、逆温数据
  8. sql modify的使用方法
  9. bp神经网络分类器c语言,基于BP神经网络的隐写分析分类器设计
  10. 微软 Windows 7的“杀手锏”是智能