mysql商品规格设计_[电商]我的商品规格设计思路

这部分的设计必然少不了会有商品、货品、规格、规格值表。

先说下我对四个表之间关系设计:

商品与货品是一对多的关系。

规格与规格值是一对多的关系。

就这两种关系,关系很清晰,其实我刚开始的设计是这样的:

商品与货品是一对多的关系。

规格与规格值是一对多的关系。

商品与规格是多对多的关系。

商品与规格之间的中间表与规格值是多对多的关系。

货品与规格值是多对多的关系。

五种关系,看着都让人头疼,而这还是简单的情况下,比如客户要求商品发布时规格值名字是可手动修改的,那这时我们的"商品与规格之间的中间表与规格值是多对多的关系"就要修改它们的中间表了(中间表新增名称字段)。

真是剪不断,理不乱,我想了想于是决定使用字符串来保持它们之间的关系("保持它们之间的关系"可能说成"保存我方需要的对方的数据"更合理)。

让原本的规格与规格值表与商品表不直接关联(想象下规格就是规格,只是供商品发布时做为选项而存在的,而商品只是需要规格来完善自己,商品完善后规格的生和灭(从数据库中删除)与我无关了,这感觉很合理很正常),而是使用json字符串保存用户所想要的规格数据,货品表也一样,不再与规格值关联,而是选择使用json字符串。

这么一来就得到刚开始说的那种只有两种关系了,下面说下商品与货品:

假设我们的商品规格是这样一个字段为productSpecs的json:[{id:0,name:颜色,solr:0,specValues:[{id:0,name:蓝色,pic:blue.jpg},{id:1,name:红色,pic:red.jpg}]},{id:1,name:尺码,solr:1,specValues:[{id:2,name:10},{id:3,name:20}]}]

假设我们的货品1规格值是这样一个goodsKeys的json:[{id:0},{id:2}],货品2规格值是这样一个json:[{id:0},{id:3}]

当用户浏览商城主页点击一个商品查看商品详情时,后台会查询对应的商品数据展示到详情页,别的数据就不说了,就说规格选项那块,比如选项如下表:

颜色

蓝色

红色

尺码

10

20

说下面之前,我们可以先想象一下每一个货品都有一把锁(goodsKeys),等待着用户去解锁,而解锁的钥匙都在商品那里(productSpecs)。

关于上面那个表是如何出现的呢?假设我用JavaScript代码写个案例给你们看下:

//var productSpecs= [{id:0,name:颜色,solr:0,specValues:[{id:0,name:蓝色,pic:blue.jpg},{id:1,name:红色,pic:red.jpg}]},{id:1,name:尺码,solr:1,specValues:[{id:2,name:10},{id:3,name:20}]}]/*for(var i=0;i

productSpecs[i].id;

productSpecs[i].name;

for(var j=0;j

productSpecs[i].specValues[j].id;

productSpecs[i].specValues[j].name;

productSpecs[i].specValues[j].pic;

}

}*/

上面的代码我只写了取数据的部分,是因为这个编辑器不方便编码,其实只要取到了 数据,生成表格就很简单了,实际开发中这块应该是在动态页面中处理完成的,动态页面一般都有遍历列表的方式,比如jsp中的jstl等。

表格选项生成了,也梳理通了逻辑,那么剩下的其实很简单了,比如用户选择颜色:蓝色,尺码:10的一个货品,颜色蓝色id是0,尺码10id是2,那么我们后台就去货品表里查找goodsKeys相匹配的货品,通过比较我们发现货品1是匹配的,因为它的goodsKeys是[{id:0},{id:2}],那么我们把货品1的数据展示到页面即可。

怎么样,思路是不是清晰了,也许我的思路是错的,但是功能能够实现是最重要的。

如果你有更好的方式,请推荐给我,谢谢。

商品发布规格组合算法部分可参考这个:商品发布规格组合算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冒泡排序及简单优化

