Меня попросили использовать базу данных, в которой большинство первичных ключей, а также другие поля используют char (n) для хранения числовых значений с заполнением, например:
product_id: char(8) [00005677]
user_id: char(6) [000043]
category_id: char(2) [05]
Причинаони хотят использовать его таким образом, чтобы иметь возможность использовать символы (в далеком будущем), если они хотят.Однако у них есть много правил, основанных на числах, например, category_id от 01 до 79 соответствует общей категории, а от 80 до 89 - особая категория, а от 90 до 99 - определяемая пользователем категория.
Я лично считаю, чтоиспользование char (n) для хранения чисел - плохая практика.Мои причины:
- , используя char, ""! = 0, 0! = 00, 05! = 5, 00043! = 000043 и так далее.По этой причине значения должны постоянно проверяться (для предотвращения повреждения данных).
- Если я дополняю число: 0 -> 00, то я должен обратить внимание, чтобы не дописывать символ (A ->0A)
- Если используются символы, то диапазоны становятся странными, что-то вроде: от 01 до 79 и AB и RX, TZ и S и т. Д. ...
- В результате индексации чисел вместо символовв прирост производительности
Я предлагаю изменить его на десятичное (n) с нулевым заполнением, чтобы сделать его более «защищенным от ошибок», так как эта информация модифицируется различными источниками (веб, клиент Windows)Загрузите CSV).Если они хотят добавить больше категорий, например, то будет проще перейти с десятичной (2) на десятичную (3).
Тогда у меня вопрос: я ошибаюсь?можно ли доверять char (n) для этой задачи?Если «цифры» являются злом с числами, то какие еще недостатки я пропускаю в приведенном выше списке (мне могут потребоваться более веские причины, если я хочу выиграть дело)?
TIA (любые комментарии / ответы будут оценены).