1

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

誰かが外部キー/参照を持つことの重要性を理解するのを手伝ってくれますか? それらが必要な理由と、それらは何をするのですか?

4

1 に答える 1

1

質問 1:はい、そのとおりです。

質問 2:私の知る限り、Toxi スキーマにはそれらは必要ありません。ただし、項目テーブルにないエントリが参照テーブルに含まれないようにするのに役立ちます。必要というよりも、頭痛を防ぐための制約です。すなわち。アイテム番号xを削除すると、アイテム番号xに関連付けられたエントリも削除されます。

于 2010-11-14T23:04:54.330 に答える