2016-11-09 5 views
0

私は自分のWebアプリケーション用に設計しているシンプルなデータベースを持っています。基本的な前提は、ユーザーが閲覧し、「同意する」をクリックし、自分の個人情報と同意したIDのフォームを提出する一連のステートメントをウェブサイトに表示することです。時折、ステートメントテキストが変更されることがあり、バージョン管理を通じてこれを追跡したいことがあります。後でレコードを引き出して、各ユーザーが同意した内容を確認できるようにするため、監査用のステートメント・テキストの履歴を失いたくはありません。また、各ステートメントがバージョン管理されていることを確認して、アプリケーションで表示するレコードをデータベースに照会するときに最新の反復のみを表示するようにします。ここでSQLデータベース設計のフィードバック

テーブルは私が

フォーム

  • を持っているフォームID
  • FORMNAME
  • FORMTEXT
  • のversionNumber
  • アクティブ
  • CREATEDATE
  • でCreateUser

ユーザ

  • ユーザID
  • ファーストネーム
  • CREATEDATE
  • でCreateUser

ユーザーフォーム

  • ユーザID
  • フォームID
  • CREATEDATE
  • でCreateUser

ユーザーフォームテーブルは、各ユーザに多くの形態を有することができるが、私は、データベースを構築する必要があるようなものです彼らが同意したフォームのバージョンを知る方法。現在私が持っている方法は、別のバージョン番号を持つフォームテーブルに新しいレコードを作成し、それを新しいテキストでアクティブとしてマークすることです。私は古いレコードを非アクティブとしてマークし、私のウェブサイト上のアクティブフォームのみを表示します。それ以外の方法は何ですか?

+0

userformはビューにすることができます – JT4U

答えて

0

このデザインはかなり堅実なようです。フォームの複数のアクティブなバージョンを同時に使用する可能性が懸念される場合は、テーブルに制約を追加して、このようなことを防ぐことができます(FormIDがプライマリのサロゲートキーであり、FormCodeが異なるバージョンのフォームで使用する一貫した識別子):

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

デザインに唯一間違っているのは、アクティブとマークされた同じフォームの複数のバージョンで終わる可能性があることです。これが起こらないことを保証するためにデータベースを制約することは困難です。

この問題を解決する1つの方法は、FormTypeテーブルを追加し、各FormIdが現在のFormIdであることを示すActiveFormIdを追加することです。あなたは依然としてユーザーをそのままフォームにリンクします。