Я выхожу, очевидно, в мозг-бурный вопрос. Это, или я просто слишком много noob, чтобы увидеть какие-либо очевидные ответы на него:Трехмерная (или более) система маркировки? Архитектура базы данных PHP/MySQL
Как я могу достичь системы тегов, в которой каждый тег имеет определенное отношение к каждому пользователю веб-сайта?
Очень простой пример того, что я пытаюсь достичь, - это ситуация, когда система отслеживает образы страниц, которые пользователь делает для каждого тега. Например, несколько ключевых слов тегов «помечены» на каждую страницу веб-сайта. На странице об экологической науке могут быть помечены ключевые слова, такие как «биология» и «социология». Когда пользователь А посещает эту страницу, число увеличивается на 1, которое подсчитывается каждый раз, когда Пользователь А просматривает «биологию», а другой подсчитывает «социологию».
Таким образом, мы получаем записи, показывающие, насколько человек любит конкретный тег.
Что было бы самым эффективным способом сделать это с MySQL, и можно ли было бы работать с ним в двухстоечную систему, такую как следующее?
Table 1: Tags
- tag_title
- tagged_pages
- user_likes
Table 2: Users
- user_id
Добавление столбцов таблицы полностью прекрасное. Я пытаюсь избежать дублирования таблицы тегов и всех записей в ней.
Все, что я придумал до сих пор, имеет поле user_likes
, которое будет отформатировано примерно так для каждого тега: 101-12, 99-3, 156-14
... и т. Д. Затем используйте PHP explode(), чтобы отделить user_id от числа понравившихся.
Большое спасибо за ваше творческое понимание!
Но не это создать эксп сколько записей в таблице page_tags? Было бы много повторений как тегов, так и таблиц. Он стал бы более сложным с умениями иметь более сложные отношения между пользователями и тегами, чем просто постраничные образы. Я понимаю, что в ячейке не должно быть более одной информации, но нет ли лучшего способа сделать это? «Трехмерно»? – Patrick
Базы данных были СДЕЛАНЫ, чтобы они могли хранить миллионы и миллиарды данных в таблицах и с многомерными реляционными связями между ними. Это именно то, для чего были созданы эти инструменты. Я имею в виду, даже если вы говорите о миллиарде записей, каждый из них чрезвычайно мал. Два целых числа, это 64 бит пространства. Время в миллиард, вы получаете около 7 TiB данных, что на самом деле не так уж и много в наши дни. И при правильном индексировании вы, вероятно, не почувствуете разницы в скорости при запросе 100 записей по сравнению с 1.000.000 записей. –