繁体   English   中英

用于地址和本地化的SQL表

[英]SQL table for Address and Localization

我需要在数据库中保存位置和人员列表,包括其地址和纬度/经度。 有时我只有一个地址,而其他地方只有纬度/经度。 所以我有:

create table dbo.Persons (
  Id int identity not null primary key clustered (Id),      
  AddressId int not null,   
  Name nvarchar (100) null,
  Localization geography null
)

create table dbo.Places (
  Id int identity not null primary key clustered (Id),      
  AddressId int not null,   
  Name nvarchar (100) null,
  Localization geography null
)

create table dbo.Addresses (
  Id int identity not null primary key clustered (Id),      
  CityId int not null,
  Street nvarchar (100) null,
  PostalCode nvarchar (100) null,
)

create table dbo.Cities (
  Id int identity not null primary key clustered (Id),      
  Name nvarchar (100) null
)

我有两个问题:

  1. 我应该将本地化从地点和人员转移到地址吗? 我这样做是因为我可以有一个地址,而不是本地化地址,反之亦然。

  2. 有没有办法改善我的数据库方案?

我将从“个人”中删除“本地化”。 它存在于地方中。

您说一个人可能有一个地址,一个本地地址,或者两者都没有? 如果是这样,则使Persons.AddressID可为空(如果没有地址有效)。 另外,将一个PlacesID(可空)添加到Persons中。

您的数据库模型对我来说很好。 作为唯一的AddressIdPersonsPlaces必须为空。 正如您所说,您将永远只有一个地址或纬度/经度,这似乎很完美。 但是,您应该在“ Persons和“ Places上都添加检查约束,以确保不要同时填写两个字段。

但是,如果您认为可能需要一段时间才能存储一个人或某个地方的地址和纬度/经度,则需要将Localization移至地址,因为Localization是其中不可或缺的一部分。 如果您保持数据模型不变,则通过更改地址而不更改相应的本地化可能会导致不一致(反之亦然)。 当然,在将本地化地址移动到地址时, cityid将其cityid设置为可空值,因为您可能拥有仅由纬度/经度组成且城市未知的“地址”。

关于整体设计:人与地方之间会有很大不同吗? 到目前为止,它们包含相同的列。 因此,您可能只想使用一个表PersonOrPlace,并添加一个类型列,说明条目是人还是地方(或者带有标志IsPerson)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM