我正在編寫一個應用程序,它將爲我們的地點生成檢查。基本上,把它們想象成健康檢查表格。每一次「檢查」都會有一系列的問題和答案。答案可以是數字(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)
但這裏的地方我有點卡住。我不知道如何構建問題答案表來計算分數,沒有分數和不同的數據類型。
另外,我知道我需要將商店映射表用於檢查等等,但現在我已經把這些全部關閉了,因爲這對問題並不重要。
因此,我應該爲所有可能的答案(從選項表或輸入爲文本構建)存儲在該表中,然後創建映射表以將「答案」映射到「問題」 (用於任何特定的檢查)並將點存儲在那裏?
我只是沒有想好。我可以使用一些幫助。
寫得很好的問題+1。我有幾個回報:-)。爲什麼「建築物是否乾淨有10」,通常點數值的數量是否會從1-5變成?另外,爲什麼冷凍室溫度是「數字文本」;它不會總是一個數字嗎? – Ben
@Ben「建築物是否乾淨」將作爲選項1-5,但問題值得10分,因爲這是檢查中的重量。這是檢查等級的10%,但我不希望人們必須在1-10之間回答,並且希望他們回答1-5。 (這是一個過於簡單的例子,不存在這樣的問題,但問題仍然是一樣的)通過數字文本,我的意思是他們必須將其鍵入答案字段,而不是多個選擇的問題(是,否,1 ,2,3,4等),這可能是無線電輸入。 – Andy