Een belangrijk voordeel van het gebruik van een RDBMS is “referentiële integriteit”. Referentiële integriteit verwijst naar de nauwkeurigheid en consistentie van gegevens. Deze gegevensintegriteit wordt bereikt door het gebruik van deze primaire en vreemde sleutels.
Referentiële integriteit bewaart de integriteit van gegevens door middel van “constraints.” Constraints zijn de regels die de nauwkeurigheid van de gegevens afdwingen door te voorkomen dat een verwante record wordt verwijderd zonder eerst de primaire record in de hoofdtabel te verwijderen. Als een primaire-buitenlandse-sleutelrelatie correct is toegevoegd, dan zal een poging om een primair record te verwijderen zonder eerst gerelateerde records uit andere tabellen te verwijderen, de transactie blokkeren totdat de gerelateerde records zijn verwijderd. Dit voorkomt wat wordt genoemd “orphaned records,” die zijn verwezen records in een tabel die niet langer een primaire record in de hoofdtabel.
De drie regels die referentiële integriteit afdwingt, zijn:
1. Een foreign key moet een overeenkomstige primary key hebben. (“No orphans” regel.)
2. Wanneer een record in een primaire tabel wordt verwijderd, moeten alle gerelateerde records die naar de primaire sleutel verwijzen ook worden verwijderd, hetgeen typisch wordt bereikt door gebruik te maken van cascade delete.
3. Als de primaire sleutel voor een record verandert, moeten alle corresponderende records in andere tabellen die de primaire sleutel als een buitenlandse sleutel gebruiken ook worden gewijzigd. Dit kan worden bereikt met een cascade-update.
Vraagstelling van de gegevens in een relationeel databasebeheersysteem geschiedt met behulp van Structured Querying Language (SQL), een robuuste taal die is ontworpen voor het beheer van de gegevens in een relationele database.
SQL heeft de mogelijkheden om records te maken, op te halen, bij te werken en te verwijderen en leunt zwaar op deze primaire/buitenlandse-sleutelrelatie om verwante gegevens in meerdere tabellen te identificeren. De mogelijkheden van SQL maken het relationele databasesysteem tot de eerste keuze voor elke toepassing die een sterke transactionele functionaliteit, datamining en complexe rapportage vereist.
Deze SQL-instructie demonstreert het ophalen van een resultatenset van hoe alle verkooprecords voor een enkele werknemer met EmployeeId = 1 zouden worden opgehaald.
SELECT * FROM Employees
JOIN Sales ON Employees.EmployeeId = SALES.EmployeeId
WHERE EmployeeId = 1
De volgende SQL-instructie is een voorbeeld van een query die joins op meerdere tabellen implementeert. In dit geval haalt de SQL-query alle informatie over de werknemer, de verkoop en de klant op uit de tabel Klanten.
SELECT * FROM Employees
JOIN Sales ON Employees.EmployeeId = SALES.EmployeeId
JOIN Customers ON Customers.CustomerId = SALES.CustomerId
WAAR EmployeeId = 1
Relationele databases bieden ook functionaliteit die “indexering” wordt genoemd. Een database-index is een gegevensstructuur die het terugzoeken van gegevens sneller maakt. Indexen worden gewoonlijk toegevoegd aan gegevensvelden die routinematig worden gebruikt om query’s uit te voeren en tabellen samen te voegen. In de bovenstaande SQL-statements EmployeeId en CompanyId zouden kandidaten zijn voor dit type optimalisatie.
Niet-relationele databases
In de niet-relationele database, of NoSQL-database, worden gegevens opgeslagen. Echter, in tegenstelling tot de relationele database, zijn er geen tabellen, rijen, primaire sleutels of foreign keys. In plaats daarvan gebruikt de niet-relationele database een opslagmodel dat is geoptimaliseerd voor specifieke eisen van het type gegevens dat wordt opgeslagen.
Enkele van de populairdere NoSQL-databases zijn MongoDB, Apache Cassandra, Redis, Couchbase en Apache HBase.
Er zijn vier populaire niet-relationele types: document data store, kolomgeoriënteerde database, key-value store en graph database. Vaak worden combinaties van deze typen gebruikt voor één toepassing.
Document data stores
Een document data store beheert een set van benoemde stringvelden en objectgegevenswaarden in een entiteit die wordt aangeduid als een “document”, meestal opgeslagen in de vorm van JSON-documenten, die op verschillende manieren kunnen worden gecodeerd, waaronder XML, YAML, JSON, BSON of als platte tekst. De velden in de documenten worden zichtbaar gemaakt, zodat een toepassing gegevens kan bevragen en filteren aan de hand van veldwaarden.
De document stores vereisen niet dat alle documenten identieke gegevensstructuren behouden, hetgeen een grote mate van flexibiliteit biedt. Het is dan ook gemakkelijk te zien hoe deze flexibiliteit kan worden benut als de eisen van een organisatie veranderen.
Columnar (of kolomgeoriënteerde) data stores
Een columnar data store organiseert gegevens in kolommen, wat conceptueel vergelijkbaar is met de relationele database. Het echte voordeel van een kolom-georiënteerde database ligt in de gedenormaliseerde aanpak voor het structureren van schaarse gegevens, die voortkomt uit de kolom-georiënteerde aanpak voor het opslaan van gegevens.
Key-value stores
Dit is de minst gecompliceerde van de NoSQL databases en, zoals de naam al aangeeft, de key-value store is eenvoudigweg een verzameling van key-value paren die in een object zijn opgenomen.
Document stores
Document stores zijn iets complexer dan key-value stores. Zij gaan niet uit van een bepaalde, met een schema gespecificeerde documentstructuur. De document store is ontworpen om alledaagse documenten op te slaan zoals ze zijn, en ze staan ingewikkelde query’s toe.
MongoDB en CouchDB zijn beide voorbeelden van document stores.
Grafische databases
De laatste is het meest complexe niet-relationele databasetype. Zij is ontworpen om relaties tussen entiteiten efficiënt op te slaan. Wanneer gegevens sterk onderling verbonden zijn, zoals inkoop- en productiesystemen of verwijzingen naar catalogi, zijn grafiekdatabases een goede oplossing.
De mogelijkheden voor grafiek-NOSQL-databases zijn oneindig, en nu de gegevens die we verzamelen steeds meer onderling verbonden raken, zullen grafiekdatabases steeds populairder worden, ook de nog steeds dominante relationele database.
In plaats van de Structure Query Language (SQL) die door relationele databases wordt gebruikt, maakt de NoSQL-database gebruik van Object-relational-mapping (ORM). Het concept van ORM is de mogelijkheid om queries te schrijven in de programmeertaal van je voorkeur. Enkele van de populairdere ORM’s zijn Java, Javascript, .NET en PHP.
In samenvatting
Wat u moet weten over relationele databases:
-
Zij werken met gestructureerde gegevens.
-
Relaties in het systeem hebben beperkingen, wat een hoog niveau van gegevensintegriteit bevordert.
-
Er zijn onbeperkte indexeringsmogelijkheden, wat resulteert in snellere responstijden voor query’s.
-
Ze zijn uitstekend in staat om gegevenstransacties veilig te houden.
-
Zij bieden de mogelijkheid om complexe SQL-query’s te schrijven voor gegevensanalyse en rapportage.
-
Zijn modellen kunnen bedrijfsregels waarborgen en afdwingen in de gegevenslaag, waardoor een niveau van gegevensintegriteit wordt toegevoegd dat niet wordt aangetroffen in een niet-relationele database.
-
Zij zijn tabel- en rijgeoriënteerd.
-
Zij gebruiken SQL (gestructureerde querytaal) voor het vormgeven en manipuleren van gegevens, wat zeer krachtig is.
-
SQL-databasevoorbeelden: MySql, Oracle, Sqlite, Postgres en MS-SQL. NoSQL database voorbeelden: MongoDB, BigTable, Redis, RavenDb, Cassandra, Hbase, Neo4j en CouchDb.
-
SQL-databases zijn het meest geschikt voor zware transactietoepassingen.
Niet-relationele/NoSQL-databases:
-
Zij hebben het vermogen om grote hoeveelheden gegevens op te slaan met weinig structuur.
-
Zij bieden schaalbaarheid en flexibiliteit om te voldoen aan veranderende zakelijke vereisten.
-
Zij bieden schema-vrije of schema-on-read opties.
-
Zij hebben de mogelijkheid om alle soorten gegevens “Big Data” vast te leggen, met inbegrip van ongestructureerde gegevens.
-
Zij zijn documentgeoriënteerd.
-
NoSQL- of niet-relationele databases zijn bijvoorbeeld MongoDB, Apache Cassandra, Redis, Couchbase en Apache HBase.
-
Ze zijn het meest geschikt voor de snelle ontwikkeling van toepassingen. NoSQL is de beste keuze voor flexibele gegevensopslag met weinig tot geen structuurbeperkingen.
-
Ze bieden een flexibel gegevensmodel met de mogelijkheid om eenvoudig gegevens van elke structuur op te slaan en te combineren zonder dat er een schema hoeft te worden gewijzigd.
Dus, welke moet u kiezen voor uw project? Voor het antwoord op deze vraag kunnen we teruggaan naar het begin van dit artikel. Deze twee zeer verschillende soorten databases zijn op zich even nuttig, maar om uiteenlopende redenen en in verschillende situaties te gebruiken. De ene is niet noodzakelijkerwijs beter dan de andere en zowel relationele als niet-relationele databases hebben hun plaats.
Kortom, er is niet één juist antwoord. De beste manier om te bepalen welk databasetype het beste is voor uw project, is het analyseren van de behoeften van de organisatie en de toepassingsfunctionaliteit die u moet bereiken.