Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как хранить статусы?
Форумы портала PHP.SU » PHP » Программирование на PHP » Как хранить статусы?

Страниц (4): [1] 2 3 4 »
 

1. Tsigyr - 08 Мая, 2013 - 15:17:02 - перейти к сообщению
Как лучше хранить статусы в базе данных?
В enum? varcher? Или в int?
И какие могут в будущем с этим проблемы быть?

CODE (SQL):
скопировать код в буфер обмена
  1. `status` varchar(220) NOT NULL DEFAULT '1',
  2. `status` enum('1','2') DEFAULT '1',
  3. `status` int(10) UNSIGNED NOT NULL DEFAULT '0',


Тоесть статусы для комментариев (Типа новый, старый),
для заказов (если 1 -новый, если 2 - проверенный, если 3 - выполненный)
ну думаю вы поняли..
2. DelphinPRO - 08 Мая, 2013 - 15:20:40 - перейти к сообщению
определенно не varchar
операции с числами всегда быстрее, чем со строками
3. Мелкий - 08 Мая, 2013 - 16:13:17 - перейти к сообщению
tinyint если нужно что-то булево.
В enum лучше никогда числовые значения не загонять - чревато очень трудноуловимыми ошибками из-за обработки enum'а как числа самого по себе.
enum для некоторого множества текстовых обозначений.

Tsigyr пишет:
для заказов (если 1 -новый, если 2 - проверенный, если 3 - выполненный)

enum. С нормальными, человекочитаемыми значениями.
4. KingStar - 08 Мая, 2013 - 16:13:59 - перейти к сообщению
почему не TINYINT(1) UNSIGNED ?
5. DelphinPRO - 08 Мая, 2013 - 16:47:32 - перейти к сообщению
KingStar пишет:
почему не TINYINT(1) UNSIGNED ?

потому что
Мелкий пишет:
enum. С нормальными, человекочитаемыми значениями.

ключевой момент - "человекочитаемыми значениями". текст всегда понятнее, нежели безликое число.

А с точки зрения представления внутри БД - что tinyint, что enum - занимают один байт и хранятся в виде числа
6. caballero - 08 Мая, 2013 - 17:07:10 - перейти к сообщению
enum - если не потребуется переносимость на другую БД.
Лично я предпочитаю не использовать фичи заточенные на один тип БД.
7. _Dark_ - 08 Мая, 2013 - 17:15:49 - перейти к сообщению
KingStar пишет:
почему не TINYINT(1) UNSIGNED ?

В данном случае TINYINT будет принимать значения от 0 до 255.

VARCHAR хорош своей читаемостью, New, Approved, Completed смотрятся лучше, чем 1, 2, 3. Но тем не менее, это строка и это скажется на производительности.

ENUM неплохой вариант, но, как сказали выше, он зависим от платформы, т.к. добавление новых значений стандартным путем через ALTER TABLE приводит к полному перестроению таблицы.

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

P.S. В MySQL 5.1 вроде исправили работу ALTER TABLE в ENUM, так что вероятно у меня несколько устаревшая информация касательно этого типа данных.
8. DelphinPRO - 08 Мая, 2013 - 17:20:41 - перейти к сообщению
caballero пишет:
enum - если не потребуется переносимость на другую БД.
Дельное замечание, однако это как раз-таки и решать разаработчику
9. KingStar - 08 Мая, 2013 - 17:35:29 - перейти к сообщению
_Dark_ пишет:
KingStar пишет:
почему не TINYINT(1) UNSIGNED ?

В данном случае TINYINT будет принимать значения от 0 до 255


ну во-первых не 0-255, а 0-9

во-вторых ему требуется три значения

Цитата:
для заказов (если 1 -новый, если 2 - проверенный, если 3 - выполненный)


думаю не стоит беспокоится что не хватит статусов
10. _Dark_ - 08 Мая, 2013 - 17:35:48 - перейти к сообщению
KingStar пишет:
ну во-первых не 0-255, а 0-9

А почему?
11. KingStar - 08 Мая, 2013 - 17:37:22 - перейти к сообщению
и уж точно не int(10) Хм
(Добавление)
_Dark_ пишет:
KingStar пишет:
ну во-первых не 0-255, а 0-9

А почему?


потому что в данном случае значение равно 1 - TINYINT(1)
(Добавление)
или не знакомо что означает число в скобках?
12. _Dark_ - 08 Мая, 2013 - 17:39:31 - перейти к сообщению
KingStar пишет:
потому что в данном случае значение равно 1 - TINYINT(1)

Что если я вам скажу, что указание размера для числовых типов не влияет на диапазон принимаемых значений?
(Добавление)
KingStar пишет:
или не знакомо что означает число в скобках?

Мне то как раз знакомо, а вот у вас проблемы.
Сколько вы уже таблиц создали, указывая размер для числовых типов?
13. KingStar - 08 Мая, 2013 - 17:41:30 - перейти к сообщению
_Dark_ читай мою подпись
14. Мелкий - 08 Мая, 2013 - 17:42:53 - перейти к сообщению
KingStar пишет:
ну во-первых не 0-255, а 0-9

Именно что 0-255.
15. KingStar - 08 Мая, 2013 - 17:43:36 - перейти к сообщению

я всегда указываю число, которое должно попадать в таблицу, мало того я переменные указываю какой тип должен передаваться, говно писать все мы умеем, а по нормальному

 

Powered by ExBB FM 1.0 RC1