我必须创建一个数据库,将存储大量的人及其地址,这些数据必须按地点搜索(即在该城市或其他城市找人)。
我怀疑是否应该将地址中的城市字段保存为简单varchar或创建城市表并引用它,以避免重复的城市名称等。
注意:我正在使用SQL-Server并将通过EF访问数据。
答案 0 :(得分:0)
您当前的设计是否有ADDRESS varchar列,如下所示:?
"101 MAIN STREET, NEW YORK, NY, 10010"
如果是,那么如果你必须按街道,城市,州,邮编或组合进行搜索,那么你的生活会变得复杂。
我建议使用一个ADDRESS表,其中包含STREET,CITY,STATE和ZIP的单独列。这样您就可以单独查询每个。请务必为您使用的每个WHERE子句添加索引。
接下来的问题是进一步规范化是否有用(例如,CITY,STATE,ZIP的单独表格)和JOINing获取地址是否有用。我不确定是否有必要,但你可以尝试一下。
答案 1 :(得分:0)
我假设您的模型看起来像这样:
Address
--------------
Address
City
State
Zip
等
如果是这样,那么就无法消除City
列中某些值的重复。如果您要创建City
表,则城市名称将是自然键的明显选择,这意味着您的City
列的实际数据将保持不变。如果您使用代理键,那么您只需重复该键值而不是城市名称。不过,我不建议使用代理密钥,因为城市名称不太可能改变,而且你会增加额外的间接水平而没有任何好处。
最后,有几个可能保证City
表的潜在方案:
City
的所有值都来自已存储在您的城市列表中的已知值列表。这还允许您向用户显示城市列表,而不仅仅是允许他们以自由格式文本输入数据。如果其中任何一个适用于您,那么,无论如何,创建一个城市表。如果没有,则没有必要。
答案 2 :(得分:0)
权限表 - 一个引用表,其中包含作为权限的“事物”的可能值。例如,国家/地区权限表将包含国家/地区的所有可能值。
根据您对“巨额......”的定义,您肯定会想要一些权限表。 根据您地址的地理范围,部分或全部这些似乎是权限表的良好开端: