zoukankan      html  css  js  c++  java
  • (转)商城系统商品属性的数据库设计思路

    http://www.360doc.com/content/12/0513/18/1542811_210764350.shtml

    最近看到一个题目,要求提出一套商品属性相关的数据库设计思路,要求是商品属性的类别(例如品牌,尺寸,颜色...)不确定,各个属性类别的属性值(例如品牌可能是HP,IBM...)不确定,同时需要实现针对不同属性类别的商品检索,例如检索出品牌为XX,尺寸为XX,颜色为XX的商品,各条件为AND操作,另外每个属性类别的条件可能为品牌=XX or 品牌 = YY这样的OR操作,最终实现出类似淘宝商品检索页面那样的功能如下(品牌,裤长等条件为AND关系,品牌中的可以选择多个品牌,为OR关系)

    经过一番思考,数据库设计如下:

    • 属性类别表spec

    spec_id —— 属性类别id

    spec_name —— 属性类别名称

    • 属性值表spec_info

    spec_info_id —— 属性值id

    spec_id —— 属性类别

    spec_info_name —— 属性值名称

    • 商品表goods

    goods_id —— 商品id

    goods_name —— 商品名称

    • 商品属性表goods_spec

    goods_spec_id —— 商品属性id

    goods_id —— 商品id

    spec_info_id —— 商品属性值id

    建立以上4个数据库后,spec表存放的是品牌,颜色,尺码等的属性名,spec_info表存放的是红色,蓝色,HP,IBM等的实际的属性值,再通过goods_spec表将一个商品跟它的属性进行关联,这样要实现类似淘宝的检索功能的SQL语句就可以编写如下:

    假设要检索品牌为IBM或HP(在spec_info表中的spec_info_id 分别为1和2),颜色为红色(在spec_info表中的spec_info_id 为6),尺码为15寸(在spec_info表中的spec_info_id 为5)的商品

    $sql = "select * from goods_spec where spec_info_id = 5 and goods_id in (select goods_id from goods_spec where spec_info_id = 6 and goods_id in (select goods_id from goods_spec where spec_info_id = 1 or spec_info_id = 2));

    PS: 这些商品的搜索都是基于数据库 SQL 的, 可以看出用户选择了几个条件,最终的 SQL 就会有连几张数据库表的 SELECT 查询。 我已经用红色粗体标出 !!

    如果用户选中了 10 个条件, 那么一次搜索将会 10 次 select join (或者子查询) !  

  • 相关阅读:
    FEniCS 1.1.0 发布,计算算术模型
    Piwik 1.10 发布,增加社交网站统计
    淘宝褚霸谈做技术的心态
    CyanogenMod 10.1 M1 发布
    Druid 发布 0.2.11 版本,数据库连接池
    GNU Gatekeeper 3.2 发布
    Phalcon 0.9.0 BETA版本发布,新增大量功能
    EUGene 2.6.1 发布,UML 模型操作工具
    CVSps 3.10 发布,CVS 资料库更改收集
    Opera 移动版将采用 WebKit 引擎
  • 原文地址:https://www.cnblogs.com/telwanggs/p/7205362.html
Copyright © 2011-2022 走看看