Aheoは、列が 1 つしかないテーブルを使用してもよいかどうかを尋ねます。列のないもの、または最近のほとんどの「リレーショナル」DBMS でこれを行うのが難しいように思われる場合、属性のないリレーションはどうでしょうか?
7 に答える
属性のないリレーションは、空のタプルを持つものと持たないものの 2 つだけです。The Third Manifestoでは、Date と Darwen が (やや) ユーモラスに名前を付けTABLE_DEE
てTABLE_DUM
(それぞれ) 挙げています。
それらは、通常の代数における 1 と 0 に相当する役割を果たしている、さまざまな関係演算子の恒等であるという点で有用です。
列が 1 つのテーブルはセットです。値の順序付けやその他の情報との関連付けを気にしない限り、問題ないようです。メンバーシップを確認できます。基本的にそれができることのすべてです。(UNIQUE
単一の列に制約がない場合は、出現回数も数えることができると思います...マルチセット)。
しかし、列のないテーブル (または属性のないリレーション) は何を意味するのでしょうか。
「属性を持たないリレーションは正確に 2 つあります。1 つは空のタプルを持ち、もう 1 つはタプルを持たないものです。第 3 のマニフェストでは、Date と Darwen は (多少) ユーモラスにそれらを TABLE_DEE と TABLE_DUM (それぞれ) と名付けています。
それらは、通常の代数における 1 と 0 に相当する役割を果たす、さまざまな関係演算子の恒等であるという点で有用です。」
そしてもちろん、ブール代数における「TRUE」と「FALSE」の役割も果たします。「お店は開いています」「アラームがセットされています」などの命題をデータベースで表現する場合に役立つという意味です。
この結果、「IF/ELSE として機能する」という特性のために、リレーショナル代数の任意の式でも有効に使用できます。TABLE_DUM への結合は、他の引数からのタプルをまったく保持しないことを意味し、TABLE_DEE への結合は、それらをすべて保持します。したがって、TABLE_DEE または TABLE_DUM のいずれかに等しい relvar S に R を結合することは、「If S then R else FI」に相当する RA であり、FI は空の関係を表します。
DEE とデカルト積はモノイドを形成します。実際には、Date のリレーショナル集計演算子がある場合は、グループ化リレーションとして DEE を使用して総計を取得します。DEE が実用的に役立つ例は他にもたくさんあります。
SQLデータベースの観点からTABLE_DEEとTABLE_DUMの有用性を理解することは困難です。結局のところ、お気に入りのデータベースベンダーがどちらか一方を作成できるという保証はありません。
また、関係代数でTABLE_DEEとTABLE_DUMの有用性を確認することも困難です。それを超えて見なければなりません。これらの定数がどのように機能するかを理解するために、関係代数を適切な数学的形状に配置することを検討してください。これは、ブール代数に可能な限り近いものです。D&D代数Aはこの方向への一歩です。次に、より基本的なものを介して古典的な関係代数演算を表現することができ、これらの2つの定数は非常に便利になります。
うーん。そのため、「実際の例」が不足していることに気付き、最善を尽くしました。意外かもしれませんが、途中まで来ました!
cjs=> CREATE TABLE D (); テーブルを作成 cjs=> SELECT COUNT (*) FROM D; カウント ------- 0 (1行) cjs=> D () 値 () に挿入; エラー: ")" またはその付近で構文エラーが発生しました 行 1: D () 値 () に挿入します。
1 つの列を持つテーブルは、単純なルックアップとして意味があります。ユーザー入力テキストに対してフィルターをかけたい文字列のリストがあるとします。そのテーブルには、除外したい単語が格納されます。