Как хранить теги для доменных имен в базе данных? - PullRequest
1 голос
/ 09 февраля 2011

Допустим, на google.com есть теги с именем:

search,google,searchengine,engine,web

В Facebook есть теги с именем:

facebook,social,networking,friends,community

Как хранить домен и соответствующие теги в базе данных?

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

Вы должны создать 3 таблицы для хранения всего этого:

  • domains: id | name
  • tags: id | name
  • domains_tags: tag_id | domain_id

доменов:

id | name
------------------
1  | google.com
2  | stackoverflow.com

теги:

id | name
------------------
1  | web
2  | lol
3  | facepalm.jpg

domains_tags:

domain_id | tag_id
------------------
1         | 1
1         | 2
2         | 3

В этом примере 2 тега относятся к домену google и один тег относится к SO

И для каждого отношения вам нужно добавить еще одну запись в domains_tags, которая будет хранить отношения между доменом и определенным тегом.

Этот метод называется Многие ко многим

Как предложено в другом ответе - вы также можете добавить дополнительное поле к domains с именем tags и хранить там теги, разделенные запятой, но это решение странно, так как у вас будут проблемы, когда вам понадобится некоторая аналитика / статистика / поиски по доменам и тегам. Единственная причина следовать этой идее - «кэшировать» список тегов текущего домена, чтобы просто отобразить, как дополнение (не замена !!) к решению, которое я дал первым.

0 голосов
/ 09 февраля 2011

Походит на очень простую таблицу с 2 столбцами | Домен | тег |

CREATE TABLE tag_table (domain varchar(255), tag varchar (255));
SELECT tag FROM tag_table WHERE domain = 'google.com';
INSERT into tag_table (domain, tag) VALUES ('google.com', 'search');



i.e.
  google.com | search
  google.com | google
  google.com | searchengine
  google.com | engine
  google.com | web
  facebook.com | facebook
  facebook.com | social
  facebook.com | network
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...