Verschillen T-SQL en de relationele theorie

Geschreven door: op zaterdag 23 februari 2019

Leestijd:

In de vorige blog is besproken wat de relationele theorie is en zijn enkele implicaties van het model uitgelegd. Waarom is T-SQL dan een benadering van het relationele model? Hieronder volgt een opsomming van enkele punten waarop T-SQL afwijkt van het relationele model.

Dubbele waarden


Een van de indicaties uit de relationele theorie is dat de set unieke objecten bevat, dus dat er geen dubbele waarden in een set bestaan. T-SQL dwingt dit zelf niet af, er kunnen dubbele waarden in een tabel staan en worden teruggegeven in een query. Stel dat je een datatabel hebt met daarin gebruikers van je applicatie. De gebruikers moeten hun woonplaats aangeven. Dan kan het makkelijk voorkomen dat er meerdere mensen in Amsterdam wonen. Als je in T-SQL alle steden uitvraagt van de gebruikerstabel, dan komt Amsterdam meerdere malen voor in de resultaten. Dit gaat tegen het relationele model in. Hier heeft T-SQL wel een oplossing voor, namelijk het gebruik van DISTINCT. DISTINCT geeft de unieke, verschillende steden terug en dus geen dubbele waarden.

 

Geen heading


Daarnaast is het ook mogelijk om binnen T-SQL data op te vragen zonder een kolomnaam op te geven:

SELECT voornaam + ‘ ‘ + achternaam
FROM dbo.gebruikers

Hier krijg je in de resultaten een kolom te zien zonder unieke heading met daarin de voornaam en achternaam van alle gebruikers gescheiden door een spatie. Dit gaat in tegen het relationele model, waar het niet toegestaan is om een attribuut zonder unieke naam binnen de set op te nemen. Tegen dit issue loop je ook aan als je bijvoorbeeld in een simpele JOIN twee tabellen aanroept die beiden eenzelfde kolomnaam bevatten. Natuurlijk heeft T-SQL hier ook weer een oplossing voor, het AS keyword. Met dit keyword kun je kolommen maar ook tabellen een alias geven, waardoor de namen weer uniek zijn: 

SELECT voornaam + ‘ ‘ + achternaam AS volledige naam 
FROM dbo.gebruikers
 

Volgorde niet van belang


In het relationele model wordt impliciet aangegeven dat de volgorde van de set niet van belang is. Binnen T-SQL is het wel mogelijk om een set op een bepaalde volgorde op te vragen. De volgende query sorteert de resultaten op alfabetische volgorde:

SELECT voornaam, acternaam
FROM dbo.gebruikers
ORDER BY voornaam

De data die wordt weergegeven als resultaat van de query is geen relatie, aangezien de volgorde hier wordt gegarandeerd. Hier gaat T-SQL in tegen het relationele model. Een oplossing hiervoor is om geen gebruik te maken van ORDER BY.

Dit zijn enkele punten waarop T-SQL afwijkt van het relationele model. Alle hierboven genoemde afwijkingen zijn te voorkomen door het gebruik van bepaalde constructen (zoals het AS keyword) of door bepaalde constructen juist niet te gebruiken (zoals bij ORDER BY).


Andere blogartikelen

  • Tabellen in HTML

    Geschreven door: op maandag 30 december 2019

    Met UL, OL en LI maak je opsommingen. Met DL, DT en DD maak je lijsten van definities. Naast opsommingen en definities is er ook nog tabulaire data: gegevens die in een tabel staan, waarbij je rijen h ...

    Bekijk het artikel »
  • SQL en het gebruik van For XML: Explicit en Path

    Geschreven door: op maandag 30 december 2019

    In mijn vorige blog hebben we For XML Raw en For XML Auto besproken. In deze blog zullen we For XML Explicit en For XML Path doornemen. Hieronder eerst wat uitleg over beide:EXPLICIT: Met ...

    Bekijk het artikel »
  • UX audit: heatmaps

    Geschreven door: op maandag 30 december 2019

    Een UX audit kun je uitvoeren op een digitaal product met als doel er achter te komen waar gebruikers van het product tegenaan lopen in het gebruik van bijvoorbeeld uw site. Door een UX audit te laten ...

    Bekijk het artikel »
Bel 072 5345 888
Meer dan 40 bedrijven vertrouwen op ons
Onze Middelen en Technologieën
microsoft silver partner
Adobe partner
fd-gazellen-2018.jpg
Google analytics
partners-logo.jpg
Op de hoogte blijven?

Meld u aan voor de gratis nieuwsbrief om op de hoogte te blijven van onze activiteiten