なぜ必要なのだろう?
データ型、制約、キー、NULL はなぜ必要なのだろう?
制約はなぜ必要か?
たとえば、学生の名簿を考えてみよう。ある人の入学年を調べたいという場合、まず一人の人を指定する必要があるが、氏名を指定したのでは同姓同名の人が結果に含まれてしまう可能性がある。学籍番号は一人に一つしか割り当てられないので、学籍番号で指定すればかならず一つの番号について一人分のデータが得られることが保証される。
このような状態をきちんと維持するには、学籍番号のフィールドには同じ値が複数含まれていないことを保証しておく必要がある。氏名の欄については重複はあってもかまわない。このようにフィールドによって、「重複がない」「重複がある」という区別をきちんと行うことがデータベースの管理では必要だ。
制約では、このような区別をきちんと指定し、また記録されているデータがすべてあらかじめ決めたルールに従っていることを保証するためにとても重要な機能だ。
データ型とドメイン
データベースでは、一旦データベースを設計すると同じ形式で何年もデータを蓄積していくことが多い。したがって、データベースの設計では通常のプログラムよりも、記録されるデータの記録効率がより重要となる。
たとえば500満件のデータを蓄積うするとしよう
2byte × 500万 = 10M byte
200byte × 500万 = 1 G byte
となり、とても大きな差になる。
データ型を適切に指定すれば、記録容量の節約や、処理の高速化にとても役立つ。
また、データ型は一種の制約でもある。Yes/No型を指定すれば、Yes/No以外の値を記録することはできないから、あらかじめ決められた以外の意味のあいまいな値が混入することを防ぐことができる。ドメインとしては値の範囲等も指定することができる。
データ型、ドメインは、このようにデータベースをきめ細かく管理する上でもきちんと考えて設定することが重要だ。
キー
表になっているデータのどこか一つのデータを指し示したい場合、通常であれば「行と列」を指定する。しかしデータ量が多くなって、データの操作が頻繁で複雑になった場合にはこの方法はあまりうまくいかない。
1232124番目の顧客の氏名を取り出して、とか、
312343番から312357番の登録は抹消して
といった処理は、いかにもあぶなっかしい。
だからデータベースでは、行と列のかわりに、「重複なく付けられた識別データ」を使ってデータを指定する。これをキーと呼ぶ。
キーは行番号とは関係がないから、データ自体の順番はでたらめでもまったく支障がない。データの一部をごっそり削除しても問題ないし、ある人と別の人が別々の通し番号をつけて管理してもまったく問題はない。
NULL
たとえば、自分でCDを管理するデータベースを作り、「再生した回数」というフィールドがあったとしよう。最初にデータを入力した時にはこのフィールドの値は0としておくのがよいだろう。
では、「価格」というフィールドは最初は0としておけばよいだろうか? 価格がわからないとデータが入力できないのでは不便だ。しかし価格を入力する前に価格を0としてしまうと、
「価格が 100円以下のCDを探す」
といった探し方をした時に、価格を入力していないCDも含まれてしまい、面倒だ。このように、データベースでは、「このフィールドの値は分からない」ということもデータとして表すことが、データの検索の際にとても役立つ。そのために、すべてのフィールドには NULL という値がもてるようになっている。