2012-06-06 3 views
0

Я должны сделать функцию поиска, когда пользователь выполняет поиск тегов, которые прилагаются к различным статьям, как: ПК, здоровье, мода одежда ... и т.д. Моя текущая таблица выглядит так:повторного использования ключевых слов для поиска

Tag_id | Tag   | Article_id 
----------------------------------- 
1  | scary  | 2 
----------------------------------- 
2  | daunting  | 2 
----------------------------------- 
3  | chilling  | 2 
----------------------------------- 
4  | creepy   | 2 
----------------------------------- 
5  | scary  | 5 
----------------------------------- 
6  | daunting  | 5 
----------------------------------- 
7  | chilling  | 5 
----------------------------------- 
8  | creepy   | 5 

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

+0

Основная структура LEFT JOIN с тремя таблицами: 'articles',' tags' и 'article_tags'. И я бы добавил столбец 'alias_of_tag_id' в вашу текущую таблицу, чтобы легко найти ссылки для псевдонимов тегов для данного тега. Короче говоря, это базовый дизайн SQL. Вы можете попробовать прочитать книгу на нем, прежде чем приступить к работе с ней :) – rdlowrey

+0

этой структуре таблицы по-прежнему требуется связать каждый тег (и синонимы) со своей статьей в таблице article_tags, чего я не хочу (извините, если я wasn ' t достаточно точно). Я думал больше о чем-то, где каждой статье был назначен основной тег (наиболее часто используемое слово), на который будут ссылаться его синонимы ... – user1382785

+0

Просто используйте предложение столбца 'alias_of_tag_id'. Если вы на 100% уверены, что никогда не хотите разрешать несколько ассоциаций тегов с одной статьей (возможно, это не очень хорошая идея), просто добавьте столбец 'tag_id' в таблицу' articles' и устраните таблицу ссылок. Как я уже сказал, это довольно простые базовые концепции проектирования баз данных. Я бы рекомендовал сделать некоторые чтения по технологии, прежде чем использовать ее :) – rdlowrey

ответ

1

Вы хотите три таблицы:

ARTICLE 
id (a primary uid) 
link (links to the article) 

TAG 
id (a primary uid) 
name (ie 'chilling') 

ARTICLETAG 
article (a foreign key: a uid that exists in ARTICLE) 
tag  (a foreign key: a uid that exists in TAG) 

Каждый раз, когда вы хотите, чтобы пометить статью, вы вставляете в ARTICLETAG в новую строку со статьей, которую вы хотите пометить, и идентификатор тега, который вы хотите пометить. Добавьте к TAG и ARTICLE по мере необходимости для новых статей и тегов.

0

СТАТЬЯ ТАБЛИЦА

-id - UNIQUE (авто инкрементный или нет, решать вам)

атрибуты -Более ...

TAGS ТАБЛИЦА

-id - UNIQUE (авто инкрементный или нет, решать вам)

-tag

реляционная таблица ARTICLE_TAG ТАБЛИЦА

-article_id

-tag_id

Вы можете связать e как много тегов со статьями, которые вы хотите

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