我正在为我的用户提供搜索选项.他们可以搜索城市名称.问题是我存储的城市名称是“圣路易斯”之类的东西.但即使用户输入“圣路易斯”或“圣路易斯”,我也希望找到圣路易斯.有关如何创建查找表的任何建议,以某种方式考虑到这一点?
解决方法
创建两个表.
一个包含有关城市的一切.
一个包含一堆城市名称,一个外键将那些naes与第一个表的id相关联.所以你在city和city_names之间有一对多的关系.
现在唯一的问题是区分每个城市的一个名称,即首选名称.我们可以通过以下两种方式实现:1)第一个表可以有一个到第二个表的fk,它保存为首选名称的id.但是,这会产生循环依赖.更好的是,2)只需在第二个表is_preffered中添加一个布尔/位列.
create table city (id not null primary key,other columns ) ; create table city_name ( id not null primary key,city_id int references city(id),name varchar(80),is_preferred bool ) ;
select name from city_names where city_id = ? order by is_preffered desc,name;
这还有一个额外的好处:如果你没有覆盖每个城市和城镇,你可以使用第二个表格来映射你没有覆盖的城镇/村庄/县到你所在的主要城市:
insert into city_name(city_id,name) values ( $id-for-New-York-City,'New York'),( $id-for-New-York-City,'Manhattan'),'Big Apple'),'Brooklyn');