Web サイトのアイテムのタグ付けに 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
誰かが外部キー/参照を持つことの重要性を理解するのを手伝ってくれますか? それらが必要な理由と、それらは何をするのですか?