Er zijn zoveel databases op de markt dat de ‘mind wars’ zijn begonnen. Dit is het juiste moment om de verschillen en het belang van de top 3 relationele databases op de markt te begrijpen – Microsoft SQL Server, Oracle PL/SQL en MySQL. De relationele database management systemen zijn momenteel de ruggengraat van de industrie geworden en met zoveel opties beschikbaar, is het moeilijk om uit te vinden welke te kiezen.
De relationele database management systemen werden geïntroduceerd in de jaren 1980. Dit artikel richt zich op het verkennen van de geschiedenis en de kenmerken van drie populaire RDBMS in de industrie: Microsoft SQL Server, Oracle, en MySQL. Microsoft SQL Server en Oracle zijn de commerciële software, MySQL is de open-source RDBMS.
Oracle was het eerste bedrijf dat in de jaren 1980 een RDBMS voor commercieel gebruik uitbracht. Halverwege de jaren negentig betrad Microsoft de markt met SQL Server als serieuze concurrent voor Oracle. MySQL daarentegen werd oorspronkelijk ontwikkeld en gedistribueerd als een open-source software. MySQL werd voor het eerst uitgebracht in 1995, en de Windows-versie kwam uit in 1998. In 2008 werd het overgenomen door SUN en daarna door Oracle.
De taal – hart van de communicatie
De ruggengraat van elk RDBMS is de taal die wordt gebruikt om de query’s uit te voeren en dat is hoe hun prestaties en implementatie worden beïnvloed. Hoewel alle drie de databasemanagementsystemen een versie van Structured Query Language, of SQL, gebruiken. Microsoft SQL Server gebruikt Transact-SQL, of T-SQL, een uitbreiding van SQL die oorspronkelijk door Sybase is ontwikkeld en door Microsoft wordt gebruikt. Oracle, daarentegen, gebruikt PL/SQL, of Procedural Language/SQL.
Beiden zijn verschillende “smaken” of dialecten van SQL en beide talen hebben een iets andere syntax en mogelijkheden. Het belangrijkste verschil tussen de twee talen is hoe ze omgaan met variabelen, opgeslagen procedures, en ingebouwde functies. PL/SQL in Oracle kan ook procedures groeperen in packages, wat niet kan in MS SQL Server. PL/SQL kan wat complexer en potentieel krachtiger zijn, terwijl T-SQL veel eenvoudiger en gemakkelijker te implementeren is.
MySQL, aan de andere kant, gebruikt de light-versie van T-SQL en combineert ook procedurele taal die nauw verwant is aan SQL/PSM. MySQL’s opgeslagen code-objecten komen echter dicht in de buurt van ANSI standaarden, maar ook hier hebben ze niet de breedte en diepte van T-SQL, Microsoft’s en Sybase’s eigen uitbreiding op SQL.
Transactie Controle
Een transactie kan worden gezien als een groep operaties die als een enkele eenheid worden uitgevoerd. Als de gebruiker bijvoorbeeld een aantal SQL-query’s probeert uit te voeren, dan worden ofwel alle query’s uitgevoerd, ofwel geen enkele. Dit is een van de belangrijkste verschillen tussen Oracle en MS SQL Server met betrekking tot transactiecontrole.
In de standaardinstelling zal MS SQL Server elk commando/taak afzonderlijk uitvoeren en committen, en het zal moeilijk of onmogelijk zijn om wijzigingen terug te draaien als er onderweg fouten optreden. Het “BEGIN TRANSACTION” commando wordt gebruikt om de statements op de juiste manier te groeperen en het begin van een transactie aan te geven, en aan het eind kan een COMMIT statement worden gebruikt. Deze COMMIT-instructie schrijft de gewijzigde gegevens naar schijf, en beëindigt de transactie. Binnen een transactie worden met ROLLBACK alle wijzigingen binnen het transactieblok verwijderd. Nadat een COMMIT is uitgegeven, is het niet mogelijk om verder terug te rollen dan het COMMIT-commando.
Waar in Oracle elke nieuwe databaseverbinding als een nieuwe transactie wordt gezien. Wanneer query’s worden uitgevoerd en commando’s worden gegeven, worden de wijzigingen alleen in het geheugen van de database aangebracht en blijven ze in de cache. Niets wordt gecommit totdat een expliciet COMMIT statement wordt gegeven. Na de COMMIT start het volgende commando in wezen een nieuwe transactie, en begint het proces opnieuw. Dit biedt meer flexibiliteit en helpt ook bij de foutcontrole, omdat er geen wijzigingen op schijf worden vastgelegd totdat het COMMIT-commando expliciet is uitgevoerd.
In het geval van MySQL is de ondersteuning van transacties gemakkelijk te combineren met InnoDB. InnoDB is een storage engine voor MySQL en is standaard beschikbaar bij MySQL. Het biedt de standaard ACID-compliant transactiefuncties, samen met foreign key ondersteuning.
Organisatie van Database Objecten
De organisatie van database objecten is ook een grote differentiator in deze 3 databases. MS SQL Server organiseert alle objecten, zoals tabellen, views en procedures, op basis van databasenamen. De MS SQL gebruikers krijgen een login toegewezen, die toegang krijgt tot de specifieke databases en ook tot de bijbehorende objecten. In Microsoft SQL Server heeft elke database een eigen, niet gedeeld schijfbestand op de server.
Waar in Oracle, zijn alle database objecten gegroepeerd door schema’s. De schema’s zijn niets anders dan de databasestructuren die een deelverzameling van databaseobjecten vormen. Alle databaseobjecten worden gedeeld door alle schema’s en gebruikers. Hoewel alles wordt gedeeld, zijn de rollen en rechten voor elke gebruiker gedefinieerd en kunnen deze worden beperkt tot bepaalde schema’s en tabellen.
In het kort, alle drie, MySQL, Oracle en SQL Server zijn krachtige RDBMS-opties. Hoewel er nog een aantal verschillen zijn in hoe ze “onder de motorkap” werken en geïmplementeerd zijn, kunnen ze op ruwweg vrijwel gelijkwaardige wijze worden gebruikt. Elk kan worden gebruikt met een ander doel in een andere omgeving. Het doel kan hetzelfde zijn, maar de implementatie verschilt.