Физическая модель данных для сети релевантных материалов

04.12.2006

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

Нужно всего две таблицы. В первой будут храниться информационные объекты любых типов. Вторая обеспечит связи между объектами. Взгляните на IDEF1X-диаграмму (модель таблиц базы данных), нарисованную в Microsoft Visio:

Прототип физической модели базы данных для релевантных страниц

У каждого объекта есть уникальный идентификатор «obj_id», представленный в виде натурального числа. В таблице «object_object_relationship» предполагается хранение пар идентификаторов из таблицы «object». Одна пара — одна связь между материалами сайта. Чтобы отобразить двустороннюю (взаимную) связь, нужно записать в таблицу «object_object_relationship» две пары, например, «17,39» и «39,17».

Таблица «object_object_relationship» может хранить информацию и о типе связи в поле «relationship_description», например, «is a child of», «is a parent of», «is a previous part of», «is very similar to». Таким образом, можно создавать действительно сложные структуры.

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

Комментарии

slnc, 04.12.2006 19:48

Еще можно хранить "вес" связи. Наиболее релевантные материалы отображать выше остальных в списке. Тоже неплохо, на мой взгляд, как дополнение.

Дмитрий Сергеев, 04.12.2006 20:23

2 slnc: Да, об алгоритмах выбора самых релевантных материалов можно написать отдельно. Впрочем, кое-что уже сказано.

Roman, 05.12.2006 02:12

Все связи предлагаете вручную задавать или автоматически их устанавливать при добавлении нового материала?
Почему не использовать тэги или ключевые слова?

Дмитрий Сергеев, 05.12.2006 14:23

2 Roman: при добавлении материала вручную связывать его с уже существующими. В дальнейшем связи редактировать по мере необходимости.

При этом очень важно выработать четкие критерии релевантности. Связывать нужно только то, что действительно имеет отношение к делу.

С тегами тоже можно, но необходим четкий словарь с синонимами. А сделать его сложно.

И, конечно, можно сделать гибридный вариант.

Борис Вольфсон, 05.12.2006 23:27

Дим, посмотри в друпале систему таксономии (и фолксономии, фактически) - там уже есть прекрасно реализованная тегов.
А по поводу связи - также есть модули, которые связывают материалы, как по тегам, так и по содержанию (при помощи полнотекстового поиска), так и оставляют возможность сделать это ручками.

-----------------------------------------------
С уважением, Борис Вольфсон

ЗЫ Спасибо за интересный сайт, если есть желание разместить твои статьи у меня на сайте, отпиши на мыло - что-нибудь придумаем. RSS - в закладках. ;)

Дмитрий Сергеев, 06.12.2006 00:43

2 Борис Вольфсон: да, я к Друплу и веду :) Только делать то, что описываю, предлагаю с помощью Relationship Module. Про него и расскажу в скором времени.

А на счет публикаций, как напишу что-нибудь стоящее -- обращусь :)