Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL数据库;最佳模式_Php_Mysql_Filter - Fatal编程技术网

Php MySQL数据库;最佳模式

Php MySQL数据库;最佳模式,php,mysql,filter,Php,Mysql,Filter,我有一个关于某个网站的数据库模式的问题,人们可以在这个网站上买卖东西 当有人将广告添加到数据库中时,他将选择类别并填写属于所选类别的过滤器,因此任何人都可以通过浏览类别并选择以下过滤器轻松找到他的广告: [蓝牙]是的 [摄像头]300-500万像素 等等 在数据库中存储这些过滤器的最佳方式是什么?这就是我到目前为止所做的: 这只是一个想法,但它永远不会将滤镜百万像素的值在3到5之间发送回广告,因为滤镜的值是VARCHAR类型。我会使用以下表格: 广告 过滤器名称类别只是过滤器之一 过滤值 ad和

我有一个关于某个网站的数据库模式的问题,人们可以在这个网站上买卖东西

当有人将广告添加到数据库中时,他将选择类别并填写属于所选类别的过滤器,因此任何人都可以通过浏览类别并选择以下过滤器轻松找到他的广告:

[蓝牙]是的

[摄像头]300-500万像素

等等

在数据库中存储这些过滤器的最佳方式是什么?这就是我到目前为止所做的:


这只是一个想法,但它永远不会将滤镜百万像素的值在3到5之间发送回广告,因为滤镜的值是VARCHAR类型。

我会使用以下表格:

广告 过滤器名称类别只是过滤器之一 过滤值 ad和筛选器值之间的关联
以任何您喜欢的方式存储它,但为了基于这些过滤器的高效查询,请设置Solr并使用分面搜索。

根据我的说法,该设计工作得很好,我很好奇为什么您在联接表中包括一个额外的id字段,例如在广告和类别之间。我想你可以不用它们。总体而言,设计相当不错,因为它允许您在以后对基础表(例如广告)进行更改


另一件事是什么是过滤值?为什么不能放在filters表中?

您是否考虑过另一个表,filter\u value\u列表,其中包含列id、filter\u id和value?此表将包含一个VARCHAR答案列表,该列表将以下拉列表的形式提供给用户,用于链接到所放置广告类别的每个过滤器

对于蓝牙过滤器,可能的值是“是”和“否”。对于摄像头过滤器,可能的值可能小于100万像素、1或2百万像素、3至5百万像素、5至10百万像素、超过1000万像素,我们正在为未来的技术进行规划

优点:

用户选择答案,而不是键入答案

保证您的系统能够理解每个过滤器

所有广告的一致性

可能的值列表也可以在添加/删除过滤器侧栏中使用,就像您现在在许多网站上看到的那样


这不是很有帮助。这只会引出更多的问题。我想你是对的。这不是答案。这只是以后的一个好建议。我将对其进行编辑,以包含实际答案。该模式图看起来很漂亮。我可以问一下您使用哪个程序来创建它吗?它被称为WWW-SQL-Designer,一种在线工具:单列主键使前端编程变得更加容易。filter_值是发布广告的人员指定的值,用于描述正在发布的单个项目。我放在网站上的摄像头可能有蓝牙功能,但你的可能没有。嘿,拉里,谢谢你的评论!所以,您所说的是:不会有像INT和VARCHAR这样的特定类型的过滤器值,而只会有VARCHAR。你是对的,它有四个优点。但是,由于人们只能选择300万到500万像素,因此必须在描述中添加精确的百万像素数值,例如3.2MP。在广告页面上添加一个滑块并不像以前那么容易,在这里你可以选择2-8或6-8像素的产品。当然,这不仅仅是关于百万像素;所以,谢谢你的想法,但也许还有更好的:]是的,用户确实不能添加随机值。但是,如果愿意,可以为所有常用分辨率创建值,而不是使用范围。重要的是答案是否总是符合定义的类别对你来说更重要。