SQL 2005标准数据类型

时间:2009-09-17 18:58:40

标签: sql sql-server sql-server-2005 tsql types

我正在整理一个位置数据库,以查找给定地址的最近位置。当我开始列出关于我的业务的表时,我想知道其他人在做什么以及是否存在针对某些常见数据类型的“最佳实践”。如电话号码,地址甚至经纬度。

这是我到目前为止所拥有的。有什么建议或改进吗?

这些都应该是美国地址,仅供参考。

 Column          DataType
 ------        ------------
 id            int
 city          nvarchar(100) 
 address       nvarchar(100) 
 address2      nvarchar(100)
 state         varchar(2)
 zip           nvarchar(10)
 phone         nvarchar(14)
 fax           nvarchar(14) 
 name          nvarchar(100)
 latitude      float
 longitude     float
 notes         text

8 个答案:

答案 0 :(得分:3)

我使用varchar(max)或nvarchar(max)而不是text ...我认为TEXT是“老路”

答案 1 :(得分:2)

您的电话号码应该支持更多字符。有了今天的VOIP电话网络,一些从正常电话线转换到VOIP电话线的业务有时会为新的电话分机提供大量电话。

例如,当我想在工作时给我的女朋友打电话时,我必须拨打像

这样的内容

1-888-555-5555 x667833

如果您想要将其删除所有符号(18885555555667833),那么这是17个字符。如果你想允许自由文本(比如 1-888-555-5555请求Bob ),你应该考虑更多的字符。

答案 2 :(得分:2)

我发现使用从hCard microformat借来的名字很有用。其中一些是针对人的,一些是针对地址的,并且它与hCard规范没有按1:1排列,但是,到目前为止,这个子集非常有用:

honorificPrefix    nVarChar(20)
givenName          nVarChar(50)
additionalName     nVarChar(50)
familyName         nVarChar(50)
nickName           nVarChar(50)
honorificSuffix    nVarChar(20)
fn                 nVarChar(50)  -- # Formatted name
email              nVarChar(255)
title              nVarChar(50)
role               nVarChar(50)
organizationName   nVarChar(100)
organizationUnit   nVarChar(100)
streetAddress      nVarChar(100)
extendedAddress1   nVarChar(100) -- # hCard specs support any number of these
extendedAddress2   nVarChar(100) -- # I've not seen a need for more than two.
locality           nVarChar(55)
region             nVarChar(2)
postalCode         nVarChar(20)
postOfficeBox      nVarChar(20)
countryName        nVarChar(50)
phone              nVarChar(25)
fax                nVarChar(25)
latitude           float
longitude          float

经验表明,列出的数据类型和大小已经适用于美国各地的人员和组织的各种目录。但是,我喜欢这里的一些评论,这些评论表明电话号码的数据类型更大。此外,我不相信将纬度和经度存储为漂浮是可行的方式,因此您的milage可能会有所不同。

祝你好运!

答案 3 :(得分:2)

我不会长时间使用float。我已经看到一些非常糟糕的舍入问题,当这样做并且在一个lat长计算中舍入可能会把你放在错误的位置。请改用小数类型并定义所需的位数。

答案 4 :(得分:1)

考虑到你只想要美国地址,我会使用varchar来传真,电话和邮编。您甚至可以将varchar用于city,address和AddressExtra。

如果你要打印地址,你可能需要一些方法来逐行分解,但你只有一列,这可能有点短。

我会将笔记规范化到自己的表中,因此您可以按日期或类型跟踪它们。

你可能想要一个状态,“N”ew,“D”复制,“X”删除,“A”ctive等。

答案 5 :(得分:0)

该数据库将用于哪个行业?

许多行业都有标准可以作为对象,表格和数据类型的设计和实现的指导。

例如,在使用医疗保健和保险信息后,影响我设计的一个标准是“ANSI ASC X12N 837医疗索赔(837)”。

如果您希望从外部系统导入或导出信息,我会使用行业标准作为指导。

答案 6 :(得分:0)

我不会那么大胆地​​称这些最佳实践,但是我在这里学到了很多建议:

  • 常规:在此处使用nvarchar over varchar。跳过的栏目没问题。
  • id :我更喜欢在这里使用uniqueidentifier。可能需要在不同的表格中保持其唯一性。使用newsquentialid()并在其上创建聚集索引。
  • 地址:设置其中三个。
  • :更改为更像中性的内容,并将其更改为nvarchar(100)。理想情况下,将此更改为territoryId(uniqueidentifier)并使用另一个表来保存这些内容。
  • zip :更改为postalCode并将大小增加到20。
  • 手机:将大小增加到50.我发现最好不要尝试打破验证,除非你真的有充分理由并计划使用它。
  • 传真:与手机相同
  • 备注:将此更改为nvarchar(max),这样您就不会遇到任何限制。

答案 7 :(得分:0)

我从未想过如何“评论”而不是“回答”

但是我没有关注有关lat / long的舍入问题的警告。圆形到四个十分位置的度数是两米以下的最大误差。如果你在两米之外,你会迷路吗?如果是这样,那么没有GPS设备可以帮助你。

虽然如果您使用谷歌地图使用的任何地址将地址转换为纬度/经度,您可能会被阻止。