あなたが使用しているような表現が許されているなら、それは掛け算をしている投影/Πです。その入力が関係値&の属性名ではなく、その入力は関係値であり、入力が属性タイプの値である演算子の名前を含む何らかの並べ替えの式です。あなたの投影/Πが解析して乗算しています。したがって、の異なる演算子は属性名のみを受け入れます。
属性式をとる射影/Πは、関係値と属性名にのみ射影/Πを持つ代数を仮定すると、その実装の問題を引き起こします。これは、アカデミックな環境では重要です。その方法は、実際にその方法を理解することが必要な場合や、質問の難しさが利用可能な演算子に依存するためです。だからあなたが使用するはずの代数を見つけてください。
属性名と関係値を取る基本関係演算子しか持たない場合、属性値に演算子を導入することができます。そのような各演算子は、各オペランドの属性と結果の属性を持つリレーション値に関連付けることができます。リレーションは、結果値がオペランド値で呼び出された演算子の結果と等しいタプルを保持します。 (。結果はオペランドに関数従属である)
だから我々はleft * right = result
Times
保持タプル次の表の値があるとします。あなたの計算された属性はresult
、あなたが
/* tuples where for some credits & gradepoint,
course cid's student sid earned grade gradepoint and credits credits
and credits * gradepoint = result
*/
project cid, sid, result (
R natural join (rename left\credits right\gradepoint (Times))
)
をしたい場合には
left right result
-------------------
0 0 0
1 0 0
...
0 1 0
1 1 1
2 1 2
...
を
this question & my answerも参照してください。
PS代数対言語:使用している「関係代数」への参照とは何ですか?沢山あります。彼らは「関係」が何であるかという異なった概念を持っています。式が値に対して呼び出される演算子の結果を表すだけでなく、いわゆる「代数」の一部は実際には言語です。代数は、それ自身の名前を含む式および/またはリレーション値を表すオペランド値を持つことは可能ですが。
懸念のPS再分離:あなたは乗算結果の属性名が何であるかは述べていません。もしそれがcredit * gradepoint
であるとすれば、でもとなります。投影/Πは、表現値の入力を属性名にマッピングすることを期待しています。 credit * gradepoint
は、2つの属性名&と1つの場所に演算子名があり、別の属性名には1つの属性名である式として認識されることを想定しています。これらのことは、属性名に特化したSQLオプションの引用符など、言語設計上の解決策があります。しかし、たぶんあなたは、属性名&の関係値がユニークで順序付けされていない属性名で動作する代数のような単純なものが、自己完結型のチャンクで理解するのに役立つのか分かります。
あなたの代数がどれだけ純粋かによって異なります。例えば。 [ウィキペディア](https://en.wikipedia.org/wiki/Relational_algebra#Operations_for_domain_computations)から: "これまでに紹介された関係代数には、(等価を含む命題式の評価以外の)データドメインの計算を可能にするものは何もありません。たとえば、2つの列の数値を掛ける式を書くために、これまでに紹介した代数のみを使用することはできません。 " –
@Damien_The_Unbelieverああ、わかります。乗算をシミュレートする方法があるかもしれませんか? – JohnSmithy1266
使用している「関係代数」への参照は何ですか?沢山あります。 PSテキストのテキストを使用してください。画像/リンクは使用しないでください。テーブルのコードフォーマットを使用してください。記号のために単語を使う。またはGoogleの「ユニコード記号」。 – philipxy