普通冒泡排序&#xff1a; //Wecccccccc //2021.1.6 #include <iostream> using namespace std;int main() {int n, a[100];cin >> n;for (int i 0; i < n; i) {cin >> a[i];}for (int i 0; i < n - 1; i) {for (int j 0; j < n - 1; j) {if (a…

【2019总结篇】谈谈数字化时代,ERP如何坐稳数字化底座

源宝导读&#xff1a;面向未来&#xff0c;信息化、在线化、智能化&#xff0c;开放应该是数字化转型的核心要素&#xff01;本文将重点介绍2019年明源云ERP开放平台在推进数字化转型中的核心技术层面的实践成果。一、前言面向未来&#xff0c;信息化、在线化、智能化&#xff…

rjdbc读取mysql_R通过RJDBC连接外部数据库 (转)

1、library(RJDBC)drvconnlibrary(RJDBC)drvconn3、 连接sas的spdslibrary(RJDBC)drvconn dbSendUpdate(conn,"LIBNAME DEMO SASSPDS schemademoschema USERdemo PASSWORD{sas001}ZM0 HOST127.0.0.1 Serv5000") #注释&#xff1a;dbSendUpdate可以执行所有的sql语…

斐波那契数列及其优化

菲波那契数列定义为&#xff1a;f(1) 1; f(2) 1; 当n>2时&#xff0c;f(n) f(n-1) f(n-2)&#xff0c;输入n&#xff0c;求菲波那契数列的第n项。要求&#xff1a;用递归函数求菲波那契数列的第n项。 1.递归 代码如下&#xff08;未优化&#xff09;&#xff1a; //We…

dotNetCore操作Redis(含CentOS7哨兵模式部署)

现在说到使用缓存中间件基本就是 Redis 了&#xff0c;通常开发环境或测试环境部署一个单机版就可以运行了&#xff0c;但要上生产环境还需要进行高可用的方式来部署&#xff0c;本文说说在 CentOS7 中 Redis 高可用的部署以及在 dotNetCore 中怎样调用。环境CentOS&#xff1a…

php和mysql一键安装包_iis+php+mysql一键安装教程和安装包

导读&#xff1a;iis上mysqlphp一键安装 很多用vps的朋友&#xff0c;在windons系统iis上配置mysqlphp环境的时候都非常的头痛&#xff0c;过程非常复杂和麻烦&#xff0c;所以我们推荐大家用mysqlphp一键安装包&#xff1a; 1、下载mysqlphp一键安装包&#xff0c;安装包下载地…

埃氏筛法(素数筛选)

代码如下&#xff1a; //Wecccccccc //2021.1.6 #include <iostream> using namespace std; int vis[100000]; //0为素数&#xff0c;1为不是素数 int main() {int maxn;cin >> maxn;vis[0] vis[1] 1;//0,1都不是素数&#xff0c;所以赋值为1for (int i 2; i &…

程序员过关斩将--自定义线程池来实现文档转码

背景我司在很久之前&#xff0c;一位很久之前的同事写过一个文档转图片的服务&#xff0c;具体业务如下&#xff1a;1. 用户在客户端上传文档&#xff0c;可以是ppt&#xff0c;word&#xff0c;pdf 等格式&#xff0c;用户上传完成可以在客户端预览上传的文档&#xff0c;预览…

mysql开启gtid dump_mysqldump关于--set-gtid-purged=OFF的使用

数据库的模式中我开启了gtid&#xff1a;mysql> show variables like %gtid%;---------------------------------------------| Variable_name | Value |---------------------------------------------| binlog_gtid_simple_recovery | ON || enforce_gtid_consistency | O…

with grant option mysql_mysql用户及权限(WITH GRANT OPTION)

添加用户授权方法一&#xff1a;create user userip identified by password;grant SELECT on op_db.* to userip with grant option;flush privileges;添加用户授权方法二&#xff1a;grant SELECT on op_db.* to userip identified by password with grant option;flush priv…

2019年Linux与开源如何统治技术圈

