Лучший способ хранить теги, категории и int [] в SQL

Я просто работаю над составлением таблицы для сообщений в блоге на моем сайте.

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

То, как я сейчас настроил это:

  • id — BIGINT (20)
  • author_id — BIGINT (20)
  • заголовок — текст
  • метки — VARCHAR (50)
  • категории — VARCHAR (50)
  • проекты — VARCHAR (50)

Теги — это строковый массив тегов для сообщения, так же как и с категориями. Проекты будут представлять собой массив целых чисел, которые являются идентификаторами «проектов», связанных с публикацией. (у каждого проекта есть своя собственная страница о них, и когда вы переходите на страницу, вы можете получить список всех сообщений об этом).

У меня вопрос, как оптимизировать эту таблицу?

ОБНОВИТЬ:

В настоящее время я интересуюсь лучшими способами сохранить это и оптимизировать использование диска. Прямо сейчас у меня есть бесплатный сервер x10hosting, который я собираюсь использовать, который имеет ограничение 512 МБ. При необходимости я могу заплатить за более крупный сервер позже, но я хочу придерживаться бесплатного, пока не исчерпаю свои лимиты.

0

Решение

Для серьезного требования сохранения пространства:

  • Сожмите заголовок в вашем клиенте и сохраните в BLOB.
  • Поместите теги (и т. Д.) В commalist и используйте FIND_IN_SET() проверить, если tags содержит определенный tag, Это будет медленно и не может использовать какие-либо индексы.
  • Используйте MyISAM (в 2–3 раза меньше места на диске).
  • Минимизируйте индексы.
  • Используйте TINYINT / SMALLINT / MEDIUMINT вместо INT или BIGINT.
  • Используйте НЕ ПОДПИСАНО
  • Используйте latin1, если вам не нужен utf8; используйте latin1 для чего угодно (например, почтовый индекс), для которого не требуется utf8.
  • 0,5 ГБ ничтожно; проверьте другие услуги.
0

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

В PHP вы можете использовать функцию «serialize», которую я постоянно использую в хранилище SQL.

$foo = serialize($bar);

Теперь просто храните $ foo. $ bar может даже быть законченным объектом. После того, как факт, вы можете просто взять значение и

$bar = unserialize($foo);

$ bar теперь содержит все, что вы хотели раньше. Массив, объект и др. Это делает макет вашей таблицы sql ленивым, но так как начальный и конечный результаты являются просто переменными в php-скрипте, таблица на самом деле не имеет значения. Просто сделайте поля текст (не varchar (макс)) и вы подливка!

функция сериализации php

0