1

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

Мое мышление: у нас есть таблица для каждой категории, за исключением, может быть, таблицы zips, которая может служить соединением всей этой таблицы. Пожалуйста, обратитесь к изображению ниже:

Database Diagram http://www.freeimagehosting.net/uploads/248cc7e884.jpg

Одна вещь, которую я имею в виду, это удалить таблицу зип и просто положить почтовый индекс в таблице zipstocities, поскольку почтовый индекс почти уникален, а затем индексировать таблицу на почтовый индекс. Единственным недостатком является почтовый индекс, который должен быть varchar, чтобы заботиться о zip-кодах с ведущими нулями. Просто хочу знать, есть ли недостаток в моей логике.

+5

Для чего предназначена эта база данных? Я бы сказал, что эта схема чрезмерно нормализована. – Lazarus

+0

Используется для добавления информации о пациенте главный сценарий: пациент знает свой почтовый индекс, остальные остальные поля автоматически заполняются Возможный другой сценарий: пациент знает только город и штат, в котором они живут; Почтовый индекс и графство затем автоматически заполняются – Sean

+0

Чрезмерно нормализованный? Я думаю, что это полностью денормализуется. –

ответ

4

Я не очень хорошо знаю код США и систему территориального девиации, но я полагаю, что он похож на немецкий.

  • В штате есть много округов.
  • В округе есть много городов.
  • В городе есть много почтовых индексов.

Следовательно, я бы использовал следующую схему.

 

ZipCodes   CityZipCodes 
------------  ----------------  Cities 
ZipCode (PK) <─── ZipCode (PK)(FK)  ----------- 
        City (PK)(FK) ───> CityId (PK) 
             Name 
             County (FK) ───┐ 
                 │ 
                 │ 
            Counties   │ 
            -------------  │ 
       States     CountyId (PK) <───┘ 
       -----------------  Name    
       StateId  (PK) <─── State (FK) 
       Name 
       Abbreviation 

Исправлено для нескольких городов за почтовый индекс.

+1

occassionaly, хотя zip имеет более одного города – Sean

+0

Исправлено для нескольких городов за почтовый индекс. –

+0

В общем, да, но иногда почтовый индекс делится между городом с одним почтовым индексом, а другой с несколькими - 94303 - один из таких, и города находятся в двух отдельных графствах для загрузки. Мой адрес находится в Пало-Альто, Калифорния 94303, который находится в графстве Санта-Клара; 94303 также охватывает (некоторые из?) Восточный Пало-Альто, который находится в округе Сан-Матео.При вводе моего адреса в веб-формы мне периодически приходится выбирать, в каком округе мой почтовый индекс находится из-за этого. –

0

Посмотрите на диаграмму, которую вы имеете, таблица состояний является единственной из 4 внешних таблиц, которая действительно необходима. Таблицы поиска с только идентификатором и одним значением не стоят усилий. Эти отношения предназначены для того, чтобы одно значение в главной таблице (ziptocities) ссылалось на набор связанных данных в таблице поиска (состояния).

+0

да, но город может выделять zip-коды и графство может также иметь несколько городов. Также иногда zip имеет более одного города – Sean

+0

Позвольте мне попробовать еще раз на этот раз, я буду использовать английский: да, но в городе может быть несколько почтовых индексов, а у графства также может быть несколько городов. Также иногда zip имеет более одного города – Sean

+0

Я согласен с этим. Однако с таблицей ziptocity вы сопоставляете zips с городом, округом и штатом. Моя точка зрения состоит в том, что если вы собираетесь ссылаться на zipID, который является заполнителем для одной части информации (например, zip-код), почему бы вам просто не использовать это единственное значение вместо сохранения значения и ссылочного значения. Используя ссылочный метод, вы используете 1 запись для каждой строки в ziptocities плюс 1 запись для каждого возможного значения zip. Если вы просто используете значение zip-кода, вы используете только 1 запись для каждой строки в ziptocities. Это устраняет размер и сложность вашего БД. – Mentee

1

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

+1

Я действительно не хотел это слышать – Sean

+0

