0

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

закладки: www.javaworld.com
теги: Java, программирование

закладки: www.jquery.com

теги: Java, WebApps

теперь мои критериям поиска на основе тегов , Если пользовательский поиск для java, он должен предоставить все закладки, которые он сохранил с помощью java. здесь должны быть показаны как www.javaworld.com, так и www.jquery.com.

моих таблиц базы данных выглядит следующим образом

Пользователи (UID, Uname, пароль)

закладки (BID, UID, bookmark_url, tag1, tag2, tag3, Вкладка4, Вкладка5)

или

закладки (BID, UID, закладки)

Теги (TID, BID, Tagname)

здесь BID и TID являются суррогатными ключами.

пожалуйста предложить лучший способ решить эту проблему с учетом сценария я дал ..

ответ

1

Почему бы не сделать что-то подобное, как на Stackoverflow? Теги являются «глобальными» и не привязаны к одной закладке. Позволяет определять теги без предварительного указания закладок, что повышает гибкость. Также ограничение 5 тегов, как в вашем первом решении, также не является хорошей идеей.

Разделяя их, как показано ниже, вы можете лучше выполнять функции агрегации (создавая облака тегов), и вы можете использовать таблицу тегов для отображения тегов в флажке/множественном выборе для новых закладок. Было бы неудобно, если бы они уже были связаны с другой закладкой.

Table: User [UID, Uname, PW] 

Table: Bookmark [BID, UID, url] 

Table: Tag [TID, Tagname] 

Table: Bookmark_Tag [BID, TID] 
+0

спасибо за подробное объяснение. будет следовать этому. – sundeep

+1

Тот же URL-адрес, который был добавлен в закладки, может использоваться миллионами пользователей. У меня будет пятая таблица, которая связывает идентификатор пользователя с идентификатором закладки, в противном случае у вас может быть каждый пользователь, дублирующий www.ebay.com (который нарушает правила нормализации) – JM4

0

Ваше первое решение имеет следующие проблемы:
- у вас есть определенное количество тегов: как может пользователь определить 6-тег для ее закладки?
- у вас, вероятно, будет много значений NULL: если закладка имеет менее 5 тегов, другие столбцы не будут содержать значений. В таком случае вы, вероятно, потратите память на неиспользуемые столбцы.
- чтобы ускорить механизм поиска, вы должны индексировать столбцы, по которым вы хотите выполнить поиск (в вашем случае tag1, ... tag5): вы должны индексировать все 5 столбцов тегов.

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

Смежные вопросы