|   | 
          ■リレーショナルデータベースの規則 | 
        | 
    
     
      |   | 
        | 
      ●学習内容 | 
        | 
    
     
      |   | 
        | 
        | 
       データベースはデータが常に正しい状態でなければ意味がありません。その正しい状態ってどういうことでしょうか?例えば、住所禄などで同姓同名の人がいた場合、どうやって二人を判断したらよいでしょうか?出来ません。そのような状況を放っておいたらデータが正しいか疑わしくなります。そこでデータベースを常に正しい状態に保つために規則が必要になります。この規則が整合性制約です。これをしっかり理解しておくとテーブルを正規化の時につまづくことも少なくなるでしょう。 | 
        | 
    
     
      |   | 
        | 
        | 
        | 
        | 
        | 
    
     
      |   | 
        | 
      ●定義域制約 | 
        | 
    
     
      |   | 
        | 
        | 
       定義域制約とは、前に説明した属性の値が原子値でなければならないというものです。もう少し詳しく説明します。原子値とは、これ以上細分化できない単純な値です。例えば、2001/12/24という「日付」の要素があったとします。これが、「日付」という要素の定義域からの原子値であれば問題はありません。しかしこの要素が、「年」「月」「日」という属性の直積であった場合は、2001/12/2は原子値とは言えません。その場合は、「年」=2001,「月」=12,「日」=24とそれぞれの属性の要素として記述しなければなりません。 
         | 
        | 
    
     
      |   | 
        | 
        | 
       
        
       | 
        | 
    
     
      |   | 
        | 
        | 
        | 
        | 
        | 
    
     
      |   | 
        | 
      ●キー制約 | 
        | 
    
     
      |   | 
        | 
        | 
       RDBでは同じ値のタプルはなく、すべてのタプルは区別されます。タプルを区別するためにテーブルの1つまたは複数の属性の組合せを使い識別できるようにします。これをキーといいます。 | 
        | 
    
     
      |   | 
        | 
        | 
        | 
        | 
        | 
    
     
      |   | 
        | 
      ★候補キー | 
        | 
    
     
      |   | 
        | 
        | 
       テーブルには複数のキーが存在する可能性があります。<Image6>では、テーブル(Cinema)の属性「Cinema_code」と「Cinema_name」がそうです。これらを候補キーといいます。しかし「Cinema_name」の場合は、同じ名前の値が存在するかもしれません。この時候補キーにはなりません。「Cinema_code」は「Cinema_name」に関係なく値を与えられているので候補キーになります。 | 
        | 
    
     
      |   | 
        | 
        | 
        | 
        | 
        | 
    
     
      |   | 
        | 
      ★主キー | 
        | 
    
     
      |   | 
        | 
        | 
       候補キーの中からタプルを識別するのに最もふさわしいものを主キーといいます。候補キーの中からどれを主キーとするかは、十分に考慮する必要があります。<Image6>のテーブル(Cinema)では、「Cinema_code」が主キーです。それは、候補キーで説明した理由から一意にタプルを識別するのに最もふさわしいからです。 | 
        | 
    
     
      |   | 
        | 
        | 
       
         
          <Image6>  
       | 
        | 
    
     
      |   | 
        | 
        | 
        | 
        | 
        | 
    
     
      |   | 
        | 
      ●参照制約 | 
        | 
        | 
    
     
      |   | 
        | 
        | 
       RDBでは、複数のテーブルを利用して他のテーブルのタプルの値を参照する場合が結構あります。このときに、参照するタプルが必ず存在しなければならないかどうか、または、参照するタプルを削除するとき、それを参照していたタプルの扱いをどうするかという制約が参照制約です。 | 
        | 
    
     
      |   | 
        | 
        | 
        | 
        | 
        | 
    
     
      |   | 
        | 
      ★外部キー | 
        | 
    
     
      |   | 
        | 
        | 
      参照制約は、外部キーによって定義されます。??と思うでしょう。例えばこういうことです。外部キーとは、参照する他のテーブルの主キーの定義域の値を持つ属性です。<Image7>を例にしていうと、テーブル(Cinema)の「Genre_code」は、テーブル(Genre)の主キー「Genre_code」の定義域の値を持っています。つまり、参照しています。参照という形をととることでテーブル(Cinema)を削除する場合でも、テーブル(Genre)のタプルはそのまま残すことが出来ます。このように外部キーによって参照制約を定義することが出来ます。 | 
        | 
    
     
      |   | 
        | 
        | 
       
         
          <Image7>  
       | 
        | 
    
     
      |   | 
        | 
        | 
       
        
       | 
        | 
    
     
      |   | 
        | 
        | 
        | 
        | 
        |