数据库设计 – 关于表格设计的问题

我正在为我的用户提供搜索选项.他们可以搜索城市名称.问题是我存储的城市名称是“圣路易斯”之类的东西.但即使用户输入“圣路易斯”或“圣路易斯”,我也希望找到圣路易斯.有关如何创建查找表的任何建议,以某种方式考虑到这一点?

解决方法

创建两个表.

一个包含有关城市的一切.

一个包含一堆城市名称,一个外键将那些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');

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...