2016-11-10 14 views
0

レコード保管システムのデータベースを設計中です。 システムには4種類のレコード/フォームがあります。レコード保管システムのデータベース設計

ここは私のデザインです。

まず、4つのフォームには、名前、年齢、住所などの共通入力フィールドがあります。私はテーブルのこの共通入力フィールドを分離し、外部キーを追加します。例えば

common_fields 
ID 
Name 
Age 
Address 
Form_fk_id (foreign key to what form) 
Form_type_number(this will define what kind of form the user used) 

form1 
ID 
Birthdate 
Occupation 
etc.. 

form 2 
ID 
Mother_name 
Father_name 
etc.. 

form 3 
ID 
School_address 
School_name 
etc.. 

基本的に、それはそのようになります。

Form_fk_id - 共通の入力を接続する外部キーは、テーブルとフォームテーブル

Form_type_numberをフィールド - これは、取得するために、どのような形を知るために有用であろう。

このデザインが不明です。これが設計に最適な方法であるかどうかはわかりません。

答えて

1

共通テーブルにFK参照は必要ありません。共通テーブルには、詳細テーブルが FKで参照するキーとタイプインジケータがあります。

common_fields 
ID 
Form_type (defines what kind of form) must contain 1, 2 or 3 
Name 
Age 
Address 
constraint UQ_Common_Fields_ID_Type unique(ID, Form_Type) 

一意制約によって、(ID、Form_Type)へのFK参照が可能になります。

form1 
ID 
Form_fk_id (with ID, FK to common) must contain 1 
Birthdate 
Occupation 
etc.. 

form2 
ID 
Form_fk_id (with ID, FK to common) must contain 2 
Mother_name 
Father_name 
etc.. 

form3 
ID 
Form_fk_id (with ID, FK to common) must contain 3 
School_address 
School_name 
etc.. 

Form_Typeフィールドが小さい整数であり、唯一の値に共通の表に制約される(1、2、3)と仮定する。 Form1テーブルでは、そのフィールドはForm2のみ2、Form3のみ3に制約されます。

新しいフォームが作成されると、共通データがCommon_Fieldsテーブルに挿入され、 ID。 Form_Typeフィールドには、フォームのタイプに応じて値1,2または3が含まれます。

値が1だから、一致するレコードはForm1テーブルにのみ挿入できます。

同じID値を持つエントリは、他のいずれのフォームテーブルにも書き込むことができません。 1つのForm_Fk_Idの値は、フィールドに適切な値が含まれている必要があることを確認するチェック制約があるため、許可されません。 1以外の値は、共通テーブル内の一致する値のセットを検出しません。

これにより、共通テーブル内の特定のフォームタイプとして定義されたフォームは、正しいフォームテーブル内の関連エントリのみを持つようになります。

ユーザーがフォーム123の詳細を表示するには、共通テーブルで123を探し、フォームの種類に応じて正しいテーブルの詳細を結合します。

実際、私は3つのビューを持ち、各ビューは各フォームの詳細を示しています。ビューのトリガーは、フォームデータが2つのテーブルに分割されずに1つの完全な行にあるかのように、アプリケーションコードが各タイプのフォームを操作できるようにします。これは、アプリケーションから構造を隠し、構造が正しく維持されていることを確認します。

+0

Form_fk_id(ID、FK to common)には3が含まれていなければなりません。 "ID付き"はどういう意味ですか?なぜそれが1、2、3を含まなければならないのか分かりません。それはフォームを所有している人のIDを含むべきですか? – guwop69

+0

IDには、フォームを所有しているユーザーのIDが含まれています。 Form_fk_idフィールドは、IDとともにCommonテーブルへの外部キーを形成します。 CommonテーブルがIDとForm_Typeに固有の制約を形成するのはこのためです。 Form_fk_idには3が含まれている必要があります。これはForm3テーブルであり、フォーム3定義のみを含むことができるためです。チェック制約またはトリガーコードがそれを強制します。 CommonのForm_Typeフィールドには、各フォームタイプがここで定義されているので、1,2、または3が含まれています。 3(たとえば)が含まれている場合、同じID値を持つエントリはForm3テーブルにのみ配置できます。 – TommCatt

関連する問題