Я создаю сайт, где пользователи могут инвентаризовать предметы и применять к нему различные атрибуты, например.фотографии, ссылки, комментарии и т. д.
У меня есть структура базы данных из трех таблиц: users
, entries
, associations
.
Таблицы имеют следующие поля:
пользователи
id | joined | email | salt | password
записи
id | created | creator | type | value
ассоциации
id | created | creator | type | node1 | node2
Вот функция сайта:
Пользователи, добавляющие элементы в свой инвентарь
Все созданные пользователем элементы входят в entries
с type
предмета.Строка добавляется в associations
с type
'ладением ', node1
users.id и node2
records.id .Эта строка ассоциаций позволяет (используя записи INNER JOIN) извлекать и отображать инвентарь пользователя (а не просто извлекать все записи, где creator = users.id, поскольку пользователь может создать элемент, который ему не принадлежит).
Добавление атрибутов к элементам
Эта часть, кажется, отбрасывает всех, кому я объясняю вещи.«Атрибут» на самом деле просто еще один элемент.Таким образом, он в основном визуализирует созданную пользователем иерархию свободной формы.Например, вы можете пометить , по которому звонит колокол , с помощью «Книги», а «Книга» - это еще один предмет (независимо от того, находится он в инвентаре или нет).Чтобы сделать это, я просто добавляю еще одну строку в таблицу associations
с type
'tag' и node1 records.id (родительский элемент) и node2 records.id («тег» или дочерний элемент).Помните, что запись также может быть URL, комментарием, фотографией и т. Д., Это будет зависеть от entries.type
.Теперь я могу вытянуть все атрибуты предметов.Например, все фотографии: ($ item_id = страница, на которую я смотрю) "SELECT * FROM entries INNER JOIN associations ON associations.node1 = $item_id AND associations.node2 = entries.id AND entries.type = 'photo'
.
Я могу использовать аналогичный запрос, чтобы получить все комментарии элемента, его URL, что угодно.Это позволяет мне создавать плавную систему связей между предметами, предметами и их владельцами, предметами и комментариями, комментариями и комментариями (ответами).
Мой вопрос: как только у меня появилось много записей, созданных пользователем, например., «MacBook», как лучше всего объединить, объединить, объединить или, как бы вы ни называли, все эти отдельные элементы в один общий элемент, так что все эти фрагменты данных, созданные пользователями, могут быть одним знанием.кусок, если хотите.
Опять же, я не очень беспокоюсь о том, что пользователи вводят "mac book", "Apple Macbook" и т. д. В целом, эти пользователи просто делают это неправильно и не влияют на сообщество..
По сути, если пользователь, у которого нет MacBook, выполнил поиск и попал на страницу MacBook, он увидел бы самые популярные теги, некоторые фотографии (случайные, популярные, что угодно, это тривиально)., комментарии об этом, самый популярный URL и т. д.
Кроме того, большое спасибо, что нашли время, чтобы прочитать мое запутанное и подробное описание!:)