例: 顧客関係変数
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/06/06 15:54 UTC 版)
顧客ID税ID名前住所1234567890 555-5512222 Jo Lee 323 Broadway 2223344556 555-5523232 Dorothy Red 1200 Main Street 3334445563 555-5533322 Linda de la Cruz 871 1st Street 4232342432 555-5325523 E. F. Codd 123 It Way 新しい 顧客ID 1234567890 をもつ顧客の「追加」を試みると、この追加は関係変数の設計に違反するため失敗する。なぜなら 顧客ID は主キーであり顧客関係変数には既に顧客 1234567890 が存在するからである。RDBMSは、整合性制約に違反することにより関係データベースを不整合な状態にするこのようなトランザクションを、拒絶しなければならない。 外部キーは、整合性制約であり、外部キーの値が別の関係の候補キーのいずれかの値に合致することを強制する。例えば注文関係においては 顧客ID 属性が外部キーである。結合は、複数の関係から一度に情報を引き出す演算である。先の例の複数の関係で結合を行うことにより、全ての顧客、注文、請求書のデータを検索することができる。もしこのとき特定の顧客に関する情報だけ必要なのであれば、制限条件を使って結合を行えば良い。 顧客 1234567890 の全ての注文を検索したい場合には、顧客ID 1234567890 をもつ全ての注文関係の組を取得し、取得した結果に対して 注文番号 に基づいて注文明細関係と結合すれば良い。 先に示したデータベース設計には欠陥がある。請求書関係変数が注文番号属性をもっているのである。これは、請求書関係変数の各々の組が一つずつ注文番号をもつということである。このことは各々の請求書にはそれぞれ必ず一つの注文があるということである。しかし現実には、一つの請求書は複数の注文に対して発行することができる。また注文無しの請求書が実際に発行されることもあろう。さらに、注文関係変数は請求書番号属性をもつ。これは各々の注文はそれぞれ対応する一つの請求書をもつことを意味する。 しかし現実世界ではこれは必ずしも真ではない。一つの注文が複数の請求書を通して発行される場合もある。また請求書無しで支払いを行うこともあるであろう。すなわち、複数の請求書が一つの注文と対応することがあり、複数の注文が一つの請求書に対応することがある。これは注文と請求書の間に「多対多」の関連があるということである(「特定の関連は無い」ともいう)。この関連を関係データベースで表現するために、新しい関係変数を導入する必要があるであろう。 この新しい関係変数の役割は注文と請求書の関連を指定することである: 注文請求書(注文番号、請求書番号)これを表にすると、以下のようになる。注文請求書表 注文番号請求書番号 ここで、注文関係変数は注文請求書関係変数との間に、注文関係変数と顧客関係変数の間の関連と同じく、一対多関連がある。特定の注文に対する全ての請求書を検索したい場合、 注文関係の 注文番号 は注文請求書関係の 注文番号 と等しく 注文請求書関係の 請求書番号 は請求書関係の 請求書番号 と等しい という条件をつけて全ての請求書を検索することができる。
※この「例: 顧客関係変数」の解説は、「関係モデル」の解説の一部です。
「例: 顧客関係変数」を含む「関係モデル」の記事については、「関係モデル」の概要を参照ください。
- 例: 顧客関係変数のページへのリンク