【问题标题】:Toxi mysql performance, tagging. Help understandingToxi mysql 性能,标记。帮助理解
【发布时间】:2010-11-14 23:00:01
【问题描述】:

我正在使用 Toxi 方案来标记我网站上的项目。作为 mysql 的新手,更不用说标记了,我只是在做一个健全性检查。这是我的表初始化脚本。

CREATE TABLE IF NOT EXISTS Items (
  item_id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  item_name VARCHAR(45) NULL ,
  media_type VARCHAR(20) NULL ,
  file VARCHAR(45) NULL ,
  description VARCHAR(500) NULL ,
  PRIMARY KEY (item_id)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS Tags (
 tag_id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
 tag_text VARCHAR(25) NOT NULL ,
 PRIMARY KEY (tag_id) ,
 UNIQUE INDEX (tag_text)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS Item2Tag (
 item_id INT UNSIGNED NOT NULL ,
 tag_id INT UNSIGNED NOT NULL  ,
 PRIMARY KEY (item_id, tag_id) ,
 INDEX (tag_id) ,
 FOREIGN KEY fk_Item (item_id) REFERENCES Items (item_id) ,
 FOREIGN KEY fk_Tag (tag_id) REFERENCES Tags (tag_id)
) ENGINE=InnoDB;

http://forge.mysql.com/wiki/TagSchema

问题 1

对于每个“item_id”到“tag_id”的“Item2Tag”表中有一个条目,我的理解是否正确?当我有大约 3000 个项目并且每个项目可能有大约 5 个标签时,这似乎将是一张巨大的桌子。这不是一个问题/真的不是一张大桌子吗?

问题 2

有人可以帮助我了解拥有外键/引用的重要性吗?为什么我需要这些,它们是做什么用的?

【问题讨论】:

标签: mysql foreign-keys innodb tagging folksonomy


【解决方案1】:

问题 1:是的,没错。

问题 2: 据我所知,对于 Toxi 架构,您并不真正需要它们。但它们可以帮助您避免在参考表中出现条目而不在项目表中。与其说是需要,不如说是预防头痛的约束。 IE。您删除项目编号 x,与项目编号 x 关联的条目也将被删除。

【讨论】:

  • 感谢您扩展您对问题 2 的回答。听起来拥有外键会很有用。它们的维护成本低吗?意思是,只要我的表是以这种方式创建的,我就必须再更改/管理外键吗?
  • 不,除非您想删除它们,这意味着单个查询,例如 ALTER TABLE <name> DROP FOREIGN KEY <foreign_key_name>
  • 这些外键效果很好。他们阻止我对我的桌子做“愚蠢”的事情。谢谢@thisMayhem。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 2019-01-22
  • 1970-01-01
相关资源
最近更新 更多