0

カテゴリとサブカテゴリの柔軟なシステムにレビューを保存したいと考えており、現在、そのためのデータベース構造を設計中です。私はそれをどのように行うかについての考えを持っていますが、それがよりエレガントで効率的に行われることができなかったかどうかは完全にはわかりません。これらは私の考えです-誰かがこれを改善できるかどうか/どのように改善できるかについてコメントできれば、私は本当に感謝しています。

(この投稿を簡潔にするために、テーブルの重要なフィールドのみをリストします)

1.)レビューは「レビュー」テーブルに保存されます。次のフィールドがあります。

id: uniquite ID, auto-incrementing.
title: the title that will show up in <head><title>, etc.
stub: a version of the title without spaces, special chars, etc. so it can be part of the URL/URI
text: the actual content

2.)すべてのカテゴリは同じテーブル「カテゴリ」にあります

id: unique ID, auto-incrementing.
title: the full title/name of the categorie how it will be output on the website
stub: version of the title that will be shown in the URL/URI.
parent_id: if this is a subcategory, here is the categories.id of the parent category. Else this is 0.
order_number: simple number to order the categories by (for display in the navigation menu)

3.)次に、どのレビューがどのカテゴリにあるかを示すインジケータが必要です。は複数にすることができます。私の最初のアイデアは、カテゴリに「review_list」フィールドを追加し、このカテゴリに含まれるべきすべてのreviews.idを含めることでした。ただし、カテゴリにレビューを追加したり、カテゴリからレビューを削除したりするのは面倒で「違法」だと思います。したがって、私の現在のアイデアは、テーブル「review_in_category」を作成し、すべてのレビューとカテゴリの関係のエントリを作成することです。構造は次のとおりです。

id: Unique ID, auto-increment. 
review_id: the reviews.id 
category_id: the categories.id

したがって、レビューが3つの異なるカテゴリにある場合、「review_in_category」テーブルに3つのエントリが作成されます。

ユーザーがwww.mydomain.de/animation/sci-fi/を開くと、ラッパースクリプトがURLをその部分に分割するという考え方です。category.stub = "sci-fi"のカテゴリが複数見つかった場合は、スタブ"animation"の親カテゴリがあるカテゴリを確認します。正しいカテゴリが特定されたら(ほとんどの場合、スタブは一意であるため、このチェックはスキップできます)、category_idがラッパースクリプトによって決定されたものと一致する「review_in_category」からすべてのreview_idを選択します。すべてのreview_idは配列に入れられます。ループはこの配列を反復処理し、「SELECT title、stub FROM reviews WHERE id = review_list [$ counter]」によってすべてのレビュータイトルを一覧表示する(およびスタブ値を使用してそれらへのリンクを作成する)SELECTステートメントを作成し、「

だから私の質問は次のとおりです:-潜在的に多数の「ORid =」パーツを含む単一のSELECTステートメントを作成する方法は、この状況を処理するための「エレガント」および/または効率的な方法ですか、それともより良いバリアントがありますか?-「分類」スタイルのテーブル(review_in_category)を使用することは理にかなっていますか、それとも「メンバーシップ」/「関係」をレビューまたはカテゴリテーブルに直接保存する方がよいでしょうか。-その他の考え...私はこのことを学び始めたばかりで、フィードバックに感謝しています。

ありがとうございました

4

1 に答える 1

0

あなたのデザインは健全に見えます。

カテゴリ内のすべてのレビューを取得するには、結合を使用する必要があります。

SELECT reviews.title, reviews.stub FROM reviews, review_in_category WHERE reviews.id = review_in_category.review_id AND category_id = $category
于 2012-11-26T01:06:29.303 に答える