2012-07-03 53 views
4

我正在編寫一個應用程序,它將爲我們的地點生成檢查。基本上,把它們想象成健康檢查表格。每一次「檢查」都會有一系列的問題和答案。答案可以是數字(1,2,3,4,5 - 表示它們的點數值),也可以是多選('是','否'),它們將映射到點(1代表是0,否)和平面文本答案,這些答案不會映射到點但可能能夠被應用程序層用於平均。例如,我們可以爲「醬油溫度」設置一個不帶點的字段,但可用於報道道路。考試/考試題型/答案的計劃

問題可以在多個檢查表單上重複使用,但可以具有不同的點值。所以可以回答。

我很難搞清楚這個模式。我的本能說EAV會是一個好的方法,但我越想越想越多,我越想越多的數據倉庫模型會更好。

特別是,我有一個問題,找出將min_points,max_points和no_points映射到每個問題/答案的最佳方法。這是我想我將不得不使用EAV的地方。實際上,我有點困惑。如果這是一項調查或者沒有積分的點,或者每個答案的點數值相同,那麼這將非常簡單。問題表,答案表,輸入類型的一些樣板表等等。但是由於每個問題都可能有一個點值,並且該點值可能會根據哪個位置使用該問題而發生變化,所以我不知道如何繼續。

因此,示例性的問題如下

  • 放入食物熱[是,否]可能的點= 5(5爲是,0爲無)
  • 放入食物好吃並[1,2 2,3,4,5]可能的分數= 5(1代表1,2代表2等)
  • 是值班經理[是,否]可能的分數= 5(5代表是,0代表否)
  • 建築物是否清潔[1,2,3,4,5]可能的分數= 10(1,2代表1,4代表2,6代表3等)
  • t他的工作人員專業[是,否]可能分數= 5(5沒錯,0表示無)
  • 冷凍室溫度[數字文本輸入]
  • 值班經理[文字輸入]

由於所有的答案可以有不同的數據類型和點值我不知道如何爲他們建立數據庫。

我想(其它表,名稱和其他細節小鬼遺漏或更改爲簡潔)

CREATE TABLE IF NOT EXISTS inspection(
id mediumint(8) unsigned not null auto_increment PRIMARY KEY, 
store_id mediumint(8) unsigned not null, 
inspection_id mediumint(8) unsigned not null, 
date_created datetime, 
date_modified timestamp, 
INDEX IDX_STORE(store_id), 
INDEX IDX_inspection(inspection_id), 
FOREIGN KEY (store_id) REFERENCES store (store_id)ON DELETE CASCADE, 
FOREIGN KEY (inspection_id) REFERENCES inspection (inspection_id)ON DELETE CASCADE) 

CREATE TABLE IF NOT EXISTS input_type(
input_type_id tinyint(4) unsigned not null auto_increment PRIMARY KEY, 
input_type_name varchar(255), 
date_created datetime, 
date_modified timestamp) 

CREATE TABLE IF NOT EXISTS inspection_question(
question_id mediumint(8) unsigned not null auto_increment PRIMARY KEY, 
question text, 
input_type_id mediumint(8), 
date_created datetime, 
date_modified timestamp) 
CREATE TABLE IF NOT EXISTS inspection_option(
option_id, 
value) 

但這裏的地方我有點卡住。我不知道如何構建問題答案表來計算分數,沒有分數和不同的數據類型。

另外,我知道我需要將商店映射表用於檢查等等,但現在我已經把這些全部關閉了,因爲這對問題並不重要。

因此,我應該爲所有可能的答案(從選項表或輸入爲文本構建)存儲在該表中,然後創建映射表以將「答案」映射到「問題」 (用於任何特定的檢查)並將點存儲在那裏?

我只是沒有想好。我可以使用一些幫助。

+0

寫得很好的問題+1。我有幾個回報:-)。爲什麼「建築物是否乾淨有10」,通常點數值的數量是否會從1-5變成?另外,爲什麼冷凍室溫度是「數字文本」;它不會總是一個數字嗎? – Ben

+0

@Ben「建築物是否乾淨」將作爲選項1-5,但問題值得10分,因爲這是檢查中的重量。這是檢查等級的10%,但我不希望人們必須在1-10之間回答,並且希望他們回答1-5。 (這是一個過於簡單的例子,不存在這樣的問題,但問題仍然是一樣的)通過數字文本,我的意思是他們必須將其鍵入答案字段,而不是多個選擇的問題(是,否,1 ,2,3,4等),這可能是無線電輸入。 – Andy

回答

0

這裏沒有正確或錯誤的答案,我只是拋出一些想法和討論點。

我會建議基本的「單位」不是問題,但是這對問題+回答類型(例如1-5,文字或其他)。在我看來,Was the food hot/range 1 to 5Was the food hot/text description是如此不同,你會堅持嘗試將問題與兩個(或更多)答案類型聯繫起來(更不用說回答這些答案的答案 - 現在忽略這一點,我稍後再接)。將這對貨品稱爲QnA物品。你可能會得到很多類似的對,但是,嘿,這是你必須處理的。

所以你有一個QnA項目的「池」。他們如何選擇使用?具體形式(或問卷)是從游泳池中的物品構建的,還是每次填寫問卷時都會隨機選擇?表單是與表單特定相關的,還是表單可以在任何位置使用?他們在建立表格/問卷時有多挑剔? QnA項目如何被收集/相互關聯和/或有最終結果是非常重要的,在開始編寫代碼之前,你應該全力以赴,除非你真的喜歡重寫代碼。

給定一個QnA項目,你還應該有一個該項目的「答案鍵」 - 一個給定的答案(根據項目答案類型)測量的方法:零,值,值* 2,任何。這顯然可以從使用情況到使用情況有所不同(調查問卷到調查問卷?它是否根據調查問卷的呈現位置而有所不同?如果是,如何或爲什麼?)是否存在標準化答案關鍵算法(alwyas爲零,總是爲值* 2,等等)還是這些也非常自由的形式?確定它們如何使用/與QnA項目相關聯對正確的建模將是必不可少的。

+0

檢查按每個商店進行,每個商店將進行多次檢查。這些問題將在每次檢查中設定。所以,作爲管理員用戶,我會創建一個檢查表單,並用q/a池中的問題和答案填充它。在任何給定的檢驗表格中,根據使用的檢驗結果,問題可能會有不同的點可能性。我希望能給你一個更好的主意。我已經弄清楚了所有的需求,現在我正試圖弄清楚實現。我還沒有編寫代碼,因爲我還沒有弄清楚如何在架構方面做到這一點。 – Andy

+0

另外,我想你必須做出重複的QA對,才能夠處理得分。沒有真正考慮過這個問題,特別是如果我想用權重和分數來製作答案密鑰的話。不過,這感覺就像是一個更清潔的模型。我知道這不是一個新問題。 – Andy