Чтобы ответить на второй вопрос первым: да, я бы в большинстве случаев создавал отдельную таблицу для каждого списка выбора. Особенно, если они предназначены для совершенно разных типов ценностей (например, штатов и городов). Общий формат таблицы, который я использую, выглядит следующим образом:
id - identity or UUID field (I actually call the field xxx_id where xxx is the name of the table).
name - display name of the item
display_order - small int of order to display. Default this value to something greater than 1
Если вы хотите, вы можете добавить отдельное поле 'value', но я просто обычно использую поле id в качестве значения поля выбора.
Я обычно использую выбор, который упорядочивает сначала по порядку отображения, а затем по имени, чтобы вы могли упорядочить что-то в алфавитном порядке, добавляя при этом свои собственные исключения. Например, предположим, у вас есть список стран, которые вы хотите в альфа-порядке, но сначала должны быть США и Канада, а вы можете сказать "SELECT id, name FROM theTable ORDER BY display_order, name" and set the display_order value for the US as 1, Canada as 2 and all other countries as 9.
Вы можете стать более привлекательным, например, иметь флаг 'active', чтобы вы могли активировать или деактивировать параметры, или установить поле 'x_type', чтобы вы могли группировать параметры, столбец описания для использования в подсказках и т. Д. хорошо работает в большинстве случаев.