1

これらの行を持つテーブルがあると仮定しましょう:

-personID,
-personName,
-personInterests

関心を格納する別のテーブルもあります。

-interestID
-interestName

1 人が複数の興味を持っている可能性があるため、フィールドにserialize()-d またはJSON表現を入れました。これは「読書」のような ではなく、可能性のある興味を格納するテーブルのインデックスです。1 つのフィールドに複数の外部キーのようなもの。interest arrayinterestStringinterests

最善の方法は外部キーを使用することですが、1 つのフィールドで複数の参照を実現することはできません...

フィールドのコンテンツをソフトウェアで分割せずに、または分割せず に、そのようなクエリを実行するにはどうすればよいですか? REGEX1 つのフィールドにインデックスを配置することができない場合、どうすればこのような構造を実現できるでしょうか?

4

2 に答える 2

3

複数のインデックスまたは参照を 1 つのフィールドに格納することは、厳密にはお勧めできません。私が「ランデブー」テーブルと呼ぶものを作成する必要があります。

あなたの場合、次のとおりです。

 - ID
 - UserID (foreign key)
 - InterestID (foreign key)

一人一人が複数の興味を持っている可能性があるため、ある人が自分自身に新しい興味を追加するときは、このテーブルに新しい行を追加するだけで、その人への参照と目的の興味を外部キーで持つことができますNOT NULL

利用可能なバリエーションが多すぎる大規模なプロジェクトでは、IDこのテーブルに行を与えるのではなく、2 つforeign keysも設定するprimary keysことをお勧めしtable-indexます。ルックアップの場合、高価な計算能力の消費が少なくなります。

したがって、最善の解決策は次のとおりです。

 - UserID (foreign key AND primary key)
 - InterestID (foreign key AND primary key)
于 2013-08-07T03:36:03.007 に答える
1

これを実装できる唯一の方法は、トリガーによって実際に更新される3番目のテーブルを作成することだと思います(Gabor Daniがアドバイスしたことと同様)

Table1 
-personID,
-personName,
-personInterests

Table2 
-interestID
-interestName

Table3 
-personInterestID (AutoIncrement Field)
-personID
-interestID

次に、フィールド内のすべての値をループする必要があるため、これを行うトリガーを作成する必要があります。ストアド プロシージャが必要になる場合があります。

于 2013-08-07T08:00:38.970 に答える