2009-07-27 3 views
0

Предположим, что мы делаем систему, в которой мы должны хранить addrees для зданий, лиц, автомобилей и т.д.Что было бы лучшей схемой для хранения «адреса» для разных объектов?

«Формат» адрес должен быть что-то вроде:

 
State (From a State list) 
County (From a County List) 
Street (free text, like '5th Avenue') 
Number (free text, like 'Chrysler Building, Floor 10, Office No. 10') 

(Да не живут в США)

что бы быть лучшим способом сохранить эту информацию:

  • Должен ли я иметь Person_Address , Car_Address, ...
  • Или информация о адресе должна быть в столбцах на каждой сущности,
  • Может быть, у нас есть только одна таблица адресов и попытаться связать каждую строку с другим объектом?

Или есть еще один «лучший способ» справиться с этим типом сценария?
Как бы это сделать?

ответ

0

Я бы сказал, чтобы иметь поле AddressType, который является поиск из раскрывающегося списка

1

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

Я также видел, где адрес хранится в строке клиента. Это приводит к эффективному массиву адресов для счетов-фактур, кораблей и т. Д., И это нормально. Имея дело с обоими, я думаю, что предпочитаю иметь их в своих сущностях, это позволяет вам легко сохранять историю старых неактивных адресов.

Мы использовали эту же технику для телефонных номеров, где людям нужно хранить разные номера телефонов.

1

Я настоятельно рекомендую прочитать «Модели данных модели - условные обозначения мысли» Дэвида С. Хей. Этот вопрос подробно обсуждается автором.
Что вы имеете в своем дизайне, являются двумя широкими сущностями.

  1. Адрес географического расположения
  2. Лицо/объект, который находится/принадлежит к адресу

В общем, это не очень хорошая практика, чтобы объединить адрес с человеком или предметами "детали в той же таблице, как ниже

Person(personID, name, gender, addressline1, addressline2) 

Вы могли бы иметь следующие объекты в дизайне

Address(number, street, countyID,stateID) 
Party(PartyID, Type) 
Person(PersonID, name, dob, gender,...,primaryPartyID) 
Car(carID, make, model, ...,primaryPartyID) 

Сторона - это ссылка между человеком/автомобилем по адресу. ПервичныйPartyID лично и Car tables являются внешними ключами для таблицы вечеринок. Таким образом, вы можете делиться и обращаться между автомобилем и человеком. Если вы хотите сохранить несколько адресов для каждого человека, вы можете добавить отдельную таблицу m: n между человеком и стороной.Тип attribuet для Стороны может принимать следующие значения: «Лицо», «Транспортное средство» и т. Д.