搜索
首页后端开发php教程请问关于商品标签的数据库设计及多层关联逻辑?

普通的一个商品对应多个标签的设计只需要3个表(商品表、标签表、关联表)就能解决,我这个情况有些复杂,烦请各位知友帮我出出主意

简单介绍下背景,项目是一个第三方展览平台,就是本身不做展览,但负责联通展品、参展人、品牌方、展馆、展览会的这么一个平台,类似中介这样的。参展人或品牌方可以在上面提交自己的展品;有空余场地的人也可以在上面出租自己的场地作为展馆;然后就凑在一起举办展览会。也许我这么说有些莫名其妙,大家不要在意,有协议在身我也不好再细说下去了。

按照目前的需求,上传展品时允许自定义标签,不限数量。参展人和品牌方本身不带标签功能,而是通过“参展人(品牌方)-展品-标签”的方式关联,也就是说参展人的标签取决于他上传的所有展品的标签,品牌方同理。
而展览会本身也不带标签功能,通过“展览会-参展人-展品-标签”的方式关联。展览会有开始时间和结束时间两个字段,超过结束时间则视为展览结束。

问题来了,需求是在展览会列表中,根据标签筛选;而且未参展的标签不显示。

我顿时就懵逼了,按照这个需求,我得先找出所有正在展出的展览会(即已开始且未结束)的参展人或品牌方,然后查出他们所有的展品,然后查出这些展品所有的标签, 然后去除重复的,最后显示。这在未来数据量大了之后将会多么恐怖

我不知道是这个需求本身就不合理,还是说其实有很好的解决办法但我想不到。请各位知友不吝赐教

补充一下,由于对方的一些限制,无法使用诸如redi、memcache、mongodb之类的,只能用mysql

回复内容:

普通的一个商品对应多个标签的设计只需要3个表(商品表、标签表、关联表)就能解决,我这个情况有些复杂,烦请各位知友帮我出出主意

简单介绍下背景,项目是一个第三方展览平台,就是本身不做展览,但负责联通展品、参展人、品牌方、展馆、展览会的这么一个平台,类似中介这样的。参展人或品牌方可以在上面提交自己的展品;有空余场地的人也可以在上面出租自己的场地作为展馆;然后就凑在一起举办展览会。也许我这么说有些莫名其妙,大家不要在意,有协议在身我也不好再细说下去了。

按照目前的需求,上传展品时允许自定义标签,不限数量。参展人和品牌方本身不带标签功能,而是通过“参展人(品牌方)-展品-标签”的方式关联,也就是说参展人的标签取决于他上传的所有展品的标签,品牌方同理。
而展览会本身也不带标签功能,通过“展览会-参展人-展品-标签”的方式关联。展览会有开始时间和结束时间两个字段,超过结束时间则视为展览结束。

问题来了,需求是在展览会列表中,根据标签筛选;而且未参展的标签不显示。

我顿时就懵逼了,按照这个需求,我得先找出所有正在展出的展览会(即已开始且未结束)的参展人或品牌方,然后查出他们所有的展品,然后查出这些展品所有的标签, 然后去除重复的,最后显示。这在未来数据量大了之后将会多么恐怖

我不知道是这个需求本身就不合理,还是说其实有很好的解决办法但我想不到。请各位知友不吝赐教

补充一下,由于对方的一些限制,无法使用诸如redi、memcache、mongodb之类的,只能用mysql

这样的需求用关系数据库实现再合适不过了。
根据你的描述,参见如下数据模型:
请问关于商品标签的数据库设计及多层关联逻辑?

根据Tag查询Exhibition:

<code>SELECT e.GalleryId, e.StartTime, e.EndTime
FROM Exhibition e
WHERE EXISTS (
    SELECT 1
    FROM PresentedProduct p
    JOIN ProductTag pt ON pt.ProductId = p.ProductId
    WHERE TagId = 'T1' AND p.GalleryId = e.GalleryId AND p.StartTime = e.StartTime
    )</code>

我对具体需求不太了解,所以你需要根据具体情况设计数据模型。
在逻辑设计的阶段,不要考虑物理实现,数据量等问题,而是要忠于需求,设计出符合逻辑的逻辑数据模型。
在物理实现时,根据需求建索引,甚至分表,等等。
不要过早优化。

以下是个人观点:

  1. 慎用人工Id (Surrogate Key)
    如果每个表都用一个人工Id,很难分析出符合逻辑的数据模型,数据完整性也得不到保证,而且一个查询往往需要很多JOIN。

  2. 数据量
    关系数据库的处理能力是很强的,对于几百万级别的表,只要索引设好了,返回相对少量的数据是很快的。如果需要返回的数据量也大,那你不管怎么设计都需要花费很多时间。不要把你的项目想象成google或者亚马逊,那样的话大部分团队根本没时间,也没能力开发出来。即使项目真的很成功,到时再重构也来得及。把经典的关系数据库学好了,足够应付大部分项目。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用