鍍金池/ 問答/數(shù)據(jù)庫/ 給出一個數(shù)組,搜索其中的任意2個字段,這樣的mysql數(shù)據(jù)庫應該怎么設計呢?

給出一個數(shù)組,搜索其中的任意2個字段,這樣的mysql數(shù)據(jù)庫應該怎么設計呢?

比如說我有一個數(shù)組:['空氣', '氧氣', ‘氮氣’, '氯氣', '氟氣']。現(xiàn)在我想要根據(jù)數(shù)據(jù)庫里保存的數(shù)據(jù),比如數(shù)據(jù)庫有條記錄:空氣 + 氧氣 = 水。搜索數(shù)據(jù)庫并列出這個數(shù)組里所有氣體之間能發(fā)生的化學反應。那么數(shù)據(jù)庫應該只返回有1條結果:空氣 + 氧氣 = 水

我現(xiàn)在打算這么新建一個表:

id keywords result
1 空氣+氧氣 水

請問這樣要搜索['空氣', '氧氣', ‘氮氣’, '氯氣', '氟氣']里所有2個氣體的組合,這個表這么設計好么?還有其它好的設計么?最后這個查詢怎么寫比較好呢?

回答
編輯回答
吢丕

表設計:comb(id, key1, key2, result)
索引:unique(key1, key2)

插入數(shù)據(jù):要先排序,取兩兩組合
查詢:對查詢條件排序,保證一致性,如輸入是氧氣、氮氣,排序查詢?yōu)榈獨?、氧氣?br>查詢:

select result from comb where key1='氮氣' and key2='氧氣'

插入數(shù)據(jù)構造python示例:

from itertools import combinations as comb
s = ['空氣', '氧氣', '氮氣', '氯氣', '氟氣']
print(list(comb(sorted(s), 2)))

輸出

[('氮氣', '氟氣'), ('氮氣', '空氣'), ('氮氣', '氯氣'), ('氮氣', '氧氣'), ('氟氣', '空氣'), 
 ('氟氣', '氯氣'), ('氟氣', '氧氣'), ('空氣', '氯氣'), ('空氣', '氧氣'), ('氯氣', '氧氣')]
2018年8月29日 00:37