そのため、 タスク :システム内のコンテンツに「キーワード」でラベルを付けることができるようになり、後で同じキーワードでマークされたデータのリストを取得するための選択を行います。
解決策 :本質的に、タグシステム自体はDBMSの3つの追加テーブルであり、他のすべてのコンテンツは既に関連付けられています。 このようなもの(システムのサードパーティエンティティは青色でマークされていますが、いくつでも使用できます):

その後、すべてが単純で、テーブルcontent_type_mapでシステムのすべてのコンテンツに追加の一意のID(タグの操作用)が提供されるため、次のようなテーブルを提示します。CREATE TABLE content_type_map(content_id INT UNSIGNED NOT NULL AUTO INCREMENT、foreign_content_id INT UNSIGNED NOT NULL、content_type ENUM( 'picture、' article '、' file ')、PRIMARY KEY(content_id)、KEY(foreign_content_id));
注:この例では、MySQL 4を使用することに注意してください。このシステムは、実際のDBMSで多くの人がよりエレガントにできることを認識しています。 しかし、それはすでに別のオペラからの歌になります。
content_tag_mapテーブルは、すでにコンテンツユニットをキーワードに関連付けています。 最も単純なバージョンでは、content_idとtag_idの2つのフィールドのみがあります。 ただし、特別な変態の場合は、レコードが作成された日付のフィールドを追加します。
タグテーブルは非常に単純です。CREATETABLEタグ(tag_id INT UNSIGNED NOT NULL AUTO_INCREMENT、tag VARCHAR(50)、UNIQUE(tag)、PRIMARY KEY(tag_id));
それがすべての数学です。 さらに、このシステムではタンバリンとダンスをアレンジすることができます。
- 簡単な例:同じキーワードを使用して、コンテンツの任意のユニットから他のすべてのコンテンツユニットへのすべてのリンクを取得します。
- より複雑な例:リンクの合計「重み」ですべてのリンクを取得する
- さらに複雑な例:リンクの全体的な「重み」と「関連性」ですべてのリンクを取得します
- 真の変態の例:コンテンツリンクのマップを描画します。
ちょうどいい? もちろん、キャッシュが世界を保存し、コンテンツ自体のキャッシュフィールドにシリアル化された配列の形式ですべてのタグを書き込むことを忘れないでください(これは、MySQL 5またはそれ自体を尊重するDBMSのトリガーを使用して行うことができます)。