2010-07-21 61 views
1

我必須爲我的大學建立一個應用程序,這個應用程序將被視爲持續1個月的課程的課程學分。在這個應用程序中,我必須讓用戶有一種方法來保存教師課後續評估,這是一個人去教室,檢查老師並在某些欄目中打勾。這是數據庫設計的不好方法嗎?

一個例子是:

教學方面:
顯示順序,並遵循類序列:是否觀測
給出清楚的例子:YES NO觀測
涉及到學生討論:YES NO觀測

如果用戶(評估者)選擇「是」,那麼觀察結果中不會寫入任何內容,但如果他選擇否,他必須寫出觀察結果。

我怎麼能在我的數據庫中處理這個?我懷疑過度正常化。 :x在繼續這個項目之前,任何建議都會受到歡迎。

我現在的計劃是隻需要一個名爲Followup的大表,它具有Microsoft SQL中的BIT數據類型的所有'方面',並且每個可以爲空的方面都有一個ShowOrderSequenceObservation字段。 O_O我覺得骯髒,所以我轉向你們的開發人員。謝謝!

+0

你有什麼技術可用?只是MSQL? – Caladain 2010-07-21 22:37:02

+0

是的,只是Microsoft SQL Server 2008.我打算將ASP.Net MVC2用作用戶界面,並將Linq-to-SQL用於我的ORM。 – 2010-07-21 22:37:36

+1

我對於「過度規範化」的擔心大部分在SQL中往往很愚蠢。 SQL喜歡以規範化的方式工作(即使沒有對分佈式鍵的支持...) - 非規範化數據可以自動生成,從正常化的數據中自動生成,但往往不太容易。如果「數組」中使用了可變數量的列或列,那麼很可能存在*不夠*規範化。如果需要,從3NF或BCNF開始,然後*向後工作。 – 2010-07-21 22:38:51

回答

1

我會做這樣的事情:

表的實際記錄 - 注意,這是從學生角度來看問題

| record_id | question_id | YESNO | observation | teacher_id | 

表匿名記錄。

| question_id | question_string | 

教師表:

| teacher_id | teacher_string | 

在事物的一般流程,我也將更新學生表要注意「記錄了」和插入的答案都在一個事務中。這將保存學生的匿名性,但也獲得了數據。

編輯 - 我不知道如何ORM這件事情。如果我正在開發它,我會在10到30個小時內用perl和直接訪問sql來破解它。大部分時間將花費在HTML格式上。

+0

我想我錯了我的問題。我不想要匿名,所以你的回答對我不起作用。我需要有一種方法將所有這些評估分配給教師。 – 2010-07-21 22:43:06

+0

@sergio:請參閱編輯。 – 2010-07-21 22:57:01

+0

這看起來很不錯,並且您可以使用CHECK約束(SQL Server 2008中可用)來強制執行,如果YESNO位爲零,則觀察值不能爲空或空字符串 – Zugwalt 2010-07-21 23:37:10

0

聽起來像時間與質量的古老問題。非規範化表格肯定會快速簡單,但是具有類別和問題表格的規範化表格將允許靈活性。你可以將它用於其他事情,允許在飛行中設置新的問題類型等,並可以爲你提供更好的成績。

如果你認爲你可以得到你想要的非規範化表格,我會這樣。這不是一個生產系統,業務需求在其生命週期中不會發生變化。但是,如果你想推動藍絲帶解決方案,我會規範化它。

順便說一句,在每個選項的末尾添加一個< br>使其更具可讀性。

+1

「業務需求在其生命週期中不會發生變化「 - 另一個古老的確定性:需求將會改變,其壽命將超過預測的」1個月「;) – onedaywhen 2010-07-22 09:12:58

0

你知道規範化不僅適用於大型企業級數據庫(我知道你知道:)。歷史表明,如果你不規範,你會得到異常。從5NF開始並從那裏'優化',但我懷疑你會發現不需要優化。

我懷疑所提出的設計不適合其預期目的,例如,數據分析。嘗試編寫一些典型的SQL查詢(例如,在所有教學問題中觀察所有問題的平均觀察時長),您會發現它很痛苦:很多CASE陳述,表UNION多次重複,......很可能你會結束編寫視圖來規範化數據!