Суммируя все ответы, я думаю, что есть четыре варианта для таблицы поиска:
Альтернатива 1:
• Описание (первичный ключ, более длинный столбец varchar2)
Альтернатива 2:
• Код (первичный ключ, короткий столбец varchar2)
• Описание (не ноль, более длинный столбец varchar2)
Альтернатива 3:
• Id (бессмысленный первичный ключ, целочисленное значение, полученное из последовательности)
• Описание (не ноль, более длинный столбец varchar2)
Альтернатива 4:
• Id (бессмысленный первичный ключ, целочисленное значение, полученное из последовательности)
• Код (уникальный ключ, короткий столбец varchar2)
• Описание (не ноль, более длинный столбец varchar2)
Столбец первичного ключа будет находиться в главной таблице с ограничением внешнего ключа сверху.
Некоторые характеристики для альтернативы:
Альтернатива 1:
• При запросе к основному столу объединение не требуется
• Понятное значение при выполнении специальных запросов в основной таблице
• Требуется больше места для основного стола
• Индекс на основном столе будет намного больше, чем в других альтернативах
• Обновление значения Description означает проблемы с обслуживанием и, возможно, время простоя приложения.
Альтернатива 2:
• Присоединение требуется, если вы хотите получить значение описания
• Регистрация не требуется, если вы хотите фильтровать определенные значения поиска: для этого вы можете использовать значение кода.
• Довольно ясный смысл при выполнении специальных запросов к основной таблице
• Минимальные дополнительные требования к хранилищу для основного стола
• Индекс на основном столе будет небольшим.
• Обновление значения Description легко, однако код обычно является аббревиатурой от описания. При обновлении значения Description код может запутаться.
Альтернатива 3:
• Присоединение требуется, если вы хотите получить значение описания
• При фильтрации определенных значений поиска вам придется использовать значения Description в ваших запросах, так как идентификаторы не имеют смысла.
• Значение неясно при выполнении специальных запросов к основной таблице
• Минимальные дополнительные требования к хранилищу для основного стола
• Индекс на основном столе будет небольшим.
• Обновление значения Description легко и не вызывает путаницы, как со значениями Code
Альтернатива 4:
• Присоединение требуется, если вы хотите получить значение описания
• Объединение требуется при фильтрации по определенным значениям поиска, вы должны использовать значение кода в таблице поиска.
• Значение неясно при выполнении специальных запросов к основной таблице
• Минимальные дополнительные требования к хранилищу для основного стола
• Индекс на основном столе будет небольшим
• Обновление значения «Описание» легко, и вы также можете очень легко обновить значение «Код», чтобы оно напоминало значение «Описание». При этом вам, возможно, придется пересмотреть часть своего кода.
Личное мнение:
Я бы посмотрел, как планирую использовать основную таблицу и справочную таблицу. Какие запросы будут важны и должны работать эффективно? Будут ли значения когда-либо меняться?
Мой личный выбор - альтернатива 2 или 4. Я бы использовал альтернативу 2, если бы был абсолютно уверен, что значение кода никогда не изменится. И это редко. Меняются коды стран, меняются номера социального страхования. Коды валют меняются и так далее. Таким образом, большую часть времени я бы выбрал альтернативу 4. Меня бы не волновало дополнительное объединение, особенно потому, что таблица поиска - это маленькая таблица.
Но: выберите альтернативу, которая соответствует вашим требованиям.
Пожалуйста, не стесняйтесь редактировать текст, если вам известны некоторые дополнительные характеристики альтернативы.
С уважением,
Роб.