4

データベースに複数の多対多の関係を作成する必要があります。

「メイン」テーブルが 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 番目のオプションに誘惑されます。考慮すべき落とし穴や追加の問題はありますか?

4

1 に答える 1

3

考慮すべき落とし穴や追加の問題はありますか?

要件の 1 つは、「各行には常に 2 つのフィールドしか使用できない」というものです。MySQL では、この制約を適用する簡単な方法がないため、データの不整合が発生する可能性があります。

複数テーブル設計を使用する場合は、非 NULL フィールドと外部キー制約を使用して一貫性を確保できます。

于 2012-11-29T11:23:39.023 に答える