mysql - 1 つのテーブルと複数のテーブルの間に多対多の関係があります。それを設計するにはどうすればよいですか?
PHP中文网
PHP中文网 2017-06-06 09:52:18
0
7
905

最近、1 つまたは複数のテーブルに関連する問題が発生しました。

例: アプリケーション テーブル app_table があり、マテリアル テーブルが多数あります (material_table1、material_table2...、
各マテリアル テーブルについて、1 つのマテリアルが複数のアプリケーションで使用され、1 つのアプリケーションでも使用される可能性があります)複数の素材。各材質テーブルと適用テーブルはこの関係にあり、各材質テーブル間には関連性はありません。

多対多であることは明らかですが、問題は、テーブルを多対多に従って作成すると、材料テーブルごとに中間テーブルを作成する必要があることです。

私は今、アプリケーション テーブルにフィールドを追加し、各マテリアルのフィールドを追加するというアイデアを思いつきました。フィールドには、このアプリが所有するマテリアルの ID
がカンマで区切られて保存されます。ただし、問題は、この場合、クエリを 2 回行う必要があり、最初にアプリケーション テーブルのフィールドをフィルタリングし、次にクエリされたデータを条件に従ってフィルタリングする必要があることです。

もっと良い計画やアイデアがあるかわかりませんが、皆さんありがとうございます


ちょっと説明がわかりにくいのですが、素材のカテゴリーごと(素材テーブル)にインターフェースがあるのですが、素材を返却する際に用途に応じてフィルタリングする必要があり、複数の素材を使用するアプリケーションもあります( 1 つの材料テーブル)、テーブル内の複数の材料)、1 つの材料を複数のアプリケーションで使用できます。現状では、各材料テーブルを区別するためにアプリケーションフィールドを追加していますが、これには多くのエントリを追加する必要があります。そこで、応用表を作ってから、材質ごとの関連付け表を作るかどうかを考えました。このようにして、リクエストを作成するときに、最初にリクエスト パラメータのアプリケーション名に基づいてアプリケーション テーブル内のデータを検索し、次に関連付けに基づいて関連するマテリアル テーブル内の修飾されたデータを検索できます。
もっと良い方法があるかどうかわかりません。

PHP中文网
PHP中文网

认证0级讲师

全員に返信(7)
阿神

まず第一に、テーブル構造の設計に何か問題があります。複数の資料、履歴書に複数の資料リストが必要なのはなぜですか?マテリアルの種類を使用して区別できます。
なぜ材料を表に分けるのかわかりませんが、そうであれば、材料の種類が違うからだと思います

app アプリケーション テーブルapp 应用表
material 素材表
material_type 素材类型
app_materialmaterial マテリアル テーブル

material_type マテリアル タイプ🎜app_material マテリアル アプリケーション関係テーブル🎜
いいねを押す +0
漂亮男人

関連テーブルは 1 つだけ必要な気がします:

関連付けテーブル
アプリケーションID 素材テーブルID 素材ID
01 07 08

アプリケーションで使用されるマテリアルを決定できます

いいねを押す +0
世界只因有你

コメント: 多対多はどこから来たのでしょうか? 各材料テーブルのフィールドは異なりますが、アプリケーション テーブルは特定の種類の材料テーブル (材料テーブルの要素) と多対多の関係を持っています。アプリケーション テーブルはすべてのマテリアル テーブルと多対多の関係を持ちます。これは多対多の関係ではなく、包含と非包含の関係です。

いいねを押す +0
伊谢尔伦

まず、あなたの考えによると、データテーブルは非常に大きくなり、将来的にはメンテナンスが困難になるため、マテリアルのプロパティをjsonに変換するか、シリアル化して保存することをお勧めします。

いいねを押す +0
某草草

1対多のリレーションシップの場合、通常は中間テーブルを使用し、1対1のリレーションシップの場合のみ、リレーションシップを表す列が追加されます

いいねを押す +0
Peter_Zhu

A A_ID A_OTHER
B B_ID B_OTHER
C C_ID C_OTHER
REF REF_ID(配列) A B C D E …

リーリー

いいねを押す +0
巴扎黑

マテリアルテーブル名 |

キーワード、多態性関連

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート