概观
我正在为加利福尼亚州制作一些紧急服务报告和地图应用程序(有点奇怪,考虑到那里的火灾,现在......).我们需要为内部政府单位绘制人口统计和紧急数据.
我们所拥有的是加利福尼亚州的所有街道,城市和社区.每个邻域也有它的相关shapefile(lat long定义它的边界).这是由美国人口普查局(所有公共领域的东西)网站提供给我们的.
问题
我不确定如何最好地设计数据库表.我们还没有被告知我们需要使用哪种类型的数据库..所以如果有帮助的话,我们愿意接受建议.我们有MS SQL 2005和2008的经验(以及'08中的空间内容).
我们可以拥有以下合法数据.
街道,城市,州
市,州
邻居,州
州
国家是一个合法的位置的原因是因为我们被告知这可能被出售给其他州,所以我们现在需要为此做好计划.
所以,原来,我想到了......
LocationId INTEGER PK身份
Street NVARCHAR(100)
邻居NVARCHAR(100)
城市NVARCHAR(100)
国家NVARCHAR(100)
Latitude VARCHAR(15)
经度VARCHAR(15)
Shape文件
这些都不是可空的,顺便说一下.但过了一会儿,我认为在田野里放置这么多"加州"文字或"圣地亚哥"文字是浪费.所以我通过使邻域,城市和州字段成为他们自己的新表的外键(例如查找)来更改表格以使其更加规范化.并且这两个字段现在是NULLABLE.
所以...一切正常.除非我尝试对它们做一些Sql语句.由于NULLABLE FK,所有这些外连接查询都是一场噩梦:(
如何通过ID链接主表,子查找表(例如,邻域,城市和州),然后将所有这些放在视图中?请记住,NeighborhoodID和CitiyID将是NULLABLE .. ???
我只想看看人们对此的看法以及他们提出建议的原因.我真的很担心和困惑,但渴望学习.
请帮忙!
编辑1:我需要坚持使用RDBMS数据库.
编辑2:我正在考虑使用约束来单个表(去规范化)以保持字段的总和unqiue或多表与主表上的可空FK(例如,位置(主表),邻域,城市,States ...规范化的数据库模式).
编辑3:向样本添加城市,第二个列表.
编辑4:添加了查看问题.