php - MySql:映射表或同一个表中的所有数据?

标签 php mysql data-structures

我正在开发一个项目,该项目使用一个表将所有餐厅数据存储在同一个表中。 区域有一个单独的表,其中包含 area_idarea_name

有六个字段对我来说是问题的根源。 他们是:

delivery_area_1 , delivery_area_2, delivery_area_3
minimum_order_1, minimum_order_2 and minimum_order_3

delivery_area_1 字段包含以逗号(',') 分隔的所有 area_id 列表,其中餐厅以最低订单 1 进行送货,以此类推,对于送货区域 2和 3。

当用户按area_id搜索时,结果包含在该area_id内提供外卖的所有餐厅,并且相应的最低订单将与其他详细信息一起显示在结果中。

我建议将此送货区域数据移至单独的映射表,其中将包含:

restaurant_id、area_id 和最低订单

但是这样做会导致 20,000 家餐厅的映射表中的条目数量超过 1000,000 个。目前有1000家餐厅,但今后数量将迅速增加。每家餐厅的配送范围约为 30-80 个区域。

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

是否有更好的方法来简化和优化搜索?

它是一个 PHP 网站。

最佳答案

简短:,更改它(这称为 database normalization )。

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

minimum_order (restaurant_id, minimum_order_id, amount)

delivery_area (restaurant_id, area_id, minimum_order_id)

这将为您带来优势,即一组区域的金额发生变化,只需更新 minimum_order 处的金额,而不是 minimum_order 处的多行(每个区域一个) .

关于php - MySql:映射表或同一个表中的所有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512828/

相关文章:

PHP:几分钟前,几秒钟前:编码正确吗?

php - 如何使用骨架项目 'Application' 模块中的错误处理程序来捕获事件回调中的错误?

java - Java Netbeans中的JFrame中的数据未更新

c - 为什么我在删除节点时出现段错误?

php - 如何创建具有多个命名空间的 PHP SOAP 请求

javascript - 使用 PHP 提供 Javascript : Return/Echo URL/URI

mysql - 打印数据库表的状态

python - mysql 和 python 中的多线程

java - 如何通过删除边缘将一棵树切成两半?

c++ - 物理 vector 表示