문제

저는 현재 튜플 미적분 문제를 풀고 있는데 제 생각에는 정답인 것처럼 보이는 답이 두 개 있는데 제 논리가 틀린지 아니면 둘 다 정답인지 확신할 수 없는 상황에 부딪혔습니다. 다른 것보다 정확합니다).

모든 품목을 공급하는 매장의 사이드를 찾으려고 노력하고 있습니다.스키마는 다음과 같습니다.

Stores(sid: integer, sname: string)

Items(iid: integer, iname: string)

Supplies(sid: integer, iid: integer, price: integer)

내가 생각 해낸 것은 다음과 같습니다.

{ P | ∃ S1 ∈ Supplies(P.sid = S1.sid ∧ ∀ i ∈ Items(∃ S2 ∈ Supplies (S2.iid = i.iid ∧ S2.sid = S1.sid)))}

{ P | ∃ S1 ∈ Supplies(P.sid = S1.sid ∧ ∀ i ∈ Items(S1.iid = i.iid))}

내 추론은 모든 항목에 대해 iid에 해당하는 소모품 테이블에 항목이 있는 sid를 찾고 있다는 것입니다.내 답변의 유일한 실제 차이점은 두 번째 답변이 추가 항목을 잘라낼 수 있는 별도의 두 번째 소모품 테이블을 사용하지 않는다는 것입니다. S2.sid = S1.sid.내 교과서에는 이것과 비슷한 질문이 있고 1과 비슷한 대답이 있지만 내 추론은 두 번째 대답을 얻습니다.

도움이 되었습니까?

해결책

답변

테이블 이름을 약간 바꾸겠습니다.

Store(s) -- store [s.sid] has name [s.sname]
Item(i) -- item [i.iid] has name [i.iname]
Offer(o) -- store [o.sid] offers item [o.iid] for $[o.price]

< sid > 형식의 튜플을 원합니다.

-- store s.sid offers every item, ie
-- for all Items i: store s.sid offers item i.iid, ie
-- for all Items i: there exists Offer o: [o.sid = s.sid ∧ o.iid = i.iid], ie
∀ i ∈ Items ∃ o ∈ Offer [o.sid = s.sid ∧ o.iid = i.iid]

이러한 매장에 대한 쿼리는 다음과 같습니다. 이러한 매장은 두 개 이상 있을 수 있습니다.

{ s : < sid > | ∀ i ∈ Items ∃ o ∈ Offer [o.sid = s.sid ∧ o.iid = i.iid] }

당신의 답변 2

모든 항목에 대해 iid에 해당하는 Supplies 테이블의 항목이 있는 sid를 찾고 있습니다.

그것은 내 솔루션과 마찬가지로 "존재하는 모든 것"을 가지고 있습니다.그러나 귀하가 제안한 답변 2에는 "모두를 위한 존재"가 있습니다.

{ P | ∃ S1 ∈ Supplies(
        P.sid = S1.sid
    ∧ ∀ i ∈ Items(S1.iid = i.iid)
    )}

이는 [P의 sid가 S1의 sid이고 모든 항목에 대해 S1의 iid가 해당 항목의 iid]인 제안 S1이 있는 튜플 P를 요청합니다.여기에는 원하는 것이 아니라 Item의 모든 항목과 동일한 단일 iid가 포함된다는 점을 확인하시기 바랍니다.

당신의 답변 1

{ P | ∃ o ∈ Offer (
        P.sid = o.sid
    ∧ ∀ i ∈ Item (∃ o2 ∈ Offer (o2.iid = i.iid ∧ o2.sid = o.sid))
    )}

위에서 다음 사항을 확인하세요. ∀ ... 수단 store o.sid offers every item.그래서:

{ P | ∃ o ∈ Offer (P.sid = o.sid
    ∧ store o.sid offers every item  )
    )}

제안이 없고 일부 상점이 있는 경우 모든 상점에서 모든 품목을 제공합니다.하지만 제안이 없기 때문에 다음은 거짓입니다. ∃ o ∈ Offer (P.sid = o.sid)).어떤 추신도 그것을 사실로 만들지 않습니다.그래서 이것은 {}입니다.그래서 이것은 대답이 아닙니다.

(귀하의 답변 1은 Codd의 원래 관계 분할 연산자로 표현된 교과서 답변에서 수정될 수 있습니다.하지만 제안을 항목으로 나누면 실제로 튜플이 반환되지 않습니다. store s.sid offers every item.다음 행을 반환합니다. store s.sid offers every item AND there is at least one item.그래서 대답은 ~ 아니다 제안/항목으로 표현됩니다.)

(실제로 2에는 자연어 설명과 내 답변에 비해 추가 ∃가 있지만 이는 밖의 ∃.따라서 귀하의 해법 1은 그런 식으로 정답을 연상시킵니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 dba.stackexchange
scroll top