0

希望並祈禱大家一定要好。如何保存大型關係數據

我有一個場景,其中我必須編寫一個非常大的一組關係/組合數據,我正在尋找一種實現技術,它必須是超級快速的。它就像AI中的專家系統。

我有4個實體,問題,選項,效益和方案:

  • 每個問題可以有多種選擇
  • 每個選項都可以涉及到一個問題
  • 在選項的任意組合的好處是分配,分配被稱爲場景
  • 一個場景可以與任意數量的選項相關
  • 場景可以涉及任何數量的好處
  • 每個利益可以包含在多個場景

現在,比如我們看一個例子:

  • 我們有4個問題,Q1,Q2,Q3,Q4
  • 第一季度有3個選擇q1o1,q1o2,q1o3
  • Q2具有4個選項q2o1,q2o2,q2o3,q2o4
  • Q3具有5個選項q3o1,q3o2,q3o3,q3o4,q3o5
  • Q4有2個選擇q4o1,q4o2
  • 方案1:對於[q1o1,Q201]益處B1分配
  • 方案2的組合:對於[q1o1,Q201,Q303]益處b2的組合被分配
  • 方案3:對於[Q201,Q304] B3分配
  • 場景4的一個好處組合:對於[Q304,Q401] B4分配
  • 場景5的一個好處組合:用於組合[Q402] B5分配
  • 方案6的一個好處:爲組合[q1o2,q2o2,q3o1,q4o1] B5分配

所以在這樣

    受益
  • ((3 + 1)ç 1×(4 + 1)ç 1×(5 + 1)ç 1×(2 + 1)ç 1) - 1
  • (4×5×6×3) - 1個
  • 360 - 1

場景可以是構建。其中C表示爲組合

如果問題轉到25和每一個問題應該有5個選項

  • ((5 + 1)^ 25 - 1)
  • 6^-1 25

可以構建場景

我正在尋找一種將此關係/組合數據存儲到數據庫的最佳方法並想要訪問它。將等待你們的迴應。

回答

0

下面一組表將做到這一點。

question: 
    id 
    ... 

option: 
    id 
    question_id 
    ... 

option_scenario: 
    option_id 
    scenario_id 

scenario: 
    id 
    option_count 
    ... 

scenario_benefit: 
    scenario_id 
    benefit_id 

benefit: 
    id 
    ... 

是在設計非規範化的一件事是,scenario.option_count應該是事物的計數option_scenarioscenario_id

要查詢它,你需要大量使用子查詢。假設person_option是另一張具有特定人員選項的表格。然後找到你需要的人的好處:

SELECT b.* 
FROM (
    SELECT s.scenario_id 
    FROM person_option po 
     JOIN scenario_option so 
     ON so.option_id = po.option_id 
     JOIN scenario s 
     ON s.id = so.scenario_id 
    WHERE po.person_id = ? 
    GROUP BY so.scenario_id, s.option_count 
    HAVING s.option_count = COUNT(DISTINCT po.option_id) 
) ps 
    JOIN scenario_benefit sb 
    ON sb.scenario_id = ps.scenario_id 
    JOIN benefit b 
    ON b.id = sb.benefit_id 
+0

非常感謝。我也接觸到了這個解決方案,但是沒有什麼問題。 'HAVING s.option_count = COUNT(DISTINCT po.option_id)' 解決了這個問題。 真的非常感謝。 – 2011-03-24 07:11:41