データベースに複数の多対多の関係を作成する必要があります。
「メイン」テーブルが 1 つあります。これを「プロジェクト」と呼びましょう。
次に、「オプション」を含む 3 つのテーブルがあります。
カテゴリ、地域、ユーザーがあるとしましょう。これらが保持する唯一の情報は、アイテムの名前と ID です。
複数のカテゴリ、地域、およびユーザーを複数のプロジェクトに割り当てることができます。
したがって、この関係を作成するには 2 つのオプションがあります。
1) 「オプション」テーブルごとに関係テーブルを作成します。各テーブルには、「project_id」と、category_id、region_id、または user_id のいずれかの 2 つの列が含まれます。この方法を使用すると、3 つの関係テーブルがあり、各テーブルは 1 組のテーブル間の関係のみを処理します。例えば:
****************************
* project_id * category_id *
****************************
* 1 * 3 *
*------------*-------------*
* 3 * 4 *
*------------*-------------*
2) project_id、category_id、region_id、user_id の 4 つの列を持つ関係テーブルを作成します。各行には、常に 2 つのフィールドのみが使用されます。project_id、次に関連するアイテムのフィールドの id。
**************************************************
* project_id * category_id * user_id * region_id *
**************************************************
* 1 * 3 * * *
*------------*-------------*---------*-----------*
* 3 * 4 * * *
*------------*-------------*---------*-----------*
* 3 * * 2 * *
*------------*-------------*---------*-----------*
* 4 * * * 3 *
*------------*-------------*---------*-----------*
追加の関係テーブルを作成する必要がなくなるため、2 番目のオプションに誘惑されます。考慮すべき落とし穴や追加の問題はありますか?