最近、1 つまたは複数のテーブルに関連する問題が発生しました。
例: アプリケーション テーブル app_table があり、マテリアル テーブルが多数あります (material_table1、material_table2...、
各マテリアル テーブルについて、1 つのマテリアルが複数のアプリケーションで使用され、1 つのアプリケーションでも使用される可能性があります)複数の素材。各材質テーブルと適用テーブルはこの関係にあり、各材質テーブル間には関連性はありません。
多対多であることは明らかですが、問題は、テーブルを多対多に従って作成すると、材料テーブルごとに中間テーブルを作成する必要があることです。
私は今、アプリケーション テーブルにフィールドを追加し、各マテリアルのフィールドを追加するというアイデアを思いつきました。フィールドには、このアプリが所有するマテリアルの ID
がカンマで区切られて保存されます。ただし、問題は、この場合、クエリを 2 回行う必要があり、最初にアプリケーション テーブルのフィールドをフィルタリングし、次にクエリされたデータを条件に従ってフィルタリングする必要があることです。
もっと良い計画やアイデアがあるかわかりませんが、皆さんありがとうございます
ちょっと説明がわかりにくいのですが、素材のカテゴリーごと(素材テーブル)にインターフェースがあるのですが、素材を返却する際に用途に応じてフィルタリングする必要があり、複数の素材を使用するアプリケーションもあります( 1 つの材料テーブル)、テーブル内の複数の材料)、1 つの材料を複数のアプリケーションで使用できます。現状では、各材料テーブルを区別するためにアプリケーションフィールドを追加していますが、これには多くのエントリを追加する必要があります。そこで、応用表を作ってから、材質ごとの関連付け表を作るかどうかを考えました。このようにして、リクエストを作成するときに、最初にリクエスト パラメータのアプリケーション名に基づいてアプリケーション テーブル内のデータを検索し、次に関連付けに基づいて関連するマテリアル テーブル内の修飾されたデータを検索できます。
もっと良い方法があるかどうかわかりません。
まず第一に、テーブル構造の設計に何か問題があります。複数の資料、履歴書に複数の資料リストが必要なのはなぜですか?マテリアルの種類を使用して区別できます。
なぜ材料を表に分けるのかわかりませんが、そうであれば、材料の種類が違うからだと思います
app
アプリケーション テーブルapp
应用表material
素材表material_type
素材类型app_material
material
マテリアル テーブルmaterial_type
マテリアル タイプ🎜app_material
マテリアル アプリケーション関係テーブル🎜関連テーブルは 1 つだけ必要な気がします:
関連付けテーブル
アプリケーションID 素材テーブルID 素材ID
01 07 08
アプリケーションで使用されるマテリアルを決定できます
コメント: 多対多はどこから来たのでしょうか? 各材料テーブルのフィールドは異なりますが、アプリケーション テーブルは特定の種類の材料テーブル (材料テーブルの要素) と多対多の関係を持っています。アプリケーション テーブルはすべてのマテリアル テーブルと多対多の関係を持ちます。これは多対多の関係ではなく、包含と非包含の関係です。
まず、あなたの考えによると、データテーブルは非常に大きくなり、将来的にはメンテナンスが困難になるため、マテリアルのプロパティをjsonに変換するか、シリアル化して保存することをお勧めします。
1対多のリレーションシップの場合、通常は中間テーブルを使用し、1対1のリレーションシップの場合のみ、リレーションシップを表す列が追加されます
A A_ID A_OTHER
リーリーB B_ID B_OTHER
C C_ID C_OTHER
REF REF_ID(配列) A B C D E …
マテリアルテーブル名 |
キーワード、多態性関連