タグ データベース スキーマの Toxi ソリューションについて頭を悩ませています。ユーザーがアイテムを送信できるシステムに取り組んでおり、それらのアイテムにタグを関連付けることができます。tagschemas を読んだ後、Toxi ソリューションが私のニーズに最も適していることがわかりました。ただし、これが正しい計画であるかどうかは完全にはわかりませんので、ご意見をお聞かせください。
3 つのデータベースがあります。
items
を含みitem_id
、その他
を外部キーとして
tagmap
使用しitem_id
、およびを含むtag_id
tags
tag_id
tag_text
新しいアイテムを追加する場合、タグをデータベースに追加するプロセスは次のように仮定してもよろしいですか?
- 送信されたタグを配列に並べ替える
- 配列内のすべてのタグに対して:
- tag_text が現在のタグと一致するタグから tag_id を取得する
- それが0行を返す場合:
- タグテーブルにタグを追加
- tag_id を取得する
- item_id と tag_id を tagmap に追加
- 終了 (ユーザーに a-ok などを与える)
これは、すべてのアイテムのすべてのタグのタグマップにエントリが作成されることを意味します。それは正しいように思えますが、膨大な量のエントリで終わるよりも、それを行うためのより良い方法があると思わずにはいられません...
タグの編集に関しては、次のプロセスを考えましたが、まだ見つかっていないより良い方法があると思います。
- item_id を使用してタグを取得し、編集可能なフィールドに挿入します
- ユーザーが変更を行います。提出時:
- item_id が編集中のものと一致するタグマップから行を削除します
- 上記と同じプロセス
私はそこにあるポイント3についてちょっと不安です。タグが削除されたかどうかを確認して、タグを削除して再度追加するのではなく、タグを選択的に削除する方法はありますか? 念のために言っておきますが、tagmap 行を削除しても、関連するアイテムは一緒に削除されません。これは、外部キーとして機能するのではなく、外部キーを指しているからです。
また、タグが使用された回数を追跡したい場合もありますが、表示する必要があるたびにそれらをカウントするクエリを実行したくありません。cron ジョブで、tagmap のすべての tag_id のインスタンス数を 1 時間ごとまたは 2 時間ごとにカウントしてから、tags テーブルの tag_use 値を更新することを考えています。それは正しい方法ですか、それとももっと良い方法はありますか?
振り返ってみると、かなりの量のテキストです。情報が不足しているよりも詳細すぎて、質問が少なすぎるよりも、質問が多すぎて新しいことをたくさん学んでいます。今日はこれを調べるのに多くの時間を費やした可能性が高く、明日はすべてがより理にかなっているでしょう.
前もって感謝します!