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!不客气。如果这解决了你的问题,请考虑接受它(并且,也许,投票),点击它左边的刻度标记。早些时候我没有足够的分数来投票回答…现在我有!!