2019 年&#xff0c;Linux 与开源疯狂发展&#xff0c;ZDNet 专栏作者 Steven J. Vaughan-Nichols 梳理了 5 个年度大事件&#xff0c;从中我们可以看出来技术的未来还是属于 Linux 和开源软件的。1、IBM 以 340 亿美元收购 Red Hat排名第一的是 IBM 收购 Red Hat&#xff0c;这…

Jira更换mysql数据库_JIRA6.0更换数据库到MYSQL

JIRA更换数据库方法说明&#xff1a;jira自带数据库是HSQL&#xff0c;为内存数据库&#xff0c;当数据量比较大时&#xff0c;其性能会有问题&#xff0c;所有将其改为mysql1、准备环境mysql安装程序&#xff1a;mysql-essential-5.0.87-win32.msimysql驱动程序&#xff1a;my…

UnitTest in .NET(Part 4)

Photo &#xff1a;Unit Test in Visual Studio文 | Edison Zhou上一篇我们学习了如何使用模拟对象进行交互测试。这一篇我们则会进一步使用隔离框架支持适应未来和可用性的功能。为何使用模拟框架&#xff1f; 对于复杂的交互场景&#xff0c;可能手工编写模拟对象和存根就会变…

mysql数据库备份总结_MySQL数据库备份总结

一个企业的正常运行&#xff0c;数据的完整性是最关键的&#xff1b;所以我们需要在工作中要很熟练的掌握数据的备份与恢复方法&#xff1b;下面是对Mysql数据库备份的三种方法总结&#xff0c;希望对大家会有所帮助备份开始前的工作环境准备&#xff1a;1、创建用于保存二进制…

Xamarin.Forms弹出对话框插件

微信公众号&#xff1a;Dotnet9&#xff0c;网站&#xff1a;Dotnet9&#xff0c;问题或建议&#xff0c;请网站留言&#xff1b;如果您觉得Dotnet9对您有帮助&#xff0c;欢迎赞赏。Dotnet9.com内容目录实现效果业务场景编码实现本文参考源码下载1.实现效果弹出动画 2.业务场景…

Pycharm安装第三方库

转载地址&#xff1a; https://www.cnblogs.com/bwjblogs/p/12839463.html 今晚想安装一些第三方库但是pip版本低&#xff0c;安装一直报错&#xff0c;输入升级的命令也一直不行。于是在pycharm上安装&#xff0c;但是还是一直失败&#xff0c;下面提出解决办法。 然后在搜索…

Python中Numpy库中的Numpy常量

import numpy as np 自然对数&#xff1a; np.e e 2.71828182845904523536028747135266249775724709369995… 圆周率&#xff1a; np.pi pi 3.1415926535897932384626433… &#xff08;正&#xff09;无穷大: np.inf Inf&#xff0c;Infinity&#xff0c;PINF 和 infty 是…

CAP 3.0 版本正式发布

前言大家好&#xff0c;我们很高兴宣布 CAP 发布了 3.0 版本正式版。自从上次 CAP 2.6 版本发布 以来&#xff0c;已经过去了几个月的时间&#xff0c;关注的朋友可能知道&#xff0c;在这几个月的时间里&#xff0c;也发布了几个预览版的 3.0 版本的NuGet包。3.0 是一个主要版…

mysql字符集变为gbk_MYSQL数据库默认latin1字符集转换为GBK或UTF8

可以采用下面的方法latin1字符集转换为gbk字符集或utf8字符集。具体的转换步骤如下&#xff1a;一、latin1转gbk1、导出数据库mysqldump --default-character-setlatin1 -h 数据库连接ip -u root -P 3306 -p数据库密码 db_name table_name > /usr/home/test/table_name.sql2…

微服务统计,分析,图表,监控一体化的HttpReports项目在.Net Core 中的使用

简单介绍HttpReports 是 .Net Core 下的一个Web项目, 适用于WebAPI&#xff0c;Ocelot网关应用&#xff0c;MVC项目&#xff0c;非常适合针对微服务应用使用&#xff0c;通过中间件的形式集成到您的项目中&#xff0c;可以让开发人员快速的搭建出一个 数据统计&#xff0c;分析…