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

  • Waarom developers het zo leuk vinden bij ons

    Geschreven door: op woensdag 13 november 2019

    Bij ons op kantoor werkt een team van betrokken specialisten, waaronder 4 backend developers en 4 UX developers. Zij zorgen voor een belangrijk fundament binnen dit bedrijf. Een goede reden om te zorg ...

    Bekijk het artikel »
  • Beachvolleyballen voor het goede doel!

    Geschreven door: op vrijdag 25 oktober 2019

    Afgelopen vrijdag 11 oktober  hebben diverse betrokken specialisten uit ons team de handen ineen geslagen met een van onze opdrachtgevers. Samen met De Monchy International B.V. hebben we meegeda ...

    Bekijk het artikel »
  • Het gebruik van een Photoslider

    Geschreven door: op maandag 7 oktober 2019

    Ze zijn er in alle soorten en maten en staan meestal bovenaan een websitepagina. Dan heb ik het natuurlijk over photosliders. Zo bent u vast bekend met de traditionele foto die langzaam vervaagd en wa ...

    Bekijk het artikel »
Bel 072 5345 888
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