RDBMSのエンティティの紐解き方、制約、テーブル定義、索引について

・テーブル構造や、ER図だけでなく、問題文からも、
 テーブル間の相関関係を把握することができる。

ex)
- 問題文
一つの仮払に対する精算が複数の日に分かれることもある。

- 分かること
"仮払金申請"テーブルと、"仮払金精算"テーブルを1対多の関係にする必要がある。
また、"仮払金申請"テーブルの存在しない、"仮払金精算"テーブルは存在しない

ここから、以下がわかる。

"仮払金精算"テーブルは、"仮払金申請"テーブルの弱エンティティである。
弱エンティティのことは、別名 弱実体 とも呼ぶ。

弱エンティティは、受注テーブルと受注明細テーブルのうちの受注明細テーブル、
売上ヘッダテーブルと売上明細テーブルのうちの売上明細テーブル、等が該当する。

これより、

"仮払金精算"テーブルの主キーは、"仮払金申請"テーブルの主キーに、
もう一つ何かしらの属性を追加して、1対多の関係になると判断できる。

"仮払金精算"テーブルは、"仮払金申請"テーブルの詳細情報を含むため、
"仮払金申請"テーブルの主キーを持たせ、相関関係を示す必要がある。

そのため、まず"仮払精算"テーブルには"仮払申請"テーブルの主キーである、
申請番号は必須。

そして以下の記述より、

"精算時には、精算日ごとに精算金額を記録する。"

精算日、精算金額が必要。

つまり、以下のテーブル構造になる。

"仮払金精算"テーブル
申請番号(主キー)、精算日(主キー)、精算金額

一つの申請番号に、複数の精算日があることから、
申請番号と、精算日の複合主キーになる。

仮払精算テーブル中の申請番号は、
仮払申請テーブルの外部キーでもある。


RDBMSのテーブルの列には、NOT NULL制約を指定することができる。
 NOT NULL制約を指定しない列には、NULLか否かを表す1バイトのフラグが付加される。


RDBMSのテーブル定義の格納長(バイト)は、平均文字数をベースに算出する。

 ex)
 NCHAR VARYING(n)型(最大n文字の全角可変長文字列(1<= n <= 4,000))で、
 全角文字100文字以内、平均文字数が20文字の時、

 バイト数は、20文字 * 2バイトで、40バイト。
 これに制御文字4バイトが加わって、44バイト。
 NOT NULL制約が無い時は、NULLか否かを示す1バイトのフラグが加わる。
 -> 45バイトとなる。
 
 ただし、データ型には、最大文字数を指定する。
 全角文字100文字以内、というルールがある時、データ型は、NCHAR VARYING(100)となる。


・索引の種類には、P(主キーの索引)、U(ユニーク索引)、NU(非ユニーク索引)の3つがある。