数据库设计(物品属性需要差异化)

举个例子

  商品有很多种,但是每种商品的属性不同(白酒有度数,汽车没有度数),这时靠单独的商品表可能并不好处理,当然靠加字段也能实现但是类型肯定有很多冗余,或许对应类型有限的系统还能应付,但是如果有几百种不同商品,全部加上可能上万的属性这样靠单表就不现实了。

想法

先定义类型,然后定义类型的属性,在添加商品,最后按照定义的属性给商品设值。基本结构如下:
在这里插入图片描述

测试

添加两个商品及数据,这里加两个白酒及相关属性和属性值

g_goods_type
在这里插入图片描述
g_goods_property
在这里插入图片描述
g_goods
在这里插入图片描述
g_goods_property_value
在这里插入图片描述
查询结果

SELECT 
	gg.`id`,
	MAX(CASE ggp.`name` WHEN '名称' THEN ggpv.`value` ELSE NULL END) '名称',
	MAX(CASE ggp.`name` WHEN '容量' THEN ggpv.`value` ELSE NULL END) '容量',
	MAX(CASE ggp.`name` WHEN '度数' THEN ggpv.`value` ELSE NULL END) '度数',
	MAX(CASE ggp.`name` WHEN '厂商' THEN ggpv.`value` ELSE NULL END) '厂商'
FROM `g_goods` gg 
LEFT JOIN `g_goods_property_value` ggpv ON gg.`id`=ggpv.`goods_id`
LEFT JOIN `g_goods_property` ggp ON ggpv.`goods_property_id`=ggp.`id`
GROUP BY gg.`id`;

在这里插入图片描述

小结

  这种表设计不是说就这几个表就可以解决所有问题,具体情况具体分析,比如这种结构查询就不好查,如果扫描数据太多会导致查询慢。这时可能需要借助es之类的系统。
  同时传统结构模型属性和数据库字段是对应的,但是这种方式模型和数据库无法写死对应关系,那么可能需要动态的处理查询结果等数据等等,总之就是需要建立一套规则来处理业务。
  这里只是提供一个想法,具体使用结合项目,尤其是类型数量可预知的系统没有必要使用这种方式,使用这种方式会增加项目的复杂程度,投入产出比不高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值