Отдел реляционной алгебры

В настоящее время я занимаюсь вопросом деления реляционной алгебры. У меня есть следующие два отношения:

              A | B | C                 B
              --|---|--                ---
              1 | 2 | 3                 2
Relation R =  1 | 2 | 6   Relation T =  
              4 | 2 | 2
              4 | 5 | 6

Сейчас я делаю следующую операцию: R ÷ T

Когда я вычисляю это, мой результат выглядит следующим образом:

              A | C                
              --|--               
              1 | 3               
R ÷ T =       1 | 6    
              4 | 2 

Для меня это потому, что для разделения я смотрю на эти кортежи в R которые присутствуют в сочетании со всеми кортежами в T, Но когда я использую калькулятор реляционной алгебры, такой как RelaX, он возвращает

              A | C                
              --|--               
  R ÷ T =     4 | 2                

Где я ошибся? Заранее благодарю за любую помощь.

Есть кто-нибудь, кто может помочь?

1 ответ

Выполнение деления на эти схемы не очень хорошо, чтобы полностью понять, как работает оператор. Определения этого оператора не очень понятны, и операция обычно заменяется комбинацией других операторов.

Ясный способ увидеть, как это работает в вашем случае, заключается в создании нового экземпляра R с упорядоченными столбцами, правильно определяющими новую схему: (A,C,B). Это означает, что атрибут T появляется как последний атрибут в A. В этом случае, когда вы выполняете действительно простое деление, увидеть результат довольно просто, но представьте, что у вас есть схема R(A,D,B, В) и Т (В, Г). Здесь атрибуты T появляются с другим порядком в R, и, учитывая некоторые экземпляры с небольшим количеством кортежей, это уже затруднит проверку, просто просматривая их.

Это может быть самым сложным оператором, определенным в реляционной алгебре, поскольку запрос обычно включает в себя понятия из выбора, проекции и объединения. Также сложно выразить это только словами. Хороший способ думать об этом операторе - думать о GROUP BY на SQL. В вашем примере это означает использование атрибутов GROUP BY A, C, что создаст группы с каждой комбинацией различных значений для этих атрибутов, которые появляются в экземпляре схемы. Каждая из этих групп будет иметь набор всех значений B, связанных с комбинациями значений A, C. Если вы рассматриваете значения атрибута B в экземпляре T как набор, вы можете быстро проверить: каждая группа, полученная группированием по A, C, если набор значений B в T включен в набор значений B в R, то значения A, C являются кортежем результирующего отношения.

Я знаю, что немного опоздал на этот вопрос, но я видел много людей, смущенных этим. Если это не достаточно ясно, я оставляю ссылку на документ, который я написал, объясняя это намного более подробно и с действительно хорошим примером, ЗДЕСЬ.

Другие вопросы по тегам