2016-11-09 126 views
0

我有一個簡單的數據庫,我正在爲我的web應用程序設計。基本前提是網站會顯示一系列用戶閱讀的陳述,點擊「我同意」等,並提交一份表格以及他們的個人詳細信息和他們同意的陳述ID。有時候,語句文本可能會發生變化,我們希望通過版本控制來跟蹤這種情況。我們不希望失去審計聲明文本的歷史記錄,因爲我們希望稍後能夠記錄每個用戶同意的記錄。我也想確保每個語句都是版本化的,這樣當我查詢數據庫中的記錄以顯示在我的應用程序中時,我只想顯示最新的迭代。SQL數據庫設計反饋

下面是表我有

  • FormID
  • 窗體名稱
  • FORMTEXT
  • VERSIONNUMBER
  • 活動
  • CREATEDATE
  • CREATEUSER

用戶

  • 用戶ID
  • 姓氏
  • CREATEDATE
  • CREATEUSER

窗體

  • 用戶名
  • FormID
  • CREATEDATE
  • CREATEUSER

用戶窗體表可以有許多形式,給每個用戶,但我需要構造數據庫是這樣的一種方法來知道他們同意的表格的哪個版本。目前我擁有的方式是使用不同的版本號在Form表中創建一個新記錄,並將其標記爲新文本的Active。然後,我會將舊記錄標記爲非活動記錄,並僅在我的網站上顯示活動記錄。我可以用其他方式做到這一點嗎?

+0

userform可以是視圖 – JT4U

回答

0

這個設計對我來說似乎非常穩固。如果您擔心可能同時擁有多個活動版本的表單,則可以向該表添加一個約束條件,以避免這種情況發生(假設FormID是您的主要代理鍵,而FormCode是您在所有不同版本的表單中使用的一致標識符):

Create Unique Index ux_FormCode_Active On Form (FormCode) Where Active = 'Active'; 
0

設計唯一的問題是,您最終可能會標記爲活動的同一表單的多個版本 - 難以限制數據庫以保證不會發生這種情況。

解決此問題的一種方法是添加一個FormType表,其中一個ActiveFormId顯示每個類型的當前FormId。您仍然可以按照原樣將用戶鏈接到表單。