Wat is SQL? Inleiding tot Structured Query Language
SQL kan worden gebruikt om relationele databases te maken en een reeks bewerkingen uit te voeren op bestaande databases, waaronder gegevensquery’s. De taal maakt deel uit van het standaardrepertoire van webontwikkelaars, data-analisten en onderzoekers. Maar in vergelijking met andere programmeertalen is SQL bijzonder. We leggen de kenmerken van de taal uit.
Wat is SQL precies?
SQL staat voor ‘Structured Query Language’. Het kan worden gebruikt om query’s uit te voeren op databases die gestructureerde of relationele gegevens bevatten. De taal is gebaseerd op**‘relationele algebra**’. Dit is een wiskundige theorie voor het structureren van gegevens en het berekenen van de resultaten van query’s. Veel van de speciale kenmerken van SQL als programmeertaal zijn afgeleid van deze wiskundige basis. SQL is ontwikkeld in het midden van de jaren zeventig en wordt nu beschouwd als de standaard programmeertaal voor databasetoepassingen.
Een belangrijk detail over SQL is dat het een pure query- of programmeertaal is , en geen uitgebreid databasebeheersysteem (DBMS). Enkele populaire DBMS’en die SQL implementeren zijn MySQL, Oracle SQL en SQLite. Deze DBMS’en gebruiken echter meestal dialecten van SQL, die aanvullende en/of andere commando’s kunnen hebben.
SQL als domeinspecifieke en declaratieve taal
In vergelijking met de meeste gevestigde programmeertalen is SQL bijzonder omdat het een domeinspecifieke taal (DSL) is. In tegenstelling tot de algemene programmeertalen (GPL’s), die geschikt zijn voor gebruik in veel verschillende toepassingen, kan SQL slechts voor één ding worden gebruikt: databases.
SQL is ook een declaratieve programmeertaal. Dit betekent dat de programmeur een gewenst resultaat als commando invoert en het systeem ervoor zorgt dat dit resultaat wordt bereikt. Dit staat in contrast met imperatieve programmering, waarbij de afzonderlijke stappen om de doelen te bereiken expliciet in de code worden gedefinieerd.
Waarvoor wordt SQL gebruikt?
SQL dient als interface voor interactie met relationele databasemanagementsystemen (RDBMS). Een relationele database kan worden gezien als een tabel waarin elke rij een vooraf bepaalde set attributen heeft die zijn gevuld met waarden. De SQL-code kan door mensen worden ingevoerd via een op tekst gebaseerde interface of worden geïntegreerd in API-toegangen.
Voordelen en nadelen van SQL
Voordelen van SQL
Het grootste voordeel van SQL ligt in de hoge bekendheid en het wijdverbreide gebruik van de technologie. Sinds het ontstaan in de jaren 70 is SQL de industriestandaard voor databasetoepassingen. Hierdoor is het relatief eenvoudig om ervaren SQL-programmeurs te vinden, evenals interfaces met andere gangbare technologieën en talen.
Bovendien is SQL niet voor niets de industriestandaard geworden. De taal is gebaseerd op een robuuste wiskundige basis die optimale gegevensopslag mogelijk maakt. Relationele databases vereisen echter een gedegen kennis van de technologie en theorie, evenals vaardigheid en planning bij het modelleren. Maar een goed ontworpen databaseschema maakt het mogelijk om door middel van passende query’s nieuwe inzichten uit de gegevens te verkrijgen.
Nadelen van SQL
Een nadeel van SQL en relationele databases in het algemeen is de hoge complexiteit van de technologie. SQL bestaat uit honderden commando’s en clausules, wat een grote uitdaging vormt voor nieuwkomers. Veel daarvan zijn implementatiespecifiek, wat het nog uitdagender maakt.
Bovendien vereist de structuur van een relationele database een aantal aannames over de op te slaan gegevens. Deze dienen om de kwaliteit van de opgeslagen gegevens te waarborgen, maar brengen ook een aantal beperkingen met zich mee die permanente problemen kunnen veroorzaken als het schema slecht is ontworpen. Wijzigingen in het schema tijdens het gebruik kunnen een serieuze uitdaging vormen. Naast dit gebrek aan flexibiliteit is het meestal erg lastig om een SQL-database geografisch te distribueren. Het optimaliseren van de prestaties van een database door middel van decentralisatie is dan ook allesbehalve eenvoudig.
Een laatste nadeel van SQL is dat het niet compatibel is met het veelgebruikte objectgeoriënteerde programmeren, dat steeds relevanter wordt. Bij objectgeoriënteerd programmeren worden gegevens en ‘gedrag’ (methoden) ingekapseld in objecten. Gegevens en methoden worden overgenomen via klassenhiërarchieën. De relationele benadering is fundamenteel anders, omdat gegevens over meerdere tabellen kunnen worden verdeeld. Bovendien is het onmogelijk om het gedrag van een object te modelleren. Om deze reden kunnen objecten niet 1:1 worden overgezet naar relationele databasestructuren.
Alternatieven voor SQL
Aangezien SQL aan het begin van de digitale revolutie werd uitgevonden, heeft de taal niets aan relevantie ingeboet. Er zijn echter inmiddels enkele alternatieve schema’s ontstaan die voor sommige toepassingen wellicht geschikter zijn.
Object-relationele databasemanagementsystemen
Object-relationele databasemanagementsystemen (ORDBMS) zoals PostgreSQL gebruiken SQL als querytaal, maar ondersteunen ook kernconcepten van objectgeoriënteerd programmeren. Objecthiërarchieën, overerving en objectgedrag kunnen worden gebruikt zonder gebruik te maken van object-relationele mapping (ORM). Met name door de gebruiker gedefinieerde en samengestelde gegevenstypen verminderen de complexiteit van schema’s en query’s.
NoSQL
SQL-gebaseerde DBMS’en zijn in de eerste plaats bedoeld voor het opslaan van gestructureerde gegevens, maar niet alle gegevens volgen een vast schema. Hier komen NoSQL-databases om de hoek kijken. De term NoSQL verwijst naar een familie van niet-relationele DBMS’en. In plaats van gegevens te modelleren als velden in een tabel, worden verschillende andere benaderingen gebruikt.
Een populaire benadering is het documentgebaseerd opslaan van gegevens. Hierbij worden gegevens opgeslagen in afzonderlijke documenten in plaats van in een tabel. Een voordeel van de documentgebaseerde benadering is dat de gegevens zelfschrijvend kunnen zijn. Dit betekent dat het schema van de gegevens wordt bepaald door het afzonderlijke document, niet door de database, waardoor gegevensinvoer verschillende schema’s kan volgen.
NoSQL-oplossingen zijn doorgaans minder complex en bieden voordelen op het gebied van schaalbaarheid en prestatieoptimalisatie. Bovendien is het meestal eenvoudiger om het schema tijdens het gebruik te wijzigen of gegevens flexibel op te slaan. Aan de andere kant zijn er mogelijk minder garanties met betrekking tot de kwaliteit van de gegevens.