sql >> Databasteknik >  >> RDS >> Database

Relationell algebra

När vi arbetar med relationsmodellen har vi 2 grupper av operationer vi kan använda.

Den första kallas relationell algebra , och det är ett procedurspråk .

Detta är vad SQL bygger på, och som sådant är det mycket viktigt att lära sig - eftersom SQL är de-facto standarden för att arbeta med relationsdatabaser.

Den andra kallas relationskalkyl och istället för att vara processuellt är det ett deklarativt språk . Det är en grundläggande skillnad i hur vi interagerar med databaser, eftersom du inte talar om för databasprogramvaran vad den ska göra , säg bara till vad du vill , och låt den reda ut detaljerna om hur man gör det.

Detta är en vanlig skillnad mellan programmeringsspråk. I modern frontend säger vi att interaktion med DOM i React är deklarativ. Att använda vanilla JavaScript för att ändra DOM är procedurmässigt.

Språk som Datalog, QBE och QUEL har relationskalkyl som bas. Jag tänker inte prata om detta eftersom jag tycker att det är ett mycket mer nischat sätt att göra saker på jämfört med det mer praktiska tillvägagångssättet som följs av SQL, men du kan titta på det om du vill.

Med tanke på denna introduktion, låt oss fortsätta med relationell algebra .

Vi har två typer av operationer:

  • primär verksamhet
  • gå med i verksamheten

Primära operationer i relationalgebra

Primära operationer är:

  • fackförening för att hämta data från två tabeller, generera en summa av tuplarna, så länge de två tabellerna har samma kolumner och attributtyper (domän).
  • skillnad för att få data som finns i den första tabellen men inte i den andra tabellen, vilket genererar en skillnad mellan tuplarna, så länge som de två tabellerna har samma kolumner och attributtyper (domän).
  • kartesisk produkt för att hämta data från två tabeller till och generera en enda tabell som kombinerar data från dem, baserat på ett attributvärde.
  • välj att bara extrahera några av tuplarna (raderna) som finns i en tabell baserat på vissa kriterier.
  • projekt för att generera en ny tabell som endast innehåller ett eller flera attribut (kolumner) i en befintlig tabell
  • byt namn används för att byta namn på ett attribut, används för att förhindra konflikter när flera tabeller har samma namn för olika data

Gå med operationer i relationalgebra

Joins är förmodligen de mest kraftfulla operationerna du kan utföra med relationell algebra. De bygger ovanpå primära operationer och de låter dig korrelera data som finns i olika relationer (tabeller).

Notera:Jag kommer snart att prata om anslutningar i praktiken i ett DBMS, det här är mest teori.

Vi har två huvudsakliga anslutningsversioner:naturlig koppling och theta join . Alla andra versioner är extraherade från dessa 2.

Naturlig gå med

Naturlig koppling korrelerar två relationer (tabeller) och skapar en ny tabell baserad på samma värden för ett attribut.

Vi behöver två relationer med samma attributnamn (kolumn), först. Om värden i attributen i relation A är omatchade i attributen i relation B, är raden inte en del av resultatet, den ignoreras.

Exempel:

Relation A

Anställd-ID Namn
1 Markera
2 Tony
3 Rick

Relation B

Managernamn Anställd-ID
Todd 1
Albert 2

Vi kan utföra en naturlig sammanfogning för att få chefsnamnet för varje anställd:

Anställd-ID Namn Managerns namn
1 Markera Todd
2 Tony Albert

Eftersom relationerna har attributnamnet Employee ID gemensamt, finns det bara en gång i resultatet, inte två gånger.

Den anställde #3 närvarande i relation A, Rick, ingår inte i denna tabell, eftersom det inte finns någon motsvarande post i relation B.

Theta-join

En theta-join gör det möjligt att utföra en sammanfogning baserat på alla kriterier för att jämföra två kolumner i två olika relationer, inte bara jämlikhet som den naturliga sammanfogningen gör.

Den utför en kartesisk produkt av två tabeller och filtrerar resultaten baserat på valet vi vill göra.

Equi-join

Equi-join är en theta-join, där urvalet baseras på likhet mellan attributvärden i de två olika tabellerna.

Skillnaden med den naturliga sammanfogningen är att vi kan välja vilka attributnamn (kolumner) vi vill jämföra.

Vi kommer att prata mycket mer om joins senare när SQL introduceras, så att vi kan använda dem i praktiken.


  1. LOBBEHÅLLNING

  2. Hur man skapar ett serverlöst GraphQL API för MySQL, Postgres och Aurora

  3. Minska databasanrop för att förbättra webbplatsens prestanda

  4. BILAGA sqlite-databas i Android med SQLiteOpenHelper