2015-04-01 33 views
0

我在Web應用程序,它取代紙質表格申請的課程創建/修改/刪除工作,我需要幫助的最好的數據庫設計實踐,用於存儲要求項目。數據庫設計,創建/修改/刪除申請表

注意

  • 數據庫僅僅是請求的數據。一旦請求獲得批准,數據必須手動輸入到不同的系統中。 (我們在此沒有控制)

  • 它得到批准之前,申請可能被修改多次,我們需要每個請求

  • 我們需要跟蹤狀態爲每個請求

  • 的修訂歷史記錄

    有30多個問題,以創建(有多少項目需要修改依賴)課程

  • 有3-30 +問題,修改課程

  • 有5個問題,刪除課程

我的方法1

在這種方法中,我會存儲所有數據,創建/修改/在RequestDetail表中刪除。由於每個RequestDetail可以有多個項目,例如CourseMode(例如在線,面 - 面),有與每個相關聯的RequestDetail一些表。 enter image description here

下表是一個例子: 當用戶請求創建課程(RequestID:1),有兩個版本(標題和費用變化),直到它被批准。但對於修改及刪除所有列NULL

當用戶請求修改CourseFee(RequestID:2)時,用戶輸入新的費用和修改原因,創建和刪除的其餘列爲NULL

當用戶請求刪除課程時(RequestID:3),用戶輸入刪除的原因,其餘列爲NULL

由於這些數據的目的,更像是一個數據倉庫,這會是簡單,易於處理?但表需要允許幾乎所有領域空值(用於創建,大多數領域都需要)。

enter image description here

我的方法2

在這種方法中,要求修改的處理方式與第一種方法一樣,但創建修訂和刪除單獨的表。但是這種方法看起來多餘而且不乾淨。

enter image description here

個人而言,我更喜歡第一種方法,但什麼是最好的數據庫設計實踐是在這種情況下?有什麼我忽略了,或者我需要小心嗎?

回答

0

聽起來對我來說修改可以改變課程的任何內容,所以如果你有單獨的CreateRequest和ReviseRequest表,幾乎每一列都必須重複。我沒有看到有任何理由這麼做。

因爲大部分數據都是不相關的,所以刪除可能會有更多的爭議。儘管如此,我還是沒有看到爲此製作單獨的桌子所獲得的任何收益。那麼如果不相關的字段是空的呢?所以它有一堆空值。

其實我不會爲「修改原因」和「刪除原因」創建單獨的列。我只是做一列,並稱之爲「請求原因」或其他。

你應該有一些字段告訴你它是哪種類型的請求。 (或者是FormTypeID是什麼?)

+0

是的,'FormTypeID'是告訴它是哪種類型的請求。如果「FormTypeID」是「刪除」,那麼該行將會有許多空值,因爲大多數字段與刪除課程無關。不要爲「修改原因」和「刪除原因」創建單獨的列。謝謝。 – kabichan 2015-04-02 23:02:25