2010-08-16 4 views
0

я в настоящее время есть массив, который я создал так:Сохранение выбранного значения параметра, в базе данных

$regions=array(
    1=>'North West', 
    2=>'North East', 
    3=>'South West', 
    4=>'South East', 
    5=>'West Midlands', 
    6=>'East Midlands', 
    7=>'London', 
    8=>'Yorkshire', 
    9=>'East England', 
    10=>'Scotland', 
    11=>'Wales', 
    12=>'N. Ireland', 
); 

Я буду использовать этот массив для создания раскрывающихся списка опций (значение => текст) в моей форме. Выбранное значение параметра будет сохранено в базе данных в целочисленном поле.

Это может быть только вопрос личных предпочтений, но мне просто интересно, правильно ли это? Или должен ли ключ массива быть таким же, как его значение? Могут ли быть какие-либо потенциальные проблемы дальше по линии (добавление/удаление/изменение массива) при использовании этого подхода?

ответ

3

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

+0

Основная причина, я не положил его в стол, потому что я не мог понять, простой способ упорядочения записей в произвольном порядке. Например, если вы удаляете запись, любая новая запись автоматически берет «позицию» удаленной записи в таблице. – GSTAR

+0

Если у вас было поле позиции в таблице, вы могли бы запустить пару запросов по таблице, когда элемент был удален, чтобы перетасовать позиции: области обновлений задайте положение = положение - 1, где position> ". (Int) $ pos Принесите все элементы выше того, который вы удалили обратно в числовой порядок. Таким образом, идентификаторы в таблице по-прежнему уникальны и могут относиться непосредственно к другим источникам. – simnom

+0

@GSTAR не глупый, это единственный вариант Для добавления поля заказа в таблицу легко. Почему вы хотите, чтобы вместо поля удалялось новое поле? Что делать, если вы удалили 2 - какое место оно должно занимать? –

2

Обычно это правильно, но обычно выпадающий список (и, следовательно, массив) создается из базы данных (по крайней мере, в какой-то момент, даже если кэшировать позже). Это значит, что кто-то не изменяет код и не изменяет значение ранее сохраненных значений.

-1

Одна из приятных особенностей MySQL заключается в том, что она напрямую поддерживает типы полей перечисления. ИМХО его бесконечно предпочтительнее использовать значительные данные по суррогатным значениям.

Существует несколько дебатов по этому поводу в кругах базы данных - быстрый google показал около 82000 совпадений для «типа перечисления реляционных баз данных». Пойдите, прочитайте некоторые из них.

Но те, кто не согласен с ним в качестве практики, не рекомендуют поддерживать суррогатные/ценностные поиски в базе данных. НЕ в коде.

C.

Смежные вопросы