. . プロジェクトの古い MySQL データベースをリファクタリングしています。products テーブル (約 20k 行で、40k またはそれ以上になる可能性があります) とさまざまな種類の分類 (現在は 4 種類) があります。簡単にするために、2 つの明白で一般的なサンプル タイプ (「カテゴリ」と「タグ」) のみを使用して例を作成します。これは単なる例であり、もちろん私はクリエイティブな人間ではありません。
. . カテゴリとタグが結び付けられたすべての製品のリストを取得する必要があります。この例の (適切で大幅に簡略化された) データベース構造は次のようになります。
- Products テーブル: ID、名前
- カテゴリ テーブル: id、名前
- タグ テーブル: ID、名前
- Products_Tags テーブル: product_id、tag_id
- Products_Categories テーブル: product_id、category_id
. . サブクエリを使用してリレーションシップをフラット化でき(この記事GROUP_CONCAT
に良い例があります)、比較的優れたパフォーマンスを実現できますが、これは MongoDB のようなドキュメント指向のデータベースでは当てはまらないのではないかと思います。次のような単一のドキュメント:
- 製品テーブル: {id、名前、カテゴリ: []、タグ: []}
. . ドキュメント指向のルートに進むと、さまざまな種類の製品にさまざまな種類のカテゴリを使用できるという追加の利点がありますが、データベースに任せるのではなく、コードでデータの一貫性をチェックする必要があります。
. . より良い代替手段はありますか?ヒント、アイデア、同様の経験はありますか?