Mat*_*wdy 7 database-design full-text-search
我正在为我的用户提供搜索选项.他们可以搜索城市名称.问题是我存储的城市名称是"圣路易斯"之类的东西.但即使用户输入"圣路易斯"或"圣路易斯",我也希望找到圣路易斯.有关如何创建查找表的任何建议,以某种方式考虑到这一点?
创建两个表.
一个包含一个城市的一切.
一个包含一堆城市名称,一个外键将那些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
) ;
Run Code Online (Sandbox Code Playgroud)
然后获取所有名称,首先使用首选名称:
select name from city_names where city_id = ?
order by is_preffered desc, name;
Run Code Online (Sandbox Code Playgroud)
这还有一个额外的好处:如果你没有覆盖每个城市和城镇,你可以使用第二个表格来映射你没有覆盖的城镇/村庄/县到你所在的主要城市:
insert into city_name(city_id, name) values
( $id-for-New-York-City, 'New York'),
( $id-for-New-York-City, 'Manhattan'),
( $id-for-New-York-City, 'Big Apple'),
( $id-for-New-York-City, 'Brooklyn');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |