闲来无事思考了下电子商务中最常遇到的商品分类表的设计问题,思考结果如下,欢迎大家来评。
商品分类表的设计
1 数据库设计
最常用的2个表,简单字段
1.1 分类表
Code编码规则
第一层2位10-99
其他层3位 100-999
1.2 商品信息表
Keywords字段用于商品的搜索
Belong_category用于点击分类后的商品查找,由于其外键是分类表的code字段,故很容易搜索某个大类下的所有商品,且根据belong_category的值可以很容易的指导该商品属于哪个大类。
2 构造数据
2.1 构造树形的分类测试数据
构造好的数据
代码
private int totalLevel = 5;
private int brotherCount=10;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
@Rollback(false)
public void testSave() {
insertTestData(brotherCount);
}
private void insertTestData(int brotherCount) {
insertFirstLayer(brotherCount);
for (int i = 0; i < brotherCount; i++)
insertOtherLayer(10 + i, brotherCount, 2);
}
private void insertFirstLayer(int brothersCount) {
for (int i = 0; i < brothersCount; i++) {
GoodsCategory first = new GoodsCategory();
first.setName("The first layer" + i);
first.setCode(String.valueOf(10 + i));
first.setParentCode(String.valueOf(0));
this.categoryDao.save(first);
}
}
private void insertOtherLayer(long parent_code, int brothersCount, final int currentLevel) {
int currentLevel_tmp = currentLevel;
if (currentLevel > totalLevel)
return;
logger.debug("parent_code==" + parent_code);
for (int k = 0; k < brothersCount; k++) {
GoodsCategory otherlayer = new GoodsCategory();
long code_tmp = 100;
String current_code = String.valueOf(parent_code) + String.valueOf(code_tmp + k);
otherlayer.setName("The " + currentLevel_tmp + " layer");
otherlayer.setCode(current_code);
otherlayer.setParentCode(String.valueOf(parent_code));
this.categoryDao.save(otherlayer);
insertOtherLayer(Long.parseLong(current_code), brothersCount, currentLevel_tmp + 1);
}
}
@Test
public void testGetAllCategorys() {
// fail("Not yet implemented");
long totalRecordCount=0;
for (int i = 1; i < totalLevel+1; i++) {
totalRecordCount+=Math.pow(brotherCount, i);
}
System.out.println("totalRecordCount========"+totalRecordCount);
List<GoodsCategory> goodCategories = this.categoryDao.getAll();
System.out.println("list size======"+goodCategories.size());
TreeHelper treeHelper = new TreeHelper(goodCategories);
System.out.println("print tree");
//treeHelper.printRoot();
}
3 测试用例
3.1 测试并构造树形
public class TreeHelper {
- TreeData root = new TreeData();
- protected final transient Logger log = LoggerFactory.getLogger(getClass());
-
- public TreeHelper(List<GoodsCategory> goodCategories) {
- buildTree(goodCategories);
- }
-
- public TreeData getRoot() {
- return root;
- }
-
- private void buildTree(List<GoodsCategory> goodCategories) {
- root.setCodes("0");
- root.setName("Root");
- TreeData td_pre = root;
- int codelenth_pre = 0;
- String code_pre="";
- for (GoodsCategory goodsCategory : goodCategories) {
- String code = goodsCategory.getCode();
- int codelenth_current = code.length();
- TreeData td_current = new TreeData();
- td_current.setCodes(code);
- td_current.setName(goodsCategory.getName());
-
- log.info("codelenth_last="+codelenth_pre+" codelenth_current="+codelenth_current);
- log.info("code_pre="+code_pre+" code_current="+code);
-
- if (codelenth_pre < codelenth_current) {
-
- td_pre.addChild(td_current);
- td_current.setParent(td_pre);
- td_pre = td_current;
- code_pre = code;
- }
-
- else if (codelenth_pre == codelenth_current) {
- td_pre.getParent().addChild(td_current);
- td_current.setParent(td_pre.getParent());
- }
-
- else {
- int dilevel = (int) Math.ceil(new Double(codelenth_pre - codelenth_current)/ 3);
- log.info("dilevel="+dilevel);
- for (int i = 0; i < dilevel; i++) {
- td_pre = td_pre.getParent();
- log.info("td_pre code="+td_pre.getCodes());
- }
- code_pre = td_pre.getCodes();
-
- td_pre.getParent().addChild(td_current);
- td_current.setParent(td_pre.getParent());
- td_pre = td_current;
- }
-
- codelenth_pre = codelenth_current;
-
-
相关推荐
可直接导入MySQL数据库,另存为TXT文件后可导入Oracle数据库。
1、商品分类表 2、商品表 3、商品规格表(商品SPU表、商品规格表、商品规格项表、商品规格组合表) 4、商品属性表 5、商品属性值表 6、商品筛选表 7、商品筛选值表 8、用户表 8、评论表 9、购物车表 10、收货地址表 ...
SPU表通常包含商品的基本信息,如商品名称、品牌、分类、市场价等,不涉及具体的库存和价格。SPU与规格值之间的关系通常是多对多,通过关联表实现,这样可以方便地将多个规格值组合成不同的商品版本。 然后是SKU的...
商品类别字段可以使用外键关联到商品类别表,以便进行分类管理。 2. 类别表(Category) 类别表用来管理商品的大类和子类,例如电器、服装、食品等。字段包括类别ID、类别名称、父类别ID(如果允许有层级关系)等。...
"商品与分类数据库设计说明书(前台)" 本文档是关于商品与分类数据库设计的说明书,主要涉及到前台系统的数据库设计。下面是从文档中提取的相关知识点: 一、数据库设计的书写要求 在数据库设计中,需要以模块为...
客户端系统的一大亮点是根据日期自动生成编号,简化了操作,同时也实现了多仓库管理,使得商品分类和仓库分配更为灵活。 用户管理部分设计了一张登陆用户表,包含用户名、密码和权限。用户权限分为三类:系统管理员...
商品管理可能涉及到商品表、分类表、库存表等,需要理解如何设计数据库表结构,以及如何编写高效的SQL查询语句。 4. **MyEclipse集成开发环境**:MyEclipse是用于开发JavaWeb应用的IDE,它集成了代码编辑、调试、...
聚美优品作为知名的美妆电商,其商品分类设计尤为重要,因为它直接影响到用户能否快速找到自己想要的商品。下面我们将深入探讨商品分类的相关知识点。 首先,商品分类是基于商品特性和消费者需求进行的一种逻辑划分...
分类管理的设计应该科学合理,以支持各种商品的归类和展示。 2. 品牌管理:品牌管理是为商品赋予品牌信息的环节。通过品牌管理,可以提高商品的辨识度和品牌效应。 3. 规格管理:规格管理涉及到商品规格的定义,它...
5. `category_id`:分类ID,关联到类别表,方便按类别查找商品。 6. `brand`:品牌名称,有助于用户识别商品来源。 7. `stock`:库存数量,跟踪可售商品数量,避免超卖。 8. `image_url`:商品图片URL,展示商品外观...
2. 责权分工:通常由采购人员主导,各部门协作完成,包括确定货架布局、商品分类、面积分配、价格、排面数、最小订货单位和商品空间位置等。 3. 制作程序:首先进行市场调查,确定销售商品和卖场面积;其次,按商品...
商城项目数据库表设计:有商品spu ,sku设计 ,规格-规格值;分类,品牌,订单,退货,评价
在构建一个商品分类三级联动数据库时,...在设计商品分类三级联动数据库时,不仅要考虑到数据的组织和查询效率,还要关注用户体验,确保分类的清晰性和易用性。这样才能提供一个既功能强大又易于导航的商品分类系统。
在IT行业中,数据库管理和SQL...综上所述,这个商场商品的三级分类系统涉及到数据库设计、SQL查询、数据关系以及性能优化等多个方面的知识点。理解和熟练掌握这些概念对于构建高效、可靠的电商平台至关重要。
2. **网站商品分类菜单导航表**:此模块涉及一级菜单分类表、二级菜单分类表、三级菜单分类表以及店铺的一级和二级菜单表。这些表用于构建网站的商品分类结构,方便用户浏览和查找商品。每个表都有序列号、创建/修改...
HS编码是国际通行的商品分类系统,由World Customs Organization(世界海关组织)制定。该系统将商品分为21个大类,每个大类又可分为更细的子类。 HS编码的主要特点是使用四层次结构,即章、品目、子目和tariff项。...
这个数据库由三张表构成,设计得详尽且全面,总计有2000多条数据,能够支持各种类型的商城系统进行商品分类管理和展示。接下来,我们将深入探讨这个数据库的相关知识点。 首先,我们来了解一级、二级和三级分类的...
完整的商城系统数据结构,有商品spu ,sku设计 ,规格-规格值;分类,品牌,订单,退货,评价