我应该如何在数据库中存储域名的标签?

时间:2011-02-09 02:35:29

标签: mysql database database-design tags

让我们说google.com上有标记:

search,google,searchengine,engine,web

Facebook有标签:

facebook,social,networking,friends,community

我应该如何将域及其各自的标签存储在数据库中?

2 个答案:

答案 0 :(得分:2)

你应该创建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,以存储域与特定标记之间的关系。

此技术名为Many-To-Many

正如在另一个答案中提出的那样 - 您还可以向名为domains的{​​{1}}添加其他字段,并用逗号分隔存储标记,但此解决方案很奇怪,因为当您遇到麻烦时会遇到麻烦我需要对域名和标签进行一些分析/统计/搜索。遵循这个想法的唯一理由是“缓存”当前域的标签列表,只显示作为添加(不替换!!)到我先给出的解决方案。

答案 1 :(得分:0)

听起来像一个非常简单的表,有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
  ...