Bardzo proste pytanie dotyczące algebry relacyjnej, której nie mogę znaleźć w Internecie ani w niektórych książkach.
Załóżmy, że pracownik relacji (klucz, wynagrodzenie, premia) i chcę utworzyć nową relację R (klucz, totalMoney), gdzie totalMoney = wynagrodzenie + premia. Moja próba to:
R1 (klucz, totalMoney) = rzutowanie klucz, wynagrodzenie (pracownik)
R2 (klucz, totalMoney) = rzutowanie klucz, bonus (pracownik)
R = klawisz suma zagregowana całkowita kwota pieniędzy (R1 U R2)
Czy to jest w porządku?
Jeśli wszystko jest w porządku, to nie rozwiązuje wszystkich moich problemów :(
Załóżmy, że chcę teraz uzyskać RT2 (klucz, totalMoney * 2). Do tego moja próba to:
RT2 = aktualizacja całkowita kwota pieniędzy <- totalMoney * 2 (R) // "aktualizacja" jest relacyjnym operatorem algebry
Czy to jest w porządku?
Myślę, że moje odpowiedzi nie są (bardzo) dobre. Jeśli możesz mi pomóc znaleźć miłe i miłe rozwiązanie, docenię to.
Dzięki
Odpowiedzi:
1 dla odpowiedzi № 1Oryginalna algebra Codda nie zawierała takiej operacji, ponieważ mocno wierzył, że takie obliczenia powinny być wykonywane w aplikacji.
I niestety większość tego, czego naucza się w dzisiejszych czasachwciąż jest bardzo zbliżony do tych oryginalnych pomysłów Codda, które mają już 40 lat, a więc wszystkie ewolucje, które miały miejsce w ciągu tych 40 lat, są, niestety, przeoczone.
Jedną z tych rzeczy jest operator EXTEND, który został wprowadzony przez Chrisa Date i Hugh Darwen. Ten operator dba dokładnie o to, czego potrzebujesz.
0 dla odpowiedzi nr 2
Tradycyjna algebra relacyjna nie wspiera działania arytmetyczne. Podjęto jednak różne próby jego rozszerzenia: na przykład Gabbay i McBrian omówienie arytmetycznych rozszerzeń operatorów wyboru i projekcji, natomiast Boncz i in. zaproponował wiele relacyjnych rozszerzeń algebry (w tym operacje arytmetyczne) dla ich kompilatora Pathfinder XQuery.