php mysql – следует ли добавить поле «category-name» в таблицу или нет?

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

  1. добавьте дополнительное поле для имен кошек внутри таблицы, в котором allreade содержит поле для cat-id

  2. нет лишнего поля для кошачьих имен, но cat-ids и читать в cat-именах (разделяемая запятой строка: «cat1, cat2, cat3, cat4») в php-файл с помощью существующего конфигурационного файла, а затем строить имена кошек с помощью db-поля «cat-ids» для массива и for-loop?

Thanx заранее,

Джейден

edit: can not, кажется, добавляет «hi» или «hallo» поверх сообщения, редактор просто удаляет его …

Если вы измеряете миллисекунды, а диск IO вашей системы не очень медленный, то вариант 2 обеспечит лучшую производительность. Но мы говорим о незначительном выигрыше во время исполнения. Поскольку вы уже будете запрашивать БД для получения новостной статьи, она будет очень оптимизирована, чтобы просто получить название категории одновременно. Я бы добавил таблицу сопоставления категории-name-id к именам категорий . И присоединиться к этому при получении новостей.

С точки зрения гибкости и с точки зрения устранения как можно большего числа возможных ошибок, я бы тоже согласился с моей идеей. Так как он добавляет гибкость вашей системе и сохраняет все ваши данные в одном месте. Изменение названия категории потребует редактирования одного столбца i базы данных вместо редактирования файла конфигурации php или, если бы использовался вариант 1, обновление каждой записи новостей.

Поэтому, лучше всего, добавьте таблицу с именами категорий-имен-идентификаторов в имена категорий и затем в новостях укажите идентификатор категории, к которой они принадлежат.

Для производительности вы можете затем кэшировать данные, которые вы извлекаете по существующим категориям и другим данным, поэтому вам не нужно постоянно анализировать БД для этой информации.

Например. Вы могли бы вместо того, чтобы присоединиться вообще, получить все категории из таблицы категорий, описанной выше. Загрузите его в приложение и получите его только после того, как кэш окажется недействительным. т.е. происходит тайм-аут или обрабатываются данные в db.

Я думаю о двух возможных путях.

  1. Имеют таблицу category таблицу articles таблицу relationship и имеют отношение «многие ко многим» между категориями и статьями (как описано в таблице relationship ).
  2. Если вы сегодня чувствуете себя умнее, объявите каждую категорию как двоичное число (0, 1, 2, 4, 8, 16 и т. Д.) И добавьте их в поле в таблице articles . Если статья имеет значение category 11, она имеет категории 1 + 2 + 8.

Мне нравится первое решение лучше, откровенно говоря.

Я бы создал таблицу категорий следующим образом:

 Categories ----------- category_id name ------------------------- 1 Weather 2 Local 3 Sports 

Затем создайте таблицу соединений , поэтому каждая статья может иметь 0 или более категорий:

 Article_Categories ------------------- article_id category_id ----------------------------- 1 2 1 3 2 1 

Чтобы получить статьи со своими категориями (с разделителями-запятыми) с сервера MySQL, вы можете использовать GROUP_CONCACT() :

 SELECT a.*, GROUP_CONCAT(c.name) AS cats FROM Articles a LEFT JOIN Article_Categories ac ON ac.article_id = a.article_id LEFT JOIN Categories c ON c.category_id = ac.category_id GROUP BY a.article_id 

Добавьте дополнительную таблицу, которая сохранит много проблем в будущем для вас. Это просто рекомендуемый способ.

Кстати, эта идея нескольких идентификаторов в одном поле, не пытайтесь так. Это даст много кода и проблем, которые совершенно не нужны. Если вы действительно находите проблемы с производительностью, вы всегда можете решить сделать еще один шаг и де-нормализовать или кешировать некоторые данные. Доступно множество возможностей кэширования.

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

Поэтому я рекомендую вариант 1, который вы упомянули.

И производительность также может измеряться двумя способами. Производительность исполнения и производительность разработки Я чувствую, что обе производительность находится в хорошем положении с вашим вариантом 1. Вам не нужно делать только один запрос. Если вы переходите на вариант 2, вам нужно загрузить из файла конфигурации, взорвать его с помощью запятой, а затем выполнить поиск с использованием элементов массива, требующих много времени.

Возможно, я ошибаюсь, но поскольку вы уже запрашиваете базу данных, это, вероятно, быстрее, если вы добавите там поле имени.

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