2017-08-24 61 views
-3

我對數據庫瞭解不多。我在紙上有一張桌子,上面有4個或5個(ID爲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. 主表:標識,主要
  2. 次要表1:ForeignId,價值
  3. 次表2:ForeignId,價值
  4. 次級表3:ForeignId,值

然後,在與主表的「Id」列相連的所有「ForeignId」列上創建一個外鍵。

當然這些列的名字是可怕的。不要將它們命名爲「價值」,更精確。

目標是在一個字段中有單個值,而不是多個字段。通過這種規範化的設計,您可以使用簡單的字符串比較查詢輔助表,同時將主錶行與相匹配的行連接起來。

相關問題