Тип сообщения в базе данных - INT или VARCHAR - PullRequest
0 голосов
/ 28 марта 2011

Я создаю сайт типа форума, на котором сообщения будут иметь разные типы: Обсуждение, Вопрос и Комментарий.

Какой метод хранения считается предпочтительным как для производительности, так и для удобства чтения?

Например:

Id  |  PostType  |  PostTitle
1      2            Example title

или

Id  |  PostType  |  PostTitle
1      Question     Example title

Производительность - моя главная цель, поэтому моей первой идеей было сохранить ее как INT. Однако, чтобы получить имя типа записи (которое мне нужно каждый раз), я запустил довольно неприятный оператор if / else.

Я бы предпочел тип VARCHAR, так как он избегает операций if / else и остается читабельным, но я не уверен.

Ответы [ 6 ]

2 голосов
/ 28 марта 2011

Я бы посоветовал вам иметь таблицу «Тип», которая будет содержать информацию о типе поста, такую ​​как Вопрос, Ответ и Комментарии.В основной таблице вы должны вызывать ее, используя ее первичный ключ, то есть целочисленное значение, как в первом примере.Это поможет вам управлять базой данных, если вам нужно добавить больше типов записей в вашу таблицу.

В случае удобочитаемости вы можете создать представление, объединяющее две вышеупомянутые таблицы, и можете читать его в любое время.

2 голосов
/ 28 марта 2011

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

1 голос
/ 28 марта 2011

Используйте Enum. Вы будете уверены, что у вас нет опечаток. Плюс вы можете сравнивать перечисления, используя строки, и они будут сохранены как INT.

1 голос
/ 28 марта 2011

Я бы использовал целые числа, чтобы сохранить количество избыточных данных на низком уровне.Вы можете просто использовать массив или карту, чтобы получить правильную строку для каждого идентификатора, например:

cats = {1: "Question", 2: "Comment", 3: "Discussion"}
cat = cats[post.postType]

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

1 голос
/ 28 марта 2011

Многие компании будут использовать int для категорий. Я думаю, они думают, что это помогает сделать, если утверждения короче, а оператор выбора дела легче. При этом я предпочитаю Varchar. С varchar вам никогда не придется беспокоиться о чрезмерной документации или новых кодировщиках, не зная, какое число соответствует какому.

if(PostType == 1){do code}


if(PostType == "Question"){do code}

Какой из них легче понять? Верхний потребует несколько строк комментариев. Это не так уж важно, но если вы часто используете код, это может сложиться.

1 голос
/ 28 марта 2011

В современных системах БД не нужно сильно беспокоиться о производительности в таком маленьком масштабе, как это отдельное поле.Однако, если вы решите сделать его varchar, ограничьте длину varchar соответствующим размером varchar (10), например.Вы также можете создать справочную таблицу для хранения типов вопросов.Хотя это не нужно и, вероятно, медленнее.

Мой выбор - поместить тип в поле, как оно есть во втором примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...