Als we met het relationele model werken, hebben we 2 groepen bewerkingen die we kunnen gebruiken.
De eerste heet relationele algebra , en het is een proceduretaal .
Dit is waar SQL op is gebaseerd en als zodanig is het erg belangrijk om te leren - aangezien SQL de de-facto standaard is voor het werken met relationele databases.
De tweede heet relationele calculus en in plaats van procedureel te zijn, is het een declaratieve taal . Het is een fundamenteel verschil in hoe we omgaan met databases, omdat je de databasesoftware niet vertelt wat ze moeten doen , vertel het gewoon wat je wilt , en laat het uitzoeken hoe het moet.
Dit is een veelvoorkomend onderscheid tussen programmeertalen. In moderne frontend zeggen we dat interactie met de DOM in React declaratief is. Het gebruik van vanilla JavaScript om de DOM te wijzigen is procedureel.
Talen zoals Datalog, QBE en QUEL hebben relationele calculus als basis. Ik ga hier niet over praten omdat ik denk dat het een veel meer niche-manier is om dingen te doen in vergelijking met de meer praktische benadering die door SQL wordt gevolgd, maar je kunt ernaar kijken als je wilt.
Laten we na deze inleiding verder gaan met relationele algebra .
We hebben 2 soorten operaties:
- primaire bewerkingen
- deelnemen aan operaties
Primaire bewerkingen in relationele algebra
Primaire bewerkingen zijn:
- vereniging om gegevens uit twee tabellen te halen, waarbij een som van de tuples wordt gegenereerd, zolang de twee tabellen dezelfde kolommen en attribuuttypen (domein) hebben.
- verschil om gegevens in de eerste tabel te krijgen, maar niet in de tweede tabel, waarbij een verschil van de tuples wordt gegenereerd, zolang de twee tabellen dezelfde kolommen en attribuuttypen (domein) hebben.
- cartesiaans product om gegevens van twee tabellen in te halen en één enkele tabel te genereren die de gegevens ervan combineert, op basis van een attribuutwaarde.
- selecteer om slechts enkele van de tupels (rijen) in een tabel te extraheren op basis van bepaalde criteria.
- project om een nieuwe tabel te genereren die slechts één of meer attributen (kolommen) van een bestaande tabel bevat
- naam wijzigen gebruikt om een attribuut te hernoemen, gebruikt om conflicten te voorkomen wanneer meerdere tabellen dezelfde naam hebben voor verschillende gegevens
Samen met bewerkingen in relationele algebra
Joins zijn waarschijnlijk de krachtigste bewerkingen die u met relationele algebra kunt uitvoeren. Ze bouwen voort op primaire bewerkingen en stellen u in staat gegevens in verschillende relaties (tabellen) te correleren.
Opmerking:ik zal het binnenkort hebben over joins in de praktijk in een DBMS, dit is meestal theorie.
We hebben 2 hoofdversies voor samenvoegen:natuurlijke samenvoeging en theta join . Alle andere versies zijn geëxtraheerd uit die 2.
Natuurlijke deelname
Natuurlijke deelname correleert twee relaties (tabellen), en maakt een nieuwe tabel op basis van dezelfde waarden van een attribuut.
We hebben eerst twee relaties met dezelfde attribuutnaam (kolom) nodig. Als waarden in de attributen in relatie A niet overeenkomen in de attributen in relatie B, maakt de rij geen deel uit van het resultaat, maar wordt deze genegeerd.
Voorbeeld:
Relatie A
Werknemers-ID | Naam |
---|---|
1 | Markeren |
2 | Tony |
3 | Rick |
Relatie B
Naam manager | Werknemers-ID |
---|---|
Todd | 1 |
Albert | 2 |
We kunnen een natuurlijke samenvoeging uitvoeren om de naam van de baas voor elke werknemer te krijgen:
Werknemers-ID | Naam | Naam manager |
---|---|---|
1 | Markeren | Todd |
2 | Tony | Albert |
Omdat de relaties de naam van het kenmerk Employee ID gemeen hebben, komt deze maar één keer voor in het resultaat, niet twee keer.
De werknemer #3 die aanwezig is in relatie A, Rick, is niet opgenomen in deze tabel, omdat er geen corresponderende vermelding is in relatie B.
Theta-join
Een theta-join maakt het mogelijk om een join uit te voeren op basis van elk criterium om twee kolommen in twee verschillende relaties te vergelijken, niet alleen gelijkheid zoals de natuurlijke join doet.
Het voert een cartesiaans product uit van twee tabellen en filtert de resultaten op basis van de selectie die we willen maken.
Equi-join
De equi-join is een theta-join, waarbij de selectie is gebaseerd op gelijkheid tussen attribuutwaarden in de twee verschillende tabellen.
Het verschil met de natural join is dat we kunnen kiezen welke attributennamen (kolommen) we willen vergelijken.
We zullen later veel meer over joins praten als SQL wordt geïntroduceerd, zodat we ze in de praktijk kunnen gebruiken.