Как лучше всего представить адреса в базе данных [дубликат]

Другая причина могла бы состоять в том, что JVM не знает о коротком и байте. Все вычисления и хранение сделаны с ints, longs, плавают и удваиваются в JVM.

12
задан Community 23 May 2017 в 11:33
поделиться

4 ответа

Администратор баз данных, в котором я работал, сказал мне об этой жемчужине, и она отлично сработала для нас (первые два шага такие же, как и в вашем решении):

  1. Удалить AddressLine1, AddressLine2, City, StateOrProvince, PostalCode от клиентов , Контакты, Услуги и клиенты.
  2. Создайте таблицу AddressTypes с полями AddressTypeID, AddressTypeName, AddressTypeDescription, AddressTypeActive, LastUpdateUser, LastUpdateTime
  3. Создайте таблицу адресов с полями AddressID (PK), AddressTypeID (FK), AddressLine1, AddressLine2, AddressLine1, AddressLine2 StateOrProvince, PostalCode, LastUpdateUser, LastUpdateTime, CustomerID (FK), ClientID (FK), ContactID (FK), FacilityID (FK)
  4. В таблице адресов установите ограничение, чтобы только один из CustomerID, ClientID, ContactID , или внешние ключи FacilityID могут одновременно отличаться от NULL.

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

Обратной стороной является то, что если вы хотите добавить обращается к новому классу объекта (например, к таблице сотрудников), вам нужно добавить столбец EmployeeID в таблицу адресов, но это довольно просто.

11
ответ дан 2 December 2019 в 21:23
поделиться

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

2
ответ дан 2 December 2019 в 21:23
поделиться

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

0
ответ дан 2 December 2019 в 21:23
поделиться

Я бы рассмотрел одну таблицу AddressLink (имя?) С

LinkTypeID (Customer,Client,Contact,Facility) -- needs additional TypeID table
ID (CustomerID,ClientID...)
AddressID
AddressTypeID
AddressActive
LastUpdateUser
LastUpdateTime

Добавление новый тип адресной ссылки означает добавление нового LinkTypeID без новой таблицы адресов [TypeID], никаких запросов изменять не нужно, и если вы ищете все варианты использования адреса (для удаления и т. д.), есть только одно место для поиска.

Во всяком случае, это очень похоже на то, как мы это делаем.

О, и у нас есть AddressLine3 в нашей (эквивалентной) таблице Адресов для некоторых странных нестандартных ситуаций.

0
ответ дан 2 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: