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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как хранить статусы?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Tsigyr
Отправлено: 08 Мая, 2013 - 15:17:02
Post Id


Гость


Покинул форум
Сообщений всего: 83
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




Как лучше хранить статусы в базе данных?
В 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 - выполненный)
ну думаю вы поняли..

(Отредактировано автором: 08 Мая, 2013 - 15:18:34)

 
 Top
DelphinPRO
Отправлено: 08 Мая, 2013 - 15:20:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




определенно не varchar
операции с числами всегда быстрее, чем со строками


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 08 Мая, 2013 - 16:13:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




tinyint если нужно что-то булево.
В enum лучше никогда числовые значения не загонять - чревато очень трудноуловимыми ошибками из-за обработки enum'а как числа самого по себе.
enum для некоторого множества текстовых обозначений.

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

enum. С нормальными, человекочитаемыми значениями.


-----
PostgreSQL DBA
 
 Top
KingStar
Отправлено: 08 Мая, 2013 - 16:13:59
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




почему не TINYINT(1) UNSIGNED ?


-----
То что программа работает, не означает что она написана правильно!
 
 Top
DelphinPRO
Отправлено: 08 Мая, 2013 - 16:47:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




KingStar пишет:
почему не TINYINT(1) UNSIGNED ?

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

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

А с точки зрения представления внутри БД - что tinyint, что enum - занимают один байт и хранятся в виде числа


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
caballero
Отправлено: 08 Мая, 2013 - 17:07:10
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




enum - если не потребуется переносимость на другую БД.
Лично я предпочитаю не использовать фичи заточенные на один тип БД.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
_Dark_
Отправлено: 08 Мая, 2013 - 17:15:49
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


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, так что вероятно у меня несколько устаревшая информация касательно этого типа данных.

(Отредактировано автором: 08 Мая, 2013 - 17:30:31)

 
 Top
DelphinPRO
Отправлено: 08 Мая, 2013 - 17:20:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




caballero пишет:
enum - если не потребуется переносимость на другую БД.
Дельное замечание, однако это как раз-таки и решать разаработчику


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
KingStar
Отправлено: 08 Мая, 2013 - 17:35:29
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




_Dark_ пишет:
KingStar пишет:
почему не TINYINT(1) UNSIGNED ?

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


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

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

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


думаю не стоит беспокоится что не хватит статусов


-----
То что программа работает, не означает что она написана правильно!
 
 Top
_Dark_
Отправлено: 08 Мая, 2013 - 17:35:48
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


KingStar пишет:
ну во-первых не 0-255, а 0-9

А почему?
 
 Top
KingStar
Отправлено: 08 Мая, 2013 - 17:37:22
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




и уж точно не int(10) Хм
(Добавление)
_Dark_ пишет:
KingStar пишет:
ну во-первых не 0-255, а 0-9

А почему?


потому что в данном случае значение равно 1 - TINYINT(1)
(Добавление)
или не знакомо что означает число в скобках?


-----
То что программа работает, не означает что она написана правильно!
 
 Top
_Dark_
Отправлено: 08 Мая, 2013 - 17:39:31
Post Id


Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Окт. 2011  


Помог: 5 раз(а)

[+]


KingStar пишет:
потому что в данном случае значение равно 1 - TINYINT(1)

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

Мне то как раз знакомо, а вот у вас проблемы.
Сколько вы уже таблиц создали, указывая размер для числовых типов?

(Отредактировано автором: 08 Мая, 2013 - 17:40:49)

 
 Top
KingStar
Отправлено: 08 Мая, 2013 - 17:41:30
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




_Dark_ читай мою подпись


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Мелкий Супермодератор
Отправлено: 08 Мая, 2013 - 17:42:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




KingStar пишет:
ну во-первых не 0-255, а 0-9

Именно что 0-255.


-----
PostgreSQL DBA
 
 Top
KingStar
Отправлено: 08 Мая, 2013 - 17:43:36
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)





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


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB