Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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_Data Structures - Fatal编程技术网

Php MySql:映射表还是同一表中的所有数据?

Php MySql:映射表还是同一表中的所有数据?,php,mysql,data-structures,Php,Mysql,Data Structures,我正在从事一个项目,该项目使用一个表将所有餐厅数据存储在同一个表中。 对于包含区域id和区域名称的区域,有一个单独的表 对我来说,有六个领域是问题的根源。 它们是: delivery_area_1 , delivery_area_2, delivery_area_3 minimum_order_1, minimum_order_2 and minimum_order_3 delivery\u area\u 1字段包含一个由所有area\u id分隔的列表,在该列表中,餐厅以最低订单1交付,依此

我正在从事一个项目,该项目使用一个表将所有餐厅数据存储在同一个表中。 对于包含
区域id
区域名称的区域,有一个单独的表

对我来说,有六个领域是问题的根源。 它们是:

delivery_area_1 , delivery_area_2, delivery_area_3
minimum_order_1, minimum_order_2 and minimum_order_3
delivery\u area\u 1
字段包含一个由所有
area\u id
分隔的列表,在该列表中,餐厅以最低订单1交付,依此类推,交付区域2和3

当用户通过
area\u id
进行搜索时,结果包含在该区域交付的所有餐厅,相应的最低订单将与其他详细信息一起显示在结果中

我建议将此交付区域数据移动到一个单独的映射表中,该映射表将包含:

餐厅id、区域id和最低订购量

但这样做将导致映射表中的条目数超过1000000(对于20000家餐厅)。目前有1000家餐厅,但从现在起,数量将迅速增加。每家餐厅的配送区域约为30-80个

这是一个好的举动吗?这将是一个重大决定。所以请帮我解决这个问题

有没有更好的方法来简化和优化搜索


这是一个PHP网站。

简短而简单:,更改它(称为)

一张表中有一百万行只包含3列并不是什么大问题。您可以选择添加两个表,而不是仅添加一个表:

minimum_order (restaurant_id, minimum_order_id, amount)

delivery_area (restaurant_id, area_id, minimum_order_id)

这将为您提供一个优势,即一组区域的数量变化,只需更新
最小顺序的数量,而不是
最小顺序的多行(每个区域一行)
这绝对是一个好的举措。不建议取消数据库规范化以减少行数。这样做有几个不利之处。看起来您当前正在以逗号分隔存储区域Id。在这种情况下,在按区域id搜索时,您无法使用索引。或者,您可能已将“全文索引”用于delivery_area_1、delivery_area_2、delivery_area_3字段

如果行数在增加,那么可以尝试分区技术


请参考

将数据结构正常化,并将逗号分隔的列表作为相关记录存储在另一个表中。太好了。。。在管理和更新数据方面,这是一个更大的进步。。!!谢谢oezi!不客气。如果这解决了你的问题,请考虑接受它(并且,也许,投票),点击它左边的刻度标记。早些时候我没有足够的分数来投票回答…现在我有!!