Интуитивное свойство оператора деления реляционной алгебры просто состоит в том, что оно является обратным к декартовому произведению. Например, если у вас есть R и S два отношений, то, если U есть отношение определяется как декартово произведение из них:
U = R x S
деления является оператор таким образом, что:
U ÷ R = S
и :
U ÷ S = R
Таким образом, вы можете думать о результате U ÷ R
как: «проекция U
что, умноженное на R
, производит U
", а также операции ÷
, в качестве операции, которая находит все« детали »U
, которые объединены с все кортежи R
.
Однако, чтобы быть полезным, мы хотим, чтобы эта операция применима к любой паре отношений, то есть мы хотим разделить отношение, которое является , а не результатом декартова продукта. Для этого формальное определение более сложное.
Итак, предположим, что мы имеем два отношения R и S с атрибутами соответственно А и В, их разделение может быть определена как:
R ÷ S = π AB (R) - П AB ((π АВ (R) х S) - R)
, которые могут быть считаны таким образом:
П AB (R) x S: проект R по атрибутам R, которые не входят в S, и умножают (декартово произведение) это отношение с S. Это создает связь с атрибутами A из R и со строками всех возможных комбинаций строк S и проекции R;
Из предыдущего результата вычесть все кортежи первоначально в R, то есть выполнить (π AB (R) х S) - R. Таким образом, мы получаем «лишние» кортежи, то есть кортежи в декартовом продукте, который не присутствовал в исходном соотношении.
Наконец, вычтите из исходного соотношения эти дополнительные кортежи (но, опять же, выполните эту операцию только по атрибутам R, которых нет в S). Таким образом, окончательная операция: π A-B (R) - π A-B (результат этапа 2).
Итак, подходит к вашему примеру, проекция r
на D равно:
(D)
d1
d2
d3
d4
и декартово произведение с s
является:
(A, B, D)
a1 b1 d1
a1 b1 d2
a1 b1 d3
a1 b1 d4
Теперь мы можем удалить из этого набора кортежи, которые также находились в исходном соотношении r
, т.е.первые два кортежа и последние один, так что мы получаем следующий результат:
(A, B, D)
a1 b1 d3
И, наконец, мы можем удалить предыдущие кортежи (проектируется на D), от исходного соотношения (вновь проектируемого на D), то есть, мы убираем:
(D)
d3
от:
(D)
d1
d2
d3
d4
и мы получаем следующий результат, который является конечным результатом разделения:
(D)
d1
d2
d4
Наконец, мы могли бы перепроверить результат путем умножения его с оригинальным соотношением s
(который состоит только из кортежа (a1, b1)
):
(A B D)
a1 b1 d1
a1 b1 d2
a1 b1 d4
И глядя на ряды исходного соотношения r
, вы можете увидеть этот факт, что должно дать вам важную информацию о значении оператора деления:
только значение из колонки D
в r
, которые присутствуют вместе с (a1, b1)
(единственный кортеж s
), являются , d2
и d4
.
Вы также можете увидеть другой пример в Wikipedia, и для детального объяснения разделения, вместе с его преобразование SQL, вы можете взглянуть на эти slides.
Благодарим вас за этот очень четкий и педагогический ответ на сложную тему! Я понимаю, что я близок к пониманию разделения. Тем не менее, почему (π A-B (R) x S) - R = (π A-B (R) x S) - (π A-B, A (R)), если принять формулу, данную во время моей лекции? И почему единственными значениями D, которые соединены с r, то есть кортежем (a1, b1), являются d1 и d2. ? Что означает спаривание из первого массива? – Marine1
На самом деле формулы идентичны: если вы видите, в вашей формуле единственное различие заключается в последнем члене, которое является R в моей формуле, и πR-S, S (R) в вашей формуле, что означает: проект по атрибутам (RS) U (S), что просто означает: проект по атрибутам R, то есть все атрибуты отношения R (я по-разному назвал атрибуты из имени отношения, в то время как в вашей формуле они имеют одинаковое имя). (Продолжить) – Renzo
Во втором вопросе я уже видел, что сделал ошибку, поскольку в исходном отношении есть также набор a1, b1, d4, который я не рассматривал. Я исправляю свой ответ. – Renzo