web-dev-qa-db-ja.com

なぜ「関係(al)」という用語ですか?

英語では、ボブとティムの関係について話すかもしれません。おそらく彼らはいとこだろう。この文脈での「関係」という用語は、私には理にかなっています。

リレーショナルデータベースのコンテキストでは、この用語の意味は理解できますが、なぜ使用されているのかはわかりません。なぜ使われるのかを理解することは、分野をよりよく理解する助けになると思いますので、なぜ使われるのかを理解したいと思います。

  • たとえば、Personが「関係」と見なされるのはなぜですか?英語では、関係は2つのエンティティがどのように関連付けられているかを表す名詞です。エンティティ自体は参照しません。リレーショナルデータベースのコンテキストでは、「関係」はエンティティ自体を指します。どうして?
  • リレーショナルモデルが階層モデルとネットワークモデル(親、隣人など)の後にあることを理解しています。しかし、これらのモデルでは、エンティティも相互に関係しています。では、なぜこのモデルをリレーショナルモデルと呼ぶのでしょうか。より具体的なフレーズ/用語はありますか?あるいは、3つのモデルはすべてリレーショナルモデルであると言う必要がありますが、階層モデルとネットワークモデルは特定の種類のリレーショナルモデルですか?
  • 相互に関連しないスタンドアロンエンティティがある場合はどうなるでしょうか。言って、人、ドア、そして木。 「関係(al)」という用語はまだ適用できますか?

(おそらく、これは複数の質問になるはずです。回答は非常に関連していると考えました-おそらく1つの回答しかありません-したがって、これが単一の質問であることは理にかなっていると考えました。私が間違っている場合は、知らせてください。代わりに別の質問を作成します。)


編集:この図は、関係が異なるドメインを互いに関連付けていることを視覚化するのに役立ちます。

enter image description here

26
Adam Zerner

「リレーショナルデータベース」の背後にある興味深い点は、予想どおり、(主に)テーブル間の関係を参照するのではなく、タプル内の複数のプロパティ(列)の関係を参照することです。リレーショナルデータベースは、これらのタプルをテーブルの行として格納します。

これは、1941年(!)の論文でAlfred Tarskiによって定義された関係代数に基づいています On the calculus of Relations 。彼は、シンボリックロジックの用語と使用法の歴史をまとめましたが、結局SQLの基礎となった操作を定義しました。

Coddは、これを彼の 12の戒め でリレーショナルデータベースとして理解できるものの定義に変えました。

16
eckes

「リレーショナル」という用語は数学に由来し、エンティティ間の関係とは関係ありません。私は数学者ではないので(コッドは数学で博士号を取得していたので)、詳しくは触れませんが、このWikipediaの記事 二項関係 を紹介します。 relation(databases) に関するウィキペディアのエントリは、Coddがデータ管理に適用するために数学の概念をどのように適合させたかについての詳細を提供します。この数学的構造がリレーションと呼ばれる理由については、リレーションを構成するドメイン間に「リレーションシップ」があるという考えに関係していると思います。コッドの元の考え方をよりよく理解するために私が知っている最良の情報源は Fabian Pascal's 実用的なデータベースの基礎と実際のRDMの理解 一連の論文 です。 Chris DateはRDMについても幅広く書いており、彼の Third Manifesto サイトには、論文と本をリストするセクションがあります。彼の本 コンピューティング専門家のためのリレーショナル理論 は良い紹介です。これがお役に立てば幸いです。

10
Todd Everett

自然なキーでそれらを考えるとき、それは直感的な名前です。セルの値は、エンティティを表すものと考えることができます。

Relation: Employee
|--------+------------+--------|
| name   | job        | boss   |
|--------+------------+--------|
| Mark   | owner      | NULL   |
| Bob    | manager    | Mark   |
| Jane   | supervisor | Bob    |
| Claire | supervisor | Bob    |
| John   | cashier    | Jane   |
| Jesse  | cashier    | Jane   |
| Jason  | cashier    | Claire |
|--------+------------+--------|
  • 従業員名「Jane」は、仕事「supervisor」に関連しています。
  • 従業員名「ジョン」は上司「ジェーン」に関連しています。
  • ジョブ「キャッシャー」は、従業員名「ジョン」、「ジェシー」、「ジェイソン」に関連しています。
  • 仕事「キャッシャー」はボス「ジェーン」と「クレア」に関連しています。
7
JoL

あなたはすでにデータベースについて多くのことを言わなければならない非常に長い答えを受け入れましたが、あなたが実際に尋ねた質問に答えさせてください:

なぜ「リレーショナル」という用語なのか。

テーブルは数学オブジェクト「関係」の具体的なインスタンスだからです。

Wikipedia が「関係」という用語について(数学ではRDBMSではなく)何を言わなければならないかを見て、それをデータベースに変換します。

正式には、リレーションは等しい次数のnタプルのセットです。したがって、2項関係はペアのセット、3項関係はトリプルのセットなどです。集合論の言葉では、2つの集合間の関係はそれらのデカルト積のサブセットです。

