2017-08-24 3 views
-3

データベースについてよくわかりません。私は4または5(idのための1)の列を持っている紙の上にテーブルを持っています。 1つはプライマリと単一の値ですが、他の列はセカンダリで複数の値を持つことができます。今私はいくつかの値を持っていると私は二次列でこれらの値を検索し、最高の一致したプライマリ列を返す必要があります。すなわち複数の値の列に使用するデータベース

Id  Primary  Secondary_1  Secondary_2 Secondary_3 
1   ABCD   12,11,9   51,52   77 
2   ABCE   9,15,17   12,14,7  71,77 
3   ABEF   8,9,14,12  51,7   77,71 
4   ABEG   7,9,15   52,14   77,78 

二列は、文字列型を持つことができます。今、私が(8,9,14,77) を検索しなければならないとしたら、それはABEFを返すべきです。検索(9,51,77)の場合は(ABCD、ABEF)などが返されます。だから私の問題は、どのように私はこのタイプの問題に使用する必要がありますスキーマデータベースを格納する方法です。

+1

セカンダリが3つある理由はありますか? –

+3

より緊急な点は、これは**非常に悪いデザイン**です。このサイトを検索すると、 "多価値"列からデータをクエリしようとする開発者からの多くの質問があります。これはSQLの仕組みではなく、その結果のクエリは恐ろしいものですが、パフォーマンスはひどく、データベースは必然的に破損した状態になります。データベースを使用する場合は、適切なデータモデリングを行います。それ以外の場合は、JSONドキュメントストアまたは同様の無料のファイアゾーンを使用します。 – APC

答えて

3

あなたが主テーブルに加えて3つのテーブルを作成し、プライマリテーブルにその行を接続するための外部キーを使用する必要があります。

  1. 主テーブル:ID、プライマリ
  2. 二表1:ForeignId、値
  3. 二次表2:ForeignId、値
  4. 二次表3:ForeignId、値

次に、プライマリ・テーブルの「ID」列に接続されているすべての「ForeignId」列に外部キーを作成します。

もちろん、これらの列の名前はひどいです。正確に言えば、「価値」という名前は付けないでください。

目標は、複数のフィールドではなく、1つのフィールドで単一の値を持つことです。このような正規化された設計では、簡単な文字列比較で2次表を照会し、1次表の行と一致する行を結合することができます。

関連する問題