parallax background image

Verschillen T-SQL en de relationele theorie

Gepubliceerd op 23 februari 2019 Leestijd : 2 minuten

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).

Onze klanten
Onze oplossingen