私は、(stackoverflowタグに似た)新しく作成されたコンテンツにタグを付けるように求めるウェブサイトに取り組んでいます。しかし、このタグをどのように保存するのですか? 、mysqlデータベースを使用している場合、私は列の数とタグ自体の数に制限を設定する必要があります。私はどのアプローチに従うべきかをユーザーに無制限のタグ付けオプションを与えることを望んでいるので、無制限のタグをデータベースに保存する方法は?
答えて
これは古典的なとnとの関係です。このように
単一のコンテンツに複数のタグを格納するには、それぞれのタグのcontent_tagsテーブルにレコードを追加します。例:
content_tags table
------------------
content_id | tag_id
1 | 2
1 | 5
1 | 1
、コンテンツレコードのタグを取得するには、実行します。
select t.*
from tags t
join content_tags ct on ct.tag_id = t.id
join content c on ct.content_id = c.id
where c.title = 'my content title'
ありがとうございます。限られたタグを使ってみると、合計が20であるとしましょう。それから私は20列を作成し、いくつかのユーザーのタグを与えなかったと仮定します(これはほとんどの場合です)。このシナリオでは、ほとんどの列が空になります。このケースで何をすればいいのですか?テーブルエントリを空にしておくのは良い方法でしょうか? – Republic
私の答えで言及したデザインは、固定されているかどうかに関係なく、どれだけ多くのタグを選択するかということです。もし最大値があれば。 1つのポストにつき1つのタグがあれば、もちろんこのようにはしません。 –
私は、タグの名前を格納する別のテーブルを作成します。次に、外部キーを使用する必要があります。タグを選択すると、行の各エントリリンクがあなたのタグテーブル。そうすれば、タグテーブルに追加し続けることができるので、「無制限のタグ」を保存することができます。
は、この問題にアプローチするために複数の方法があります。
- 他の答えが示唆するように、作成しますデータベース内のテーブル
tags
を具体的に示します。これはこれを行う最も伝統的な方法です。たとえば、wordpressはtags
とcategories
のテーブルを持ち、posts
テーブルにリンクしており、ユーザーが発行した各投稿が格納されています。 - 別の方法は、別の
tags
テーブルに格納するのではなく、json
フィールド(現在のほとんどのデータベースにはmysqlとpgsqlを含む)にメインテーブル自体を格納することです。この利点は、1つの結合が削除されるため、クエリが高速になることです。欠点は、正規化の通常の利点、つまり効率的なストレージサイズが得られないことです。 - もう1つのメモやLOBフィールドに区切り文字を使用してタグを保存することもできます。カンマ区切り文字を使用すると、
html,css,javascript
のようになり、処理するたびに区切り文字を使用して分割します。もちろん、デリミタ(この例ではカンマ)をタグの一部として使用できないという明らかな欠点があります。
JOINを削除すると、何らかの形でクエリのパフォーマンスが向上するという考えは、間違っています – Strawberry
- 1. drupal 8のフィールドコレクションの無制限フィールドを保存する方法は?
- 2. テキストファイルに保存する生データを制限する方法
- 3. mysqlデータベースには存在しない無制限の英数字の文字列を生成する方法は?
- 4. 再起動後にトグルボタンの状態を無制限に保存する方法はありますか?
- 5. セキュリティ制限:データベースクエリの結果をローカルファイルに保存する方法は?
- 6. 保存後に返されるプロパティを制限する方法は?
- 7. データベースの行数を自動的に制限する方法は?
- 8. セッションIDと有効期限をデータベースに保存する方法は?
- 9. データベースのパスワードを保存する方法
- 10. パラメータの制限なしで無制限の引数を取得する方法
- 11. Select2で新しいタグを作成してデータベースに保存する方法
- 12. SQLiteデータベースのサイズ制限を140TBに増やす方法は?
- 13. Java RDDの各要素のデータベースへの通知制限を読み込んで保存する方法
- 14. Firebase:ビデオをストレージに保存し、ビデオURLをデータベースに保存する方法は?
- 15. データベースへのフラッシュを制限する方法は?
- 16. データベースへの保存時に空の入力を無視する方法
- 17. cocos2d-xの60 FPSを無制限にする方法
- 18. SQLiteデータベースのサイズを2MBに制限する方法
- 19. xpathクエリデータをHTMLタグでsaveHTMLに保存する方法は?
- 20. アセンブリのx86でループを制限する方法(無限に印刷する)?
- 21. wordpressメディアアップロードで不要な画像の保存を制限する方法
- 22. 制限時間内にアップロードを無効にする方法
- 23. NSUserDefaultsの値をデータベースのように保存する方法は?
- 24. IE10でのindexeddbの保存制限
- 25. elastocsearchデータベースの保存方法は?
- 26. 「無制限」ダイナミックコントロールからデータベースに値を入力する
- 27. 同じ行に要素を無制限に置く方法は?
- 28. 使用方法アノテーションとタグを正しく制限する
- 29. トーストのテキストフィールドをデータベースに保存する方法は?
- 30. Symfony2の "access_control"情報をデータベースに保存する方法は?
制限付きタグを使用すると、合計で20個と言えます。それから私は20列を作成し、いくつかのユーザーのタグを与えなかったと仮定します(これはほとんどの場合です)。このシナリオでは、ほとんどの列が空になります。このケースで何をすればいいのですか?テーブルエントリを空にしておくのは良い方法でしょうか? – Republic