3

次の関係があるとします。

Branch (branchNo(PK), street, city, postcode)

Staff (staffNo(PK), fName, lName, sex, branchNo(FK))

この質問には関係ありませんが、PK = 主キー & FK = 外部キー

次のクエリの関係代数をどのように記述しますか。

グラスゴーで働くすべての女性スタッフの名前を挙げてください.

私の試み:

σStaff.sex=F & Branch.city = GlasgowfName, lName, sex, branchNo(Staff) x πcity, branchNo(Branch))

私の選択(σ) ステートメント (SELECT と混同しないでください) が構文的に間違っていることはわかっています。

σStaff.sex=F & Branch.city = Glasgow

異なるリレーションで 2 つのセレクションを作成するにはどうすればよいですか? 言い換えれば、関係代数の WHERE 句で 2 つ以上の条件を持つ SQL ステートメントをどのように表現すればよいでしょうか。「&」を使用しましたが、これは正しくありませんか? ある選択を別の選択に埋め込む必要がありますか?

宿題ではない

4

1 に答える 1

6

正式な関係代数では、論理論理和、および (通常は) 同じ記号 (それぞれ ) を使用しますが、作成者は独自の構文を自由に選択できます。クエリは次のように記述できます。

πfName, lName(gender=F ∧ city=Glasgow)(Staff ⋈ Branch))

x (むしろ ⨯) はデカルト積の記号であることに注意してください。自然結合の場合は、⋈ (ボウタイ) が必要です。

自然結合ではなくデカルト積が必要な場合は、基本的に選択に適切な条件を追加して自然結合を実装します。また、属性 branchNo が両方のリレーションに共通であるという事実に対処する必要があります。これは、名前変更演算子(ρ) を使用して行うことができます。

πfName, lName(gender=F ∧ city=Glasgow ∧ branchNo=bNum)(Staff ⨯ ρbNum/branchNo(Branch)))

正式には、次の理由でこれを行うことができます。

R ⋈ S = πα(R),α(S)-α(R)α(R)∩α(S)=t1..k(R ⨯ ρ t1..k/α(R)∩α(S)(S))))

ここで、α(T) は関係 T の属性名 (α(R) ∩ α(S) を共通の属性名にする) であり、t 1..k ⊈ α(R) ∪ α(S) は共通の新しい名前です。属性。

于 2011-04-24T19:51:51.243 に答える