我有一個複雜的數據結構,我正在使用,我不太清楚如何在單個SQL查詢中解決它,但我的直覺告訴我應該可以這樣做。計劃選擇的數據驅動限制
我正在做的事情的本質是試圖根據選定的硬件模型顯示給定供應商的可用計劃的結果。結果應該僅遵循可能的組合,並且計劃包含當前作爲鍵/值對存儲在限制表中的限制。下面就是我一起工作的簡化:
(我將使用無線設備的比喻,因爲幾乎每個人都在用手機familair)
車型表
model_id
vendor_id
is_data
is_voice
is_4g
is_3g
樣本數據:
model_id,vendor_id,is_data,is_voice,is_4g,is_3g
DeviceA,Sprint,1,1,0,1
DeviceB,Sprint,1,0,1,0
DeviceC,Sprint,0,1,0,0
DeviceD,Sprint,0,1,0,0
DeviceE,Sprint,0,1,0,0
DeviceF,Verizon,1,1,0,1
DeviceG,Verizon,1,0,1,0
DeviceH,Verizon,0,1,0,0
DeviceI,Verizon,0,1,0,0
DeviceJ,Verizon,0,1,0,0
DeviceK,Tmobile,1,1,0,1
DeviceL,Tmobile,1,0,1,0
DeviceM,Tmobile,0,1,0,0
DeviceN,Tmobile,0,1,0,0
DeviceO,Tmobile,0,1,0,0
計劃表
plan_id
vendor_id
name
示例數據:
plan_id,vendor_id,name
PlanA,Sprint,Big Data Only Plan
PlanB,Verizon,Small Data Only Plan
PlanC,Sprint,300 Min Plan
PlanD,Verizon,900 Min Plan
PlanE,Verizon,Big Data Only Plan
PlanF,Tmobile,Small Data Only Plan
PlanG,Tmobile,300 Min Plan
PlanH,Tmobile,1000 Min Plan
plan_restrictions表
restriction_id
vendor_id
plan_id
type
value
示例數據:
restriction_id,vendor_id,plan_id,type,value
1,Sprint,PlanA,radio,3G
2,Sprint,PlanA,device_type,data
3,Verizon,PlanB,radio,4G
4,Sprint,PlanC,radio,3G
5,Sprint,PlanC,device_type,voice
6,Verizon,PlanD,radio,3G
7,Verizon,PlanD,device_type,voice
8,Verizon,PlanE,radio,3G
9,Verizon,PlanE,device_type,voice
10,Tmobile,PlanF,device_type,data
11,Tmobile,PlanG,device_type,voice
12,Tmobile,PlanH,device_type,voice
個
限制鍵控(我有接近50實際上,這裏是一個相同類型的表示):
type/value possibilities
radio/3g, 4g
device_type/data, voice
我打開改制表的可能性,以使其更容易重新查詢,但是我需要保留一定的靈活性,因爲我確實有大約1000個模型,1000個計劃和大約2000個限制。
我個人認爲這裏有一些結構問題,即。模型可能應該將其元素作爲鍵/值對在單獨的表中,但這更加複雜,並且我還沒有確定如何正確應用數據驅動的限制。
我很難想象你在說什麼。是否有可能獲得一些樣本數據和期望的輸出? –
只是一個簡單的說明,我曾想過在計劃和模型之間放置多對多的表格,並以這種方式處理它,我嘗試這種方式的唯一原因是因爲大多數情況下,公平地說:幾乎所有的設備每個供應商的支持幾乎可以擁有供應商提供的幾乎所有計劃,並且具有最小限制。我會爲你上傳一些模擬數據。 – Dave
Dave,閱讀你關於限制的硬編碼的評論,我想更好地理解這個問題。一旦選擇了供應商,我們就剩下一些我們需要通過限制進行過濾的計劃和模型。您的模型的主要問題在於,您在模型表格上存儲Data/Voice/Raido類型的方式與限制中的存儲方式不同。這意味着在你做簡單的INNER JOIN之前,你需要做一個Restrictions表的簡單轉換。無論如何,這將需要一些硬編碼。 – Bulat