Обработка Heroku / ClearDB auto Инкремент стратегии первичного ключа

С Heroku, выполняющим ClearDB в качестве уровня MySQL, первичные ключи автоматически увеличиваются в кратных 10. Так, например, первая вставка может быть 4, затем 14, 24, 34 и т. Д. Я полностью согласен с их аргументацией, так что это не так проблема.

Мой вопрос, как вы справляетесь с этим в вашем коде. Например, допустим, у меня есть status стол, который состоит из 4 строк,

     id | name
1  | Active
2  | Retired
3  | Banned
4  | Awaiting Mod

И тогда в моем приложении я использую:

   if($status['id'] == 1){
//do something
}else{
// do something else
}

Очевидно, что это сломается из-за того, как увеличиваются PK. Какова лучшая практика для обработки подобных ситуаций? Я не могу, например, проверить на 14, так как нечего сказать, что стратегия нумерации не изменится на 12, 22, 32 и т. Д.

Должен ли я проверять по имени, например, if($status['name'] == 'Active') или добавить новый столбец в таблицу с intя требую? Я знаю, что запросы int в SQL гораздо быстрее, чем string,

Итак, что такое нормальный способ справиться с этим?

10

Решение

Есть в основном две стратегии, чтобы справиться с этим

Нет автоинкремента

Не используйте автоинкремент. Просто добавьте значения id самостоятельно, при вставке данных. Для таблицы типа ‘status’, которая, вероятно, содержит только статические данные, вы не изменяете ее динамически, это может быть хорошим вариантом.

Строковые константы

Проверьте значения строки. И определите эти строки как константы класса.

class YourClass {
const ACTIVE = 'Active';
const RETIRED = 'Retired';
...
}

А затем напишите свои чеки как

if($status['name'] == self::ACTIVE){
//do something
}

Я бы рекомендовал использовать второй подход, в основном потому, что он делает ваш код более семантическим. Гораздо проще увидеть, что $status['name'] == self::RETIRED значит чем $status['id'] == 2

И если вы добавите индекс на name В столбце этой таблицы не будет (почти) никакой разницы в производительности при запросе по имени, а не по первичному ключу.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector