我应该为多个数据类型表使用一个映射表,还是为每个数据类型创建不同的映射表?

时间:2016-05-23 12:25:32

标签: mysql sql foreign-keys foreign-key-relationship

目前我有一个巨大的标签表,我使用映射表将标签映射到另一个映射表以映射数据表。我添加另一个映射到数据表的原因是我有多个不同的数据表。

有两个数据表:

CREATE TABLE IF NOT EXISTS `cars_list` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  `description` varchar(255) default NULL,
  `photo` varchar(45) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `website_list` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) default NULL,
  `description` varchar(255) default NULL,
  `url` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我在搜索字段中使用它们,并且它们应该链接到一个TAG列表表

有标签表:

CREATE TABLE IF NOT EXISTS `tags` (
  `tag_id` int(11) NOT NULL auto_increment,
  `tag` varchar(255) default NULL,
  PRIMARY KEY  (`tag_id`),
  UNIQUE KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我的工作 - 我使用另外两个表来映射带有标签的数据表:

两个映射表:

CREATE TABLE IF NOT EXISTS `tags_map_type` (
  `tmtid` int(11) NOT NULL auto_increment,
  `type` enum('cars_list','website_list') NOT NULL,
  `type_id` int(11) NOT NULL,
  PRIMARY KEY  (`tmtid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `tags_map` (
  `tmid` int(11) NOT NULL auto_increment,
  `map_type_id` int(11) NOT NULL,
  `tag_id` int(11) NOT NULL,
  PRIMARY KEY  (`tmid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `tags_map`
  ADD CONSTRAINT `tag_id` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`tag_id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `map_type_id` FOREIGN KEY (`map_type_id`) REFERENCES `tags_map_type` (`tmtid`)  ON DELETE CASCADE ON UPDATE CASCADE;

表格tags_map_type然后链接到cars_listwebsite_list

问题:

如何让foreign keytags_map_type链接到其中一个列表?

或者我应该为每个cars_listwebsite_listsome_other_list表使用另一个映射表吗?

哪种方式正确且最佳使用?

0 个答案:

没有答案