代码之家  ›  专栏  ›  技术社区  ›  RobertPitt

Stackoverflows标签系统,如何

  •  0
  • RobertPitt  · 技术社区  · 16 年前

    现在我可以理解如何使用外键之类的,但我不太清楚它是如何在这里开发的,它们是使用3个表还是2个表等等。

    他们是怎么开发的,你能给我举几个MySql的例子吗?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Cœur Gustavo Armenta    9 年前

    所以认为问题和答案是一样的-a Post . 下面是一个精简的MySQL等价表:

    DROP TABLE IF EXISTS `example`.`post`;
    CREATE TABLE  `example`.`post` (
      `postid` int(10) unsigned NOT NULL auto_increment,
      PRIMARY KEY  (`postid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    标记存储在典型的类型代码表中:

    DROP TABLE IF EXISTS `example`.`tags`;
    CREATE TABLE  `example`.`tags` (
      `tagid` int(10) unsigned NOT NULL auto_increment,
      `tagname` VARCHAR(45) NOT NULL,
      PRIMARY KEY  (`tagid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    将标签与问题/帖子关联在数据库的多对多表中记录,因此称为 POSTTAGS

    DROP TABLE IF EXISTS `example`.`posttags`;
    CREATE TABLE  `example`.`posttags` (
      `postid` int(10) unsigned NOT NULL auto_increment,
      `tagid` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`postid`,`tagid`),
      KEY `fk_tag` (`tagid`),
      CONSTRAINT `fk_post` FOREIGN KEY (`postid`) REFERENCES `post` (`postid`),
      CONSTRAINT `fk_tag` FOREIGN KEY (`tagid`) REFERENCES `tags` (`tagid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    这个 邮政标签 表格:

    • 外键要求表中存储的数据必须已经存在于相应的外键表中。。。

    check out the Stack Data Explorer -编写查询时,SO模式在右侧可用。