使用MySQL数据库。
我有一张商店桌。商店表至少有80,000条记录。用户可以通过从下拉列表中选择郊区来搜索商店表。我最好创建一个郊区表(见下文)并在商店表中搜索郊区ID或将其保存为商店桌上的文本匹配?
Store
- id
- name
- suburb_id
Suburb
- id
- name
我猜测使用store_id外键,我可以创建并索引吗?
答案 0 :(得分:1)
您可能最好按照建议创建suburb
表。这里的数据库规范化最佳实践是将suburb_id
与store
记录一起存储。如果它是一个整数id,即使包含CHAR()/VARCHAR()
列的索引被编入索引,你也可能比依赖文本匹配获得更好的性能。
规范化suburb
表格,在查询时也会带来一些额外的好处。如果您曾向id, name
表添加其他列(仅suburb
除外),则可以通过JOIN
查询具有不同郊区属性或聚合的商店。 (并不是说你的最终用户需要这个,但你可以使用它)
例如,每个郊区有多少家商店? (您也可以使用文本字段执行此操作)
SELECT
Suburb.name,
count(*) as numstores
FROM Store LEFT JOIN Suburb ON Store.suburb_id = Suburb.id
GROUP BY Suburb.name
或者,如果您将人口添加到您的郊区表中,哪些商店位于郊区,请访问popultaion> 40000.您无法在Store
表中单独使用文本字段执行此操作。
SELECT
Store.id,
Store.name
From Store JOIN Suburb ON Store.suburb_id = Suburb.id
WHERE Suburb.population >= 40000
如果您希望存储用户的郊区偏好以供以后使用,则规范化也会有所帮助。假设您在Users
表中添加一列作为Suburb.id
的外键引用。利用ON DELETE SET NULL
外键操作,如果从数据库中删除了更改的郊区,则可以立即反映在用户的首选项中。
答案 1 :(得分:0)
第一个选项更适合规范化,因为如果郊区名称更改
,则不必更新许多记录