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

时间:2012-05-09 08:56:43

标签: 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 and the minimum order

但这样做会导致映射表中的条目数量超过20,000个餐厅的1000,000。目前有1000家餐厅,但这一数字将从现在开始迅速增加。每家餐厅提供约30-80个区域。

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

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

它是一个PHP网站。

2 个答案:

答案 0 :(得分:2)

简短而简单:,改变它(这称为database normalization)。

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

minimum_order (restaurant_id, minimum_order_id, amount)

delivery_area (restaurant_id, area_id, minimum_order_id)

这将为您提供优势,即一组区域更改的金额,只需更新minimum_order的金额,而不是minimum_order上的多行(每个区域一个)。 / p>

答案 1 :(得分:0)

这绝对是一个好举措。不建议对数据库进行反规范化以减少行数。这样做有几个缺点。目前您似乎正在存储区域ID逗号分隔。在这种情况下,按区域ID搜索时无法使用索引。或者您可能已经为delivery_area_1,delivery_area_2,delivery_area_3字段使用了“全文索引”。

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

请参阅http://dev.mysql.com/tech-resources/articles/partitioning.html