_Mathematics             | RDBMS
========================|===============
A relation is           | A table is
a set of                | a bunch of 
n-tuples                | rows
of equal degree.        | with the same cell (a.k.a. column) types and sizes.
_

それは集合論に続きます。これは数学であることを思い出してください。データベースのものよりもずっと抽象的です。したがって、最後の文は

2つのセット間の関係は、デカルト積のサブセットです。

これは、oneテーブルに変換され、two列が含まれます。

  • 列Aを「名前」と呼びましょう。その数学的セットAは、すべての(人間の)名前のセットです。
  • B列「市」と呼びます。その数学的集合Bは、すべての都市の集合です。
  • デカルト積_A x B_(数学)は、すべてのペア(別名、tupel)を含む新しいセット_(a, b)_で、aAのメンバーであり、 bBのメンバーです。つまり、aは名前で、bは都市です。例は_(Alice, New York)_または_(Bob, Hollywood)_です。しかし、デカルト積はそれらのいくつかだけでなく、それらのallです。要点を述べると、関係はそのデカルト積のサブセットです。言い換えると、リレーションは任意の量のペア_(a, b)_です(ここでaは名前であり、bは都市であり、まったくない場合もあります)。

今、私はすべてが理にかなっていると思います。 RDBMSでは、テーブルの行は、それらの列で可能なすべての組み合わせのデカルト積のサブセットを選択するだけです。つまり、RDBMSをusingすると、完全に取るに足らない、無関係なものになります。

しかし、リレーショナルデータベースを含むコンピュータサイエンスは、doesが数学にルーツを持っているため、ここでは「リレーショナル」という用語に恵まれています。それは完全に抽象的なものであり、人と人との関係やあなたが持っているものとは一切関係がありません。

余談ですが、「関係」という用語は「関連付け」に使用されることもあり、まったく同じです(ここで、関係の基になるセットは、上記のような関係(テーブルとも呼ばれます)です)。

注意:数学では、リレーションはデータベースに関するものではなく、関数のようなもので、より一般的なものです(すべての数学者が今すぐに始めないでください。私たちはmath.SEではなくdba.SEにいます。私は知っています。これは間違った方法です:))。 f(x)=x+1のような関数も、タプルのセット_(1, 2), (2, 3), ..._として表すことができますが、タプルの左側では、すべての数値を一度しか持つことができません。つまり、これは有効な関数ではありません:_(1, 2), (1, 3), ..._。しかし、後者は有効な関係になります。つまり、ニューヨークにボブとハリウッドにボブを持つことができます。

6
AnoE

リレーショナルデータベース は、E.F。Coddの リレーショナルモデル に基づいています。 relational algebra は、データをクエリする方法の方法を説明しています。関係は、いくつかのセット(ドメイン)の外積のサブセットにすぎません。

次のセットがあります。

DepIds = {1, 2, 3, ...}
EmpIds = {1, 2, 3, ...}
DepNames = {'Engineering', 'Finance', 'Sales', ...}
FirstNames = {'John', 'Walter', 'Mary', 'Roxane', ...}
LastNames = {'Smith', 'Bondy', 'Taylor', ...}
BirthDates = {..., 1950-01-01, 1950-01-02, ...}
Jobs = {'Accountant', 'Programmer', 'Database Administrator', ...}

さらに、タプルのセットがあります

departements = { 
    (1, 'Engineering'), 
    (2, 'Finance')}
employees = { 
    (1, 1, 'John', 'Taylor', 1985-03-22, 'Programmer'), 
    (2, 1, 'Walter', 'Bondy', 1997-09-11, 'Database Administrator'), 
    (3, 2, 'Roxane', 'Myers', 1987-12-19, 'Accountant')}

departementsはのサブセットです

    DepIds x DepNames

そしてそれは関係です。

employeesはのサブセットです

    EmpIds x DepIds x FirstNames x LastNames x BirthDates x Jobs

そしてそれも関係です。

テーブルによってリレーションを実装する方法は明らかです。

数学者がタプルのセットを関係と呼ぶのはなぜですか?

通常、「2は3未満」、「4は4に等しい」、「2は1と3.4の間」、「-1は負」などのプロパティは関係と呼ばれます。

セットA = {1、2、3}の関係「より小さい」は、サブセットによって定義されます

{(1, 2), (1, 3), (2, 3) }

A x A = {1, 2, 3} x {1, 2, 3}=
{ (1, 1), (1, 2), (1, 3), 
  (2, 1), (2, 2), (2, 3), 
  (3, 1), (3, 2), (3, 3) } 

同様に、他の関係はクロス積のサブセットとして見ることができます。 「xはyより小さい」、「xはyに等しい」はバイナリ関係であるため、ペアのセットで定義されます。 「yとzの間のxは三項関係である」ため、トリプルのセットによって定義されます。 「x is negative」は単項関係であるため、一連のシングルトンによって定義されます。

上で定義した部門タプルセットは二項関係であり、従業員関係は6項関係です。

5
miracle173