Что я могу сказать, это был закон штата, который они создали для борьбы с дезинформацией школ. – HLGEM

+0

BTW источник мы получаем данные почтового индекса из ставит город, штат и почтовый все в одной таблице. Вы можете добавить графство (сделать его нулевым), а затем легко запросить. Создайте уникальный индекс для всех 4 полей. – HLGEM

0

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

Другой вопрос, насколько важно, чтобы адрес был точным? Сколько будет смерти, если важные письма не будут доставлены своевременно (возможно, многие, если письмо касается рецептурных препаратов!)

Возможно, вам стоит подумать об использовании данных из Почты, возможно, используя продукт который исправляет адреса. Таким образом, когда вы получите хороший адрес, вы будете уверены, что почта может быть доставлена ​​туда, потому что Почтовая служба будет так говорить!

+0

Владелец компании хочет их ... – Sean

+0

Добавьте их и сделайте их необязательными. Напомните ему, что они не являются контейнерами - они не являются частью этой иерархии, если он так думает. –

0

Кажется, что есть недостатки как в вашем процессе, так и в вашей логике.

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

Не путайте адрес с почтовой меткой. Они совсем не то же самое. Рассмотрим моделирование носителей. В США, действителен ли адрес, зависит от перевозчика. Например, мой почтовый ящик является действительным адресом, если носителем является USPS, но не тогда, когда носителем является ИБП.

Чтобы экономить время, вы можете попробовать просматривать некоторые международные форматы адресов на bitboost.

0

Будет ли ваша логика работать, если у двух стран есть один и тот же почтовый индекс? Эти два будут указывать на разные города в этом случае. вот несколько моментов для рассмотрения

  1. Вы хотите использовать zipcode как вид первичного ключа в адрес? (на арендовать город, страну и страну полей). В этом случае у вас может быть почтовый индекс, город, страна, страна в одном таблице. Создание индексов по городу, состояние и т.д .. (у вас есть функциональная зависимость формы zipcode-> страна, штат, город. Это , как я сказал, не может быть правдой по стран.
  2. Если авто заселение является вашего единственное беспокойства, создать материализованное представление и использовать его.

Я рекомендую прочитать «модельные данные» Дэвид С. Хэй.

+0

это никогда не будет использоваться за пределами США, поскольку это разработано для конкретных медицинских требований и законов США. – Sean

+0

Затем оставьте подробные сведения о стране. Я предполагаю, что у вас есть знания о функциональных зависимостях. У вас есть следующая функциональная зависимость. Почтовый индекс -> кол-во, город, штат У вас, однако, есть следующие функциональные зависимости в вашем дизайне? (Графство, Город-имя) -> Название штата (город, уезд, штат) -> почтовый индекс Ваш дизайн выглядит сильно ненормированным, что теоретически хорошо. Однако у вас будет слишком много объединений в запросах. Это может повлиять на производительность. Замечание о функциональной зависимости a-> b означает, что если для двух строк R1 и R2 в таблице, если R1 (a) = R2 (a), то R1 (b) должно быть равно R2 (b). – bkm

+0

Я согласен, что графство не имеет значения, однако владелец компании хочет их, чтобы они стали актуальными. Во всем этом я думаю об использовании Даниэля Брукнера выше. Просто посмотрим на специальные сценарии, которые нарушили бы эту логику. – Sean

0

Но не каждый человек, который имеет действительный медицинский иск требуется по закону оставаться в США и если требование будет урегулировано. Люди двигаются.

+0

Эта проблема не имеет значения, поскольку мы действительно не пытаемся отслеживать пациентов, просто подтверждаем, что во время лечения они находились в США – Sean

0

Сан-Франциско - город в Калифорнии; это не город в штате Алабама. Ваш дизайн предотвращает бессмысленные записи, такие как «San Francisco, AL»?

+0

Да, сохраняя индекс zipcode – Sean

0

Пятизначный ZIP не является хорошим ключом, потому что имена двух мест будут использовать один и тот же ZIP, и один ZIP может ссылаться на два имени города. См. http://semaphorecorp.com/cgi/zip5.html