mysql - 标签系统的最佳模型

标签 mysql database tags data-modeling

标签系统的最佳模型是什么?例如,一个主题可以有N标签,标签和N可能与Nthreads相关,如果我创建一个表,标签和帖子表和这个表标签,我有帖子的 ID ,标签,将重复许多记录作为另一个主题添加这个标签,这是最好的如何避免这种情况?

enter image description here


@Quentin,问题依旧,会重复post_tags表中的记录

CREATE TABLE IF NOT EXISTS `posts` (
  `pid` bigint(22) NOT NULL AUTO_INCREMENT,
  `author` varchar(25) NOT NULL,
  `content` mediumtext NOT NULL,
  PRIMARY KEY (`pid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

INSERT INTO `posts` (`pid`, `author`, `content`) VALUES
(1, 'Andrey Knupp Vital', 'Hello World !');

CREATE TABLE IF NOT EXISTS `tagged` (
  `pid` bigint(22) NOT NULL,
  `tid` bigint(22) NOT NULL,
  PRIMARY KEY (`pid`,`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `tagged` (`pid`, `tid`) VALUES
(1, 1),
(1, 2);

CREATE TABLE IF NOT EXISTS `tags` (
  `tid` bigint(22) NOT NULL AUTO_INCREMENT,
  `tag` varchar(15) NOT NULL,
  PRIMARY KEY (`tid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `tags` (`tid`, `tag`) VALUES
(1, 'main'),
(2, 'hello');

最佳答案

使用 junction table

它至少有两列。 “帖子”和“标签”,主键在它们对中定义(如果数据库允许,否则主键的第三列)。

关于mysql - 标签系统的最佳模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460978/

相关文章:

php - 需要有效的方法在 2 亿行数据库(PHP)上进行简单计算

git - 使用 git-svn,我如何提交标签?

mysql - 在 MySql 中实现一个 ETL 项目的最佳免费解决方案是什么

r - 带有 Access DB 的 R 中的 ODBC 是否存在任何语言问题?

php - MySQL 选择两天之间具有 php time() 值的数据

database - 真实世界的 MySQL/Postgres 数据库模式示例和分析工具

grails - Grails Shiro标签中的OR条件

html - 链接到网页的特定部分

mysql - MySQL表在MongoDB中的正确实现?

Mysql查询代码改进