Стандартные типы данных SQL 2005 - PullRequest
2 голосов
/ 17 сентября 2009

Я собираю базу данных местоположений для поиска ближайших местоположений по заданному адресу. Когда я начал накрывать на стол, занимаясь своими делами, я задумался о том, что делают другие люди и существуют ли «лучшие практики» для некоторых распространенных типов данных. Такие как номера телефонов, адреса и даже широта и долгота.

Это то, что я имею до сих пор. Есть предложения или улучшения?

Все это должны быть адреса США, к вашему сведению.

 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 ]

3 голосов
/ 17 сентября 2009

Я бы использовал varchar (max) или nvarchar (max) вместо текста ... Я думаю, что TEXT - это "старый способ"

2 голосов
/ 18 сентября 2009

Я бы не использовал float для lat long. Я видел некоторые очень плохие проблемы с округлением, когда это было сделано, и округление в длинных вычислениях может поставить вас в неправильное место. Вместо этого используйте десятичный тип и определите количество мест, которое вам нужно.

2 голосов
/ 18 сентября 2009

Я считаю полезным использовать имена, заимствованные из микроформата hCard . Некоторые из них предназначены для людей, а некоторые для адресов, и они не совпадают 1: 1 со спецификацией hCard, однако это подмножество было довольно полезно до сих пор:

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

Опыт показывает, что перечисленные типы и размеры данных хорошо зарекомендовали себя во многих различных каталогах людей и организаций в США. Тем не менее, мне нравятся некоторые комментарии, которые предлагают больший тип данных для телефонных номеров. Кроме того, я не уверен, что хранение широты и долготы в качестве поплавка - это путь, по которому ваш пробег может варьироваться.

Удачи!

2 голосов
/ 17 сентября 2009

Ваш номер телефона должен поддерживать больше символов. В сегодняшней телефонной сети VOIP некоторые компании, которые переходят от обычной телефонной линии к телефонной линии VOIP, иногда дают новому добавочному номеру телефона большое число.

Например, когда я хочу позвонить своей девушке на работу, я должен набрать что-то вроде

1-888-555-5555 x667833

Это 17 символов, если вы хотите сохранить его без всех символов (18885555555667833). Если вы хотите разрешить свободный текст (например, 1-888-555-5555, попросите Боба ), вам следует рассмотреть больше символов.

1 голос
/ 17 сентября 2009

Учитывая, что вам нужны только адреса в США, я бы пошел с varchar для факса, телефона и почтового индекса. Вы можете даже использовать varchar для города, адреса и AddressExtra.

Если вы собираетесь напечатать адрес, вам может понадобиться какой-нибудь способ разбить его на строку, но у вас есть только один столбец, который может быть немного коротким.

Я бы нормализовал заметки в своей таблице, чтобы вы могли отслеживать их по дате или типу.

вам может потребоваться статус, «N», «D», «X», «A» и т. Д.

0 голосов
/ 05 августа 2010

Я никогда не понимал, как «комментировать» вместо «ответа»

Но я не слежу за предупреждением о проблемах округления с широтой / долготой. Градусы, округленные до четырех знаков децимла, - максимальная погрешность менее двух метров. Вы потерялись, если вы в двух метрах? Если это так, то никакое устройство GPS никогда не поможет вам.

Хотя, если вы используете все, что Google Maps использует для преобразования адреса в широту / долготу, вы можете оказаться в одном квартале.

0 голосов
/ 18 сентября 2009

Я не был бы настолько смелым, чтобы называть эти лучшие практики, но вот мои усвоенные советы:

  • Общее : используйте nvarchar поверх varchar везде здесь. Пропущенные столбцы в порядке.
  • id : Я предпочитаю использовать уникальный идентификатор здесь. Может возникнуть необходимость сохранить его уникальность в разных таблицах. Используйте newsquentialid () и создайте кластерный индекс для него.
  • адрес : установите три из них.
  • состояние : измените на что-нибудь более нейтральное, как территория, и измените его на nvarchar (100). В идеале, измените его на территориальный идентификатор (уникальный идентификатор) и создайте другую таблицу, в которой они содержатся.
  • zip : изменить на postalCode и увеличить размер до 20.
  • phone : Увеличьте размер до 50. Я считаю, что лучше не вмешиваться в попытки разбить этот валидатор, если у вас действительно нет веской причины и планируете его использовать.
  • факс : так же, как телефон
  • notes : Измените это на nvarchar (max), чтобы не ограничиваться таким количеством ограничений.
0 голосов
/ 18 сентября 2009

В какой отрасли эта база данных будет использоваться?

Во многих отраслях промышленности существуют стандарты, которые можно использовать в качестве руководства для проектирования и реализации объектов, таблиц и типов данных.

Например, работая с информацией о здравоохранении и страховании, один стандарт, который влияет на мой дизайн, - это «ANSI ASC X12N 837 Health Care Claims (837)».

Если вы когда-нибудь рассчитываете импортировать или экспортировать информацию из и во внешние системы, я бы использовал отраслевой стандарт в качестве руководства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...