Другая причина могла бы состоять в том, что JVM не знает о коротком и байте. Все вычисления и хранение сделаны с ints, longs, плавают и удваиваются в JVM.
Администратор баз данных, в котором я работал, сказал мне об этой жемчужине, и она отлично сработала для нас (первые два шага такие же, как и в вашем решении):
Таким образом, выУ вас есть все ваши адреса в одной таблице, они могут ссылаться на любую нужную вам запись, ваша ссылочная целостность не нарушена, и у вас нет промежуточной таблицы, которую вам нужно просмотреть.
Обратной стороной является то, что если вы хотите добавить обращается к новому классу объекта (например, к таблице сотрудников), вам нужно добавить столбец EmployeeID в таблицу адресов, но это довольно просто.
Еще одна вещь, которая есть в нашей базе данных, которую вы, возможно, захотите принять во внимание, - это наличие флага соответствия в таблице адресов с триггером для обеспечения того, чтобы только один адрес на человека мог делать ставки в качестве корреспонденции. Мы рассылаем много писем людям в нашей базе данных, и знание того, какой из трех адресов этого человека является тем, который нам нужно использовать при отправке почты, неоценимо. Это также упрощает получение только одного адреса на человека при запросе, чтобы избежать получения нескольких записей на человека для некоторых отчетов.
Я также хочу добавить еще одну вещь, для простоты создавать представления, которые расширяют адресную информацию до ваших таблиц, иначе вы можете возненавидеть себя за такую разработку db.
Я бы рассмотрел одну таблицу AddressLink (имя?) С
LinkTypeID (Customer,Client,Contact,Facility) -- needs additional TypeID table
ID (CustomerID,ClientID...)
AddressID
AddressTypeID
AddressActive
LastUpdateUser
LastUpdateTime
Добавление новый тип адресной ссылки означает добавление нового LinkTypeID без новой таблицы адресов [TypeID], никаких запросов изменять не нужно, и если вы ищете все варианты использования адреса (для удаления и т. д.), есть только одно место для поиска.
Во всяком случае, это очень похоже на то, как мы это делаем.
О, и у нас есть AddressLine3 в нашей (эквивалентной) таблице Адресов для некоторых странных нестандартных ситуаций.