Relationele databases: het relationele model

Leer hoe relationele databases gegevens ordenen voordat je je eerste query schrijft. Ontdek waarom organisaties gedeelde gegevens in een database bewaren in plaats van in een spreadsheet, wat een databasemanagementsysteem doet en welke rol SQL speelt. Lees tabellen, rijen en kolommen, kies verstandige gegevenstypen en ga zonder de gebruikelijke valkuilen om met ontbrekende waarden (NULL). Gebruik primaire en refererende sleutels om rijen te identificeren en tabellen te koppelen, herken een-op-veelrelaties en veel-op-veelrelaties en lees een databaseschema en het bijbehorende diagram om te zien waar elk gegeven is opgeslagen.

BeginnerLes 1 van 6 in SQL: de basis

Wat je leert

  1. Beschrijf waarom organisaties gedeelde gegevens in relationele databases bewaren, wat een databasemanagementsysteem doet en hoe SQL wordt gebruikt om ermee te werken.
    • Leg uit waarom organisaties databases gebruiken
      Maak onderscheid tussen gegevens, een database en een databasemanagementsysteem en leg uit wat een relationele database beter doet dan een gedeelde spreadsheet of losse bestanden.
    • Herken databasesystemen en de rol van SQL
      Noem veelgebruikte relationele databasesystemen, beschrijf hoe toepassingen ermee verbinden en leg uit wat SQL is en hoe de instructies zijn ingedeeld.
  2. Gebruik de begrippen tabel, rij en kolom om gegevens correct te lezen en leg uit aan welke regels een relationele tabel voldoet.
    • Beschrijf de onderdelen van een tabel
      Herken tabellen, rijen, kolommen en waarden in voorbeeldgegevens en koppel de dagelijkse woorden aan hun formele relationele namen.
    • Leg uit aan welke regels een relationele tabel voldoet
      Pas de regels van het relationele model voor rijen, kolommen en waarden toe en herken waar SQL-tabellen en spreadsheets zich anders gedragen.
  3. Koppel elke kolom aan een geschikt gegevenstype, voorkom veelgemaakte typefouten met geld, codes en datums en werk correct met NULL.
    • Herken de belangrijkste SQL-gegevenstypen
      Herken de gebruikelijke typen voor getallen, tekst, datums en Booleaanse waarden, lees hun instellingen voor grootte en precisie en weet waarin databasesystemen verschillen.
    • Kies een gegevenstype voor gegevens uit de praktijk
      Kies geschikte typen voor geld, hoeveelheden, codes, datums en namen door te vragen hoe de waarden worden gebruikt, en voorkom de fouten die verkeerde typen veroorzaken.
    • Werk correct met NULL
      Leg uit wat NULL betekent, maak onderscheid tussen NULL, nul en lege tekst en voorspel hoe NULL zich gedraagt in vergelijkingen, berekeningen en integriteitsregels.
  4. Gebruik primaire sleutels om elke rij te identificeren en refererende sleutels om tabellen te koppelen, en herken de een-op-veelrelaties, een-op-eenrelaties en veel-op-veelrelaties die ze vormen.
    • Herken kandidaatsleutels en de primaire sleutel
      Bepaal welke kolommen of kolomcombinaties elke rij uniek identificeren en leg uit aan welke regels een primaire sleutel moet voldoen.
    • Kies tussen natuurlijke sleutels en surrogaatsleutels
      Vergelijk identificatiewaarden uit de praktijk met door het systeem gegenereerde waarden, beoordeel welke goede primaire sleutels zijn en bescherm natuurlijke identificatiewaarden met uniciteitsregels.
    • Koppel tabellen met refererende sleutels
      Leg uit hoe een refererende sleutel verwijst naar een rij in een andere tabel, wat referentiële integriteit beschermt en wat er gebeurt als rijen waarnaar wordt verwezen veranderen of worden verwijderd.
    • Herken een-op-veelrelaties, een-op-eenrelaties en veel-op-veelrelaties
      Bepaal hoeveel rijen aan elke kant van een koppeling met elkaar verbonden kunnen zijn en laat zien hoe refererende sleutels en koppeltabellen elk soort relatie weergeven.
  5. Lees een schema als tabeldefinities of als diagram en gebruik het met voorbeeldgegevens om te achterhalen waar gegevens zijn opgeslagen en hoe tabellen zijn gekoppeld.
    • Lees een schema en de bijbehorende tabeldefinities
      Maak onderscheid tussen een schema en de gegevens die het beschrijft, lees schemanotatie en CREATE TABLE-instructies en interpreteer de integriteitsregels die ze declareren.
    • Lees een schemadiagram
      Interpreteer de vakken, sleutelaanduidingen, verbindingslijnen en kraaienpootsymbolen van een schemadiagram en beschrijf elke weergegeven relatie in woorden.
    • Beantwoord vragen met behulp van een schema en voorbeeldgegevens
      Zoek op waar elk gegeven is opgeslagen, volg sleutels met de hand tussen tabellen en gebruik de integriteitsregels van het schema om te bepalen welke gegevens zijn toegestaan.

Relationele databases: uitleg

5 hoofdstukken

1

Wat een database doet

Een winkel kan beginnen met een spreadsheet, maar gedeelde gegevens roepen al snel lastigere vragen op: welke klantgegevens zijn actueel, wie mag ze wijzigen en wat gebeurt er als een betaling halverwege stopt? Een databasesysteem brengt deze vragen samen. Maak onderscheid tussen de opgeslagen feiten en de software die ze beheert en bekijk vervolgens hoe toepassingen SQL gebruiken om gegevens op te vragen en wijzigingen aan te brengen. Dezelfde ideeën ondersteunen een kleine telefoonapp en het rapportagesysteem van een groot bedrijf.

1.1 Gedeelde gegevens en betrouwbare wijzigingen

Een klantnaam, een besteldatum en een prijs zijn gegevens: vastgelegde feiten. Een database is een geordende verzameling samenhangende gegevens. Een databasemanagementsysteem, of DBMS, is de software die die verzameling opslaat en beheert. PostgreSQL is een DBMS; de database store van een winkel is één verzameling die het beheert.

Sla elk gegeven op waar het hoort

Stel dat een spreadsheet het telefoonnummer van Maria Garcia bij alle 14 verkopen aan haar herhaalt. Als haar telefoonnummer verandert, zijn 14 aanpassingen nodig. Eén overgeslagen cel leidt tot tegenstrijdige gegevens. In een relationele database bevat customers Maria's gegevens één keer, onder customer_id 1. Elke verkoop legt die identificatiewaarde vast. Als je haar telefoonnummer in één klantrij bijwerkt, leveren latere zoekopdrachten één actueel nummer op.

Een relationele database ordent gegevens in tabellen. “Relationeel” komt van relatie, de wiskundige naam voor een tabel. E. F. Codd introduceerde het model in 1970. De centrale scheiding is nuttig: gebruikers beschrijven via tabellen en waarden welke gegevens ze willen; het DBMS regelt hoe die gegevens op schijf worden gevonden.

Regels en gedeelde toegang

Een tabel heeft benoemde kolommen, gegevenstypen en integriteitsregels. Een integriteitsregel is een regel die het DBMS controleert, zoals “een bestelling moet naar een bestaande klant verwijzen”. Deze controles beschermen gedeelde gegevens wanneer meerdere toepassingen dezelfde database gebruiken. De handhaving van typen verschilt: PostgreSQL weigert tekst zoals 'twelve' in een numerieke prijskolom, terwijl gewone SQLite-tabellen flexibele typen hebben.

Een DBMS beheert ook gelijktijdige gebruikers, rechten, back-ups en herstel. Twee medewerkers kunnen met gedeelde gegevens werken zonder afzonderlijke kopieën van een spreadsheet uit te wisselen. Rechten kunnen een rapportagegebruiker verkoopgegevens laten lezen en tegelijk beperken wie ze mag wijzigen. Een proces voor back-ups en herstel helpt gegevens na een storing terug te zetten.

Houd een groep wijzigingen bij elkaar

Een transactie behandelt meerdere wijzigingen als één geheel: alle worden opgeslagen of geen ervan. Om € 200 tussen rekeningen over te boeken, moet het bedrag van de betaalrekening worden afgetrokken en bij de spaarrekening worden opgeteld. Als een storing de overboeking onderbreekt voordat die is voltooid, kan het DBMS de onvoltooide transactie terugdraaien. Als alleen de afschrijving wordt opgeslagen, blijft een onjuist saldo over.

Een spreadsheet blijft nuttig voor kleine berekeningen en flexibele indelingen. Een database biedt een vastgelegde structuur voor gedeelde gegevens en regels. Een Excel-werkblad heeft een vaste limiet van 1.048.576 rijen; databases beheren regelmatig veel grotere verzamelingen, afhankelijk van opslag, hardware en productlimieten.

Verschillende gegevens en verschillende taken

Gestructureerde gegevens passen in benoemde kolommen die alle rijen delen. Semigestructureerde gegevens, zoals JSON-documenten, kunnen in verschillende records verschillende velden hebben. Ongestructureerde gegevens, zoals audio of vrije e-mailteksten, missen die vaste tabelindeling. Organisaties combineren relationele databases vaak met documentopslag, sleutel-waardeopslag of bestandsopslag.

Ook de werklast is van belang. Een transactioneel systeem, ook OLTP genoemd, registreert dagelijkse gebeurtenissen via veel kleine lees- en schrijfbewerkingen: een bestelling, een betaling, een adreswijziging. Een analytisch systeem, of OLAP, leest veel opgeslagen records om vragen te beantwoorden zoals “Hoe verschilde de maandelijkse verkoop per regio?” Beide kunnen relationele tabellen en sleutels gebruiken.

Belangrijkste punten

  • Een database bevat samenhangende gegevens; een DBMS beheert die.
  • Relationele gegevens zijn geordend in tabellen, met regels die het DBMS controleert.
  • Een transactie slaat een groep wijzigingen samen op of draait die samen terug.
  • Gedeelde klantgegevens kunnen op één plaats worden bijgewerkt en via een identificatiewaarde worden gevonden.
  • Transactioneel werk registreert gebeurtenissen; analytisch werk vat opgeslagen gegevens samen.

1.2 SQL, databaseproducten en toepassingen

SQL, afkorting van Structured Query Language, is een taal. PostgreSQL, MySQL, SQLite, Microsoft SQL Server en Oracle Database zijn producten die deze taal gebruiken. SQL Server is één DBMS, geen andere naam voor SQL zelf.

Hoe een toepassing de gegevens bereikt

In een client-serversysteem beheert een serverprogramma de database. Een client, zoals een website, rapportagetool of query-editor, stuurt verzoeken naar die server. PostgreSQL, MySQL, SQL Server en Oracle werken meestal op deze manier. Met tools zoals psql, pgAdmin, DBeaver en SQL Server Management Studio kunnen mensen databases inspecteren en verzoeken versturen.

Een ingebedde engine draait binnen een toepassing. SQLite gebruikt een bibliotheek en een gewoon databasebestand, zoals store.db, zonder aparte databaseserver. Het komt veel voor in telefoons, browsers en desktopapps. Bij een beheerde clouddienst, zoals Azure SQL Database, Amazon RDS of Google Cloud SQL, beheert een aanbieder de databaseservers. “Beheerd” beschrijft wie de dienst beheert; het vervangt tabellen en sleutels niet door een ander model.

Eén DBMS-installatie kan meerdere databases beheren, zoals store en payroll. Een verbinding selecteert de te gebruiken database, afhankelijk van de rechten.

Geef aan welk resultaat je wilt

SQL is declaratief: het beschrijft het gewenste resultaat, terwijl het DBMS kiest hoe het dat verkrijgt. Lees deze instructie:

SELECT first_name, city
FROM customers
WHERE state = 'TX';

De instructie vraagt om voornamen en woonplaatsen uit klantrijen waarvan de staat TX is. Ze zegt niets over welke schijfpagina eerst moet worden gelezen. Trefwoorden in hoofdletters maken de instructie gemakkelijker te overzien; select en SELECT betekenen hetzelfde. Een puntkomma beëindigt normaal gesproken een instructie.

Herken de taak van de instructie
GroepDoelVoorbeelden
Gegevensdefinitie, DDLStructuur definiëren of wijzigenCREATE TABLE, ALTER TABLE, DROP TABLE
Gegevensmanipulatie, DMLRijen lezen of wijzigenSELECT, INSERT, UPDATE, DELETE
Gegevensbeheer, DCLRechten beherenGRANT, REVOKE
TransactiebeheerEen transactie vastleggen of terugdraaienCOMMIT, ROLLBACK

Sommige boeken plaatsen SELECT in een aparte groep voor gegevensopvraagtaal. Het nuttige onderscheid is de werkelijke taak van de instructie: een kolom toevoegen verandert de structuur; een klant toevoegen verandert de gegevens.

SQL werd in 1986 een ANSI-standaard en is internationaal gestandaardiseerd als ISO/IEC 9075. Producten voegen hun eigen dialecten toe. Een limiet van tien rijen schrijf je als LIMIT 10 in SQLite, PostgreSQL en MySQL, TOP 10 in SQL Server of FETCH FIRST 10 ROWS ONLY in standaard-SQL en Oracle.

Lees tekst en andere databaseobjecten

Tekstliterals gebruiken enkele aanhalingstekens: 'TX'. Standaard-SQL gebruikt dubbele aanhalingstekens voor identificatoren, zoals kolomnamen. Een apostrof binnen tekst wordt verdubbeld: 'O''Brien' stelt O'Brien voor.

Een view is een opgeslagen query die als een tabel wordt gebruikt; een gewone view heeft zelf geen opgeslagen rijen. Een index is een opzoekstructuur die kan helpen om snel rijen te vinden. De meeste systemen maken automatisch een index op primaire sleutels. Opgeslagen procedures en functies zijn opgeslagen code die je met hun naam kunt uitvoeren.

Belangrijkste punten

  • SQL beschrijft een gewenst resultaat; het DBMS kiest hoe het dat verkrijgt.
  • Client-serversystemen ontvangen verzoeken via een server; SQLite is ingebed in een toepassing.
  • DDL wijzigt de structuur, terwijl DML rijen leest of wijzigt.
  • Enkele aanhalingstekens markeren tekst; een apostrof binnen tekst wordt verdubbeld.
  • Een view slaat een query op; een index ondersteunt sneller opzoeken.
  • SQL-dialecten delen de relationele ideeën maar verschillen in een deel van de syntaxis.
2

Lees een tabel correct

Een tabel geeft elk soort record een duidelijke vorm: rijen beschrijven afzonderlijke zaken en kolommen beschrijven hun eigenschappen. Lees de structuur voordat je een waarde interpreteert. Maak vervolgens onderscheid tussen de logische regels van de tabel en de indeling van een spreadsheet: de positie identificeert een record niet, een lijst telefoonnummers is meer dan één waarde en een totaalrij heeft een andere betekenis dan een verkoop. Deze verschillen maken het latere werk met sleutels en schema's veel eenvoudiger.

2.1 Rijen, kolommen en waarden

Een tabel slaat gegevens op over één soort zaken. Elke rij in customers beschrijft één klant; elke kolom bevat één eigenschap. Op hun snijpunt staat een waarde.

Lees één record van links naar rechts

Hier zijn enkele klantkolommen:

customer_idfirst_namelast_namecitystatezip_code
1MariaGarciaAustinTX78701
2JamesWilsonDenverCO80202
3AishaJohnsonBostonMA02108
4WeiChenSeattleWA98101

Zoek customer_id 4 en lees dan city: Wei woont in Seattle. Om te vinden wie in Denver woont, lees je de naam in de rij van Denver: James Wilson. Een naastgelegen rij beschrijft een andere klant.

De volledige tabel heeft acht kolommen: customer_id, first_name, last_name, email, phone, city, state en zip_code. Het telefoonnummer van James is NULL: de waarde ontbreekt, maar zijn rij heeft nog steeds de kolom voor het telefoonnummer.

Koppel de begrippen
Dagelijks woordFormeel relationeel woordAnder veelgebruikt woord
TabelRelatie-
RijTupelRecord
KolomAttribuutVeld

Een tupel is een hele rij, niet één cel. Een attribuut benoemt een eigenschap die alle rijen delen. “Record 4” kan een identificatiewaarde of een positie in de weergave betekenen; controleer welke, want posities kunnen veranderen.

Tel de onderdelen

De graad telt kolommen; de tabelkardinaliteit telt rijen. De volledige tabel heeft graad 8 en kardinaliteit 4. De weergave hierboven toont zes kolommen zonder de graad van de tabel te veranderen.

Als je een klant toevoegt, stijgt de kardinaliteit naar 5; de graad blijft 8. Als je birth_date toevoegt, stijgt de graad naar 9 en krijgt elke rij een plaats voor die waarde, ook als die ontbreekt. Een nieuwe klant voegt een rij toe, geen kolom.

Relatiekardinaliteit, zoals een-op-veel, beschrijft toegestane koppelingen in plaats van het aantal rijen van een tabel.

Lees gekwalificeerde namen

Kolomnamen zijn uniek binnen een tabel. orders.customer_id en customers.customer_id onderscheiden gelijknamige kolommen in verschillende tabellen: de punt scheidt tabel- en kolomnamen.

snake_case gebruikt woorden in kleine letters, gescheiden door underscores, zoals in zip_code. Namen met spaties moeten in SQL tussen aanhalingstekens staan. Tabelnamen in het enkelvoud of meervoud kunnen beide werken; gebruik een consequente afspraak.

Belangrijkste punten

  • Een rij beschrijft één exemplaar; een kolom beschrijft één eigenschap.
  • Relatie, tupel en attribuut betekenen tabel, rij en kolom.
  • De graad telt kolommen; de tabelkardinaliteit telt rijen.
  • Een met de tabelnaam gekwalificeerde naam geeft aan bij welke tabel een kolom hoort.

2.2 De regels achter het raster

Een relationele tabel heeft een logische structuur die verder gaat dan haar rechthoekige uiterlijk. In het formele model is ze een verzameling rijen. Verzamelingen bevatten geen dubbele elementen en hebben geen volgorde. Kolommen worden herkend aan hun naam, dus als je een kolom in een weergave verplaatst, verandert het gegeven dat ze vertegenwoordigt niet.

Identiteit komt niet voort uit positie

Een DBMS kan rijen in een andere volgorde teruggeven na wijzigingen, verwijderingen of een verandering in de manier waarop het de opslag leest. “De derde rij” is geen blijvende manier om een klant te identificeren. customer_id 3 identificeert Aisha nog steeds wanneer haar rij als eerste verschijnt. Een query die een bepaalde volgorde nodig heeft, vraagt daar met ORDER BY om.

SQL-tabellen verschillen van formele relaties: zonder primaire sleutel of een andere geschikte uniciteitsregel kunnen ze identieke rijen bevatten. Twee kopieën van ('Coffee mug', 12.50) bieden in die kolommen geen onderscheidende waarde. Een primaire sleutel geeft elke rij een unieke identificatiewaarde en voorkomt volledig dubbele rijen.

Eén kolom, één domein

Een domein is de verzameling waarden die in een kolom zijn toegestaan. Een hoeveelheid heeft een type voor gehele getallen en kan ook een regel nodig hebben die bepaalt dat ze positief moet zijn. Een staatcode is tekst, maar niet elke tekstwaarde is een geldige staatcode. Gegevenstypen en integriteitsregels beschrijven de toegestane waarden aan het DBMS.

Alle rijen delen dezelfde kolommen. Eén bestelling kan niet alleen voor zichzelf een extra kolom voor een cadeaubericht krijgen. De tabel kan voor elke bestelling een kolom gift_note hebben, met NULL waar geen bericht is vastgelegd. Optionele gegevens hebben nog steeds een vaste plaats.

Houd afzonderlijke waarden gescheiden

Een atomaire waarde is één waarde voor het doel van de kolom. Een telefooncel met “512-555-0147, 512-555-0199” bevat een lijst van twee nummers. Het wordt lastig om slechts één nummer te vinden, te controleren of te verwijderen. Een tabel customer_phones kan elk telefoonnummer een eigen rij geven, waarbij customer_id aangeeft van wie het nummer is.

Atomair betekent niet dat elke tekstwaarde in de kleinste stukjes moet worden opgesplitst. Een stadsnaam kan uit meerdere woorden bestaan en toch één stadswaarde blijven. De vraag is of de cel één gegeven van het soort bevat dat de kolom vertegenwoordigt, of een verzameling die afzonderlijk moet worden verwerkt.

Bekijk een export uit een spreadsheet kritisch

Een werkblad met verkopen kan halverwege een herhaalde kop bevatten, onderaan een rij met het label “TOTAAL” en een prijs die is geschreven als “12,50 (aanbieding)”. Dit zijn nuttige indelingskeuzes voor een persoon, maar ze mengen verschillende soorten inhoud in dezelfde kolommen.

Om het als een relationele tabel te lezen:

  1. Beschouw de kolomnamen als kop, niet als verkooprecords.
  2. Laat elke gegevensrij over één verkoop gaan; bereken het totaal op basis van die rijen.
  3. Sla de numerieke prijs apart van een aanbiedingsaanduiding op.
  4. Geef elke verkoop een sleutel zodat de rij kan worden geïdentificeerd.

Een totaalrij tussen verkopen kan als een nieuwe verkoop worden geteld of opnieuw bij het totaal worden opgeteld. Een aanduiding in een numerieke prijs verhindert gewone numerieke bewerkingen.

Logische tabellen en fysieke opslag

Een tabel is de logische weergave voor de gebruiker. Het DBMS kan de gegevens opslaan in bestanden, pagina's en indexen die zijn ingericht voor efficiënte toegang. Gegevensonafhankelijkheid betekent dat wijzigingen in die fysieke indeling de tabelnamen, kolombetekenissen of verzoeken van toepassingen niet hoeven te veranderen.

Belangrijkste punten

  • Een formele relatie heeft unieke rijen zonder volgorde; SQL heeft integriteitsregels nodig om dubbele rijen te voorkomen.
  • Een rijvolgorde moet je opvragen met ORDER BY.
  • Het domein van een kolom beschrijft de toegestane waarden.
  • Elke cel bevat één waarde voor het doel van de kolom.
  • Elke rij heeft dezelfde kolommen, inclusief plaatsen voor ontbrekende waarden.
3

Kies typen en interpreteer ontbrekende gegevens

Het type van een kolom beïnvloedt wat je kunt opslaan, hoe waarden worden gesorteerd en welke berekeningen zinvol zijn. Cijfers kunnen een aantal of een code beschrijven; die toepassingen vragen om verschillende typen. Geld moet exact worden opgeslagen, terwijl metingen vaak benaderende waarden kunnen gebruiken. Ontbrekende gegevens vereisen een eigen behandeling als NULL. Leer deze keuzes samen met de belangrijke productverschillen, vooral de flexibele opslag van SQLite en de manier waarop SQL omgaat met onbekende vergelijkingsresultaten.

3.1 De belangrijkste SQL-gegevenstypen

Een gegevenstype vertelt een DBMS wat voor soort waarde een kolom bevat en hoe het daarmee moet werken. Getallen optellen, tekst vergelijken en datums ordenen zijn verschillende bewerkingen. Een vertrouwde typenaam kan zich ook verschillend gedragen in verschillende databaseproducten.

Getallen: geheel, exact en benaderend
SoortVeelgebruikte typenGeschikte toepassing
Gehele getallenINTEGER, SMALLINT, BIGINTTellingen, hoeveelheden en identificatiewaarden als gehele getallen
Exacte decimalenDECIMAL(p, s), NUMERIC(p, s)Geld en andere exacte decimale bedragen
Benaderende getallenREAL, FLOAT, DOUBLE PRECISIONMetingen waarbij afrondingsverschillen acceptabel zijn

In PostgreSQL, MySQL en SQL Server loopt INTEGER van −2.147.483.648 tot 2.147.483.647. BIGINT reikt tot 9.223.372.036.854.775.807; de opslag voor gehele getallen van SQLite kan dat bereik ook halen.

Bij decimalen is precisie het totale aantal cijfers en schaal het aantal achter de komma. DECIMAL(8, 2) laat zes cijfers voor de komma over: het maximum is 999999,99. De prijs 12,50 past; 1234567,00 niet. PostgreSQL, MySQL, SQL Server en Oracle bieden exacte decimale opslag. SQLite accepteert deze declaratie maar dwingt de precisie of schaal niet af en kan breuken opslaan als binaire drijvendekommagetallen.

Drijvendekommaweergave benadert veel decimale breuken. Met dubbele precisie levert het optellen van 0,1 en 0,2 de uitkomst 0,30000000000000004 op. SQLite behandelt deze decimale literals als drijvendekommagetallen. PostgreSQL behandelt decimale literals zonder expliciet type als exact numeriek, zodat dezelfde geschreven berekening daar exact kan zijn; expliciete waarden met dubbele precisie laten de benadering zien.

Tekst, datums en indicatoren

CHAR(n) is tekst met een vaste lengte; PostgreSQL en SQL Server vullen kortere waarden aan met spaties. VARCHAR(n) staat wisselende lengtes tot een limiet toe. SQLite negeert beide lengte-instellingen en vult niet aan. TEXT bevat lange tekst in SQLite, PostgreSQL en MySQL. SQL Server gebruikt hiervoor VARCHAR(MAX) of NVARCHAR(MAX); het oudere type TEXT is verouderd.

Een DATE bevat een kalenderdatum, een TIME een tijdstip en standaard-SQL TIMESTAMP een datum en tijd. Schrijf datums in de volgorde jaar-maand-dag, zoals '2026-03-02', om verwarring tussen 2 maart en 3 februari te voorkomen. Datums met een datumtype hebben een interne opslagnotatie; de toepassing kiest de weergavenotatie. SQLite heeft geen specifiek datumtype en slaat gewoonlijk ISO-datumtekst op. SQL Server gebruikt DATETIME2 voor datum en tijd: zijn TIMESTAMP betekent ROWVERSION, een binaire versieteller.

Een BOOLEAN stelt TRUE of FALSE voor, of NULL als de waarde ontbreekt. PostgreSQL heeft een Booleaans type; SQL Server gebruikt BIT, MySQL behandelt BOOLEAN als een klein geheel getal en SQLite slaat de indicatoren op als 1 en 0. Binaire typen zoals BLOB of BYTEA van PostgreSQL slaan bytes op, waaronder kleine afbeeldingen. Grotere bestanden worden vaak apart opgeslagen, met een pad of URL in een tabel.

Typeaffiniteit van SQLite

In gewone SQLite-tabellen is een gedeclareerd type een voorkeur die typeaffiniteit heet. Een kolom INTEGER zet '42' om naar het getal 42, maar kan 'abc' als tekst behouden. Een SQLite-tabel STRICT weigert tekst die niet kan worden omgezet naar een geldig geheel getal.

Belangrijkste punten

  • Gegevenstypen voor gehele getallen bevatten gehele getallen; exacte decimalen en drijvendekommagetallen dienen verschillende doelen.
  • Precisie telt alle cijfers; schaal telt de cijfers achter de komma.
  • ISO-datumtekst gebruikt de volgorde jaar-maand-dag.
  • Tekstlengtes, opslag van Booleaanse waarden en datumtypen verschillen per dialect.
  • SQLite-typeaffiniteit is flexibel; STRICT-tabellen dwingen hun ondersteunde typen af.
  • TIMESTAMP van SQL Server is een rijversie, geen datum en tijd.

3.2 Kies een type op basis van de functie van de waarde

Begin bij wat een waarde betekent en hoe die wordt gebruikt. Een ZIP-code bevat cijfers, maar niemand telt ZIP-codes op om een betekenisvol totaal te krijgen. Een hoeveelheid bevat ook cijfers en hoeveelheden optellen is wel nuttig. Alleen het uiterlijk is een slechte leidraad voor de typekeuze.

Stel vijf vragen
  1. Wat zijn gebruikelijke waarden en welke extreme waarden moeten passen?
  2. Worden de waarden gebruikt om te rekenen?
  3. Moeten ze exact zijn of is een benadering acceptabel?
  4. Hoe moeten ze worden gesorteerd en vergeleken?
  5. Welke grootte past bij realistische toekomstige waarden?
Geld en metingen

Geld vereist exacte waarden. In PostgreSQL, MySQL en SQL Server kan een prijs DECIMAL(8, 2) gebruiken. Drie artikelen van € 12,50 kosten precies € 37,50. Binaire drijvendekommaopslag kan na herhaald optellen kleine fouten achterlaten, waardoor exacte vergelijkingen onbetrouwbaar worden. In SQLite levert de declaratie DECIMAL geen exacte decimale opslag op; gebruik gehele centen voor exacte bedragen, zodat € 12,50 wordt opgeslagen als 1250.

Een meting zoals gewicht kan REAL gebruiken als kleine afrondingsverschillen acceptabel zijn. Kies de eenheid als onderdeel van de betekenis van de kolom: weight_lb laat in de naam zien dat het om ponden gaat. Een numeriek type alleen legt die eenheid niet vast.

Ook de valuta moet duidelijk zijn. Als een tabel verschillende valuta's bevat, voeg dan currency_code toe, met bijvoorbeeld USD, EUR of JPY. Het aantal decimalen verschilt per valuta en bedragen in verschillende valuta's moeten worden omgerekend voordat je ze kunt optellen.

Codes en namen zijn tekst

Gebruik tekst voor ZIP-codes, telefoonnummers, rekeningnummers en voorraadcodes. De ZIP-code van Boston '02108' verliest de eerste nul als je die omzet naar een geheel getal. VARCHAR(10) kan ook ZIP+4 bevatten, zoals '02108-1234'. Telefoonnummers kunnen een plusteken, spaties en koppeltekens bevatten. Deze tekens maken deel uit van de schrijfwijze van een identificatiewaarde, het zijn geen rekentekens.

Laat ruimte voor echte namen en adressen. “Christopher Montgomery” heeft 22 tekens, dus VARCHAR(10) is te kort. PostgreSQL en SQL Server weigeren de naam; MySQL weigert die in de strikte modus en kan die anders afkappen. SQLite slaat de naam op omdat gedeclareerde tekstlengtes worden genegeerd. Een ruim veld met variabele lengte voorkomt dat gewone namen worden geweigerd, zonder voor elke rij de maximale lengte te reserveren.

Sorteren onthult een verkeerde keuze

Bij het sorteren van tekst worden tekens vergeleken. Getallen die als tekst zijn opgeslagen, kunnen in de volgorde '1', '10', '2', '25', '3' verschijnen. Een numerieke kolom sorteert die waarden numeriek. Als je voor elk veld tekst kiest, verschuif je het controle- en conversiewerk naar latere berekeningen.

Datums hebben een vergelijkbare valkuil. Datumtekst in Amerikaanse notatie plaatst '12/01/2025' na '03/02/2026' in tekstvolgorde, hoewel december 2025 eerder is. Gebruik een datumtype, of in SQLite consequent opgemaakte ISO-tekst, zodat de kalendervolgorde behouden blijft.

Bekijk de typen van een product samen

Een product kan product_id INTEGER, sku VARCHAR(20), name VARCHAR(100), price DECIMAL(8, 2), weight_lb REAL, in_stock BOOLEAN en added_on DATE gebruiken. Elk type volgt uit een functie: identificatie, opslag van een code, een naam, exact geld, een meting, een indicator of een datum. Sla voor SQLite de prijs op als gehele centen en de datum als ISO-tekst.

Belangrijkste punten

  • Kies typen op basis van betekenis, rekengebruik, nauwkeurigheid, volgorde en realistische grootte.
  • Sla codes op als tekst om voorloopnullen en leestekens te behouden.
  • Gebruik een exact decimaal type voor geld waar dat wordt ondersteund en gehele centen in SQLite.
  • Een numeriek bedrag heeft een valuta nodig en een meting een eenheid.
  • Opslag als tekst levert tekstvolgorde op, ook als alle tekens cijfers zijn.

3.3 NULL en onbekende resultaten

NULL markeert een ontbrekende waarde. Het verschilt van nul, lege tekst '' en de tekst 'NULL'. Een bekende korting van 0 betekent geen korting; een korting die NULL is, betekent dat het bedrag niet is vastgelegd. Een kolom die NULL toestaat, laat ontbrekende gegevens toe, terwijl NOT NULL een waarde vereist.

Ontbrekend heeft meer dan één betekenis

Van James Wilson is geen telefoonnummer vastgelegd. Bestelling 102 heeft geen verzenddatum omdat die nog niet is verzonden. Bij een bedrijf als klant is een achternaam mogelijk niet van toepassing. Alle gevallen kunnen met NULL worden weergegeven, maar NULL legt niet vast welke reden geldt. Een gegevenswoordenboek moet de betekenis per kolom vermelden.

Lege tekst is een aanwezige tekstwaarde in PostgreSQL en SQLite. Oracle behandelt lege tekst momenteel als NULL. Querytools kunnen beide weergeven als een cel die leeg lijkt, dus alleen aan het uiterlijk kun je ze niet onderscheiden.

Vergelijkingen kunnen onbekend zijn

SQL-vergelijkingen hebben drie mogelijke resultaten: TRUE, FALSE en UNKNOWN. Een vergelijking met NULL, waaronder NULL = NULL, is UNKNOWN. Van twee ontbrekende gegevens is niet bekend of ze dezelfde waarde hebben.

Een WHERE-clausule behoudt alleen resultaten die TRUE zijn. Lees deze voorwaarden:

  • phone IS NULL vindt ontbrekende telefoonnummers.
  • phone IS NOT NULL vindt vastgelegde telefoonnummers.
  • phone = NULL levert UNKNOWN op en vindt geen rijen.

Het ontkennen van een vergelijking levert een ontbrekende waarde niet alsnog op. Voeg Daniel Brown, van wie de staat NULL is, toe aan de vier klanten van de winkel. De voorwaarde state <> 'TX' behoudt CO, MA en WA: drie rijen. Daniel valt af omdat de vergelijking van zijn staat UNKNOWN is. Om ook ontbrekende staten mee te nemen, is de voorwaarde state <> 'TX' OR state IS NULL.

Combineer voorwaarden zorgvuldig

Denk bij UNKNOWN aan “kan TRUE of FALSE zijn”. Een resultaat staat pas vast als beide mogelijkheden dezelfde uitkomst geven.

ExpressieResultaatReden
TRUE AND UNKNOWNUNKNOWNHet tweede deel bepaalt of beide waar zijn.
FALSE AND UNKNOWNFALSEEén onwaar deel maakt AND al onwaar.
TRUE OR UNKNOWNTRUEEén waar deel maakt OR al waar.
FALSE OR UNKNOWNUNKNOWNHet tweede deel bepaalt OR.
NOT UNKNOWNUNKNOWNOntkenning kan het ontbrekende gegeven niet aanvullen.
Berekeningen en samenvattingen

Gewone rekenkundige bewerkingen met NULL geven NULL: 5 + NULL is NULL. Een regelprijs vermenigvuldigd met een ontbrekende hoeveelheid ontbreekt ook, die is geen nul. Tekst samenvoegen met || en NULL geeft NULL in PostgreSQL en SQLite; bij concatenatie behandelt Oracle NULL als lege tekst.

Aggregatiefuncties slaan NULL-invoer meestal over. Bij vijf klanten, onder wie James en Daniel zonder telefoonnummer, telt COUNT(*) alle vijf rijen. COUNT(phone) telt de drie vastgelegde telefoonnummers. Het gemiddelde van 4, NULL en 2 is 3, omdat de twee bekende getallen door twee worden gedeeld; als je NULL als nul behandelt, krijg je ten onrechte 2.

Gebruik NOT NULL voor gegevens die aanwezig moeten zijn, zoals een besteldatum. Dit dwingt geen positief getal of niet-lege tekst af: dat zijn aparte regels. Primaire sleutels vereisen een identificatie die niet NULL is; gewone SQLite-tabellen hebben een historische uitzondering voor sommige declaraties van primaire sleutels, dus expliciet NOT NULL is daar van belang.

Belangrijkste punten

  • NULL markeert ontbrekende informatie; 0 en lege tekst hebben een andere betekenis.
  • Test ontbrekende waarden met IS NULL of IS NOT NULL.
  • Vergelijkingen met NULL leveren UNKNOWN op; WHERE behoudt alleen TRUE.
  • Bij AND, OR en NOT moet je rekening houden met UNKNOWN.
  • Gewone rekenkundige bewerkingen met NULL leveren NULL op.
  • COUNT(*) telt rijen; COUNT(column) telt vermeldingen die niet NULL zijn.
  • Documenteer waarom NULL in elke kolom is toegestaan.
4

Identificeer en koppel records

Sleutels beantwoorden twee verschillende vragen: “Welke rij is dit?” en “Naar welke gerelateerde rij verwijst deze?” Een primaire sleutel geeft een tabel een belangrijkste identificatie, terwijl een refererende sleutel een verwijzing bevat. Toets mogelijke identificatiewaarden aan toekomstige gegevens, niet alleen aan een klein voorbeeld. Lees vervolgens koppelingen in beide richtingen, ook of een koppeling optioneel is. Samengestelde sleutels en koppeltabellen breiden dezelfde ideeën uit naar records die door combinaties worden geïdentificeerd en naar veel-op-veelrelaties.

4.1 Kandidaatsleutels en primaire sleutels

Een sleutel identificeert een rij via haar waarden. Namen kunnen vaker voorkomen; klantidentificatiewaarden onderscheiden records zodat je ze kunt lezen, wijzigen of koppelen.

Toets uniciteit en minimaliteit

Een supersleutel is een kolom of combinatie die een rij uniek identificeert. Een kandidaatsleutel is een minimale supersleutel: als je een kolom verwijdert, vervalt die garantie. Kies één kandidaat als primaire sleutel; de andere zijn alternatieve sleutels.

Stel dat employee_id, ssn en email elk verplicht en uniek zijn. Elk is een kandidaatsleutel. (employee_id, department) is een supersleutel maar geen kandidaatsleutel: employee_id alleen identificeert de medewerker al. Een achternaam die vaker voorkomt, doorstaat de uniciteitstest niet.

TermTest
SupersleutelIdentificeert de combinatie een rij?
KandidaatsleutelIs de sleutel uniek zonder overbodige kolom?
Primaire sleutelWelke kandidaat is de belangrijkste identificatie?
Alternatieve sleutelWelke andere kandidaat blijft beschikbaar?

Vier klanten met verschillende achternamen bewijzen niet dat er een sleutel is: een vijfde kan dezelfde naam hebben. Uniciteit moet gelden voor alle toegestane toekomstige gegevens. Een herhaling weerlegt een voorgestelde sleutel; een voorbeeld zonder herhalingen heeft nog steeds een ondersteunende bedrijfsregel nodig.

Lees de declaratie

Een tabel heeft maximaal één primaire sleutel. De waarden zijn uniek en de kolommen mogen geen NULL zijn. Stabiele waarden voorkomen herhaalde wijzigingen van verwijzingen. Zoek naar PRIMARY KEY: noch de naam noch de positie van een kolom declareert die als sleutel.

Als klant 1 bestaat, wordt een andere klant met sleutel 1 geweigerd. Een weggelaten sleutel heeft een standaardwaarde of gegenereerde waarde nodig. INTEGER PRIMARY KEY van SQLite genereert een geheel getal als de waarde wordt weggelaten of als NULL wordt opgegeven. Sommige andere declaraties van primaire sleutels in gewone SQLite-tabellen staan om historische redenen NULL toe; expliciet NOT NULL, een STRICT-tabel of de vorm met een gehele primaire sleutel sluit die mogelijkheid uit.

Lees een samengestelde sleutel

In enrollments(student_id, course_id, term, grade) kan een student meerdere cursussen volgen en er één in een andere periode opnieuw volgen. (student_id, course_id, term) identificeert één inschrijving: één samengestelde primaire sleutel, geen drie afzonderlijke primaire sleutels.

Afzonderlijke onderdelen mogen worden herhaald; de volledige combinatie niet. De meeste DBMS'en maken een index op de primaire sleutel om gegevens op te zoeken, maar de sleutel garandeert geen volgorde in queryresultaten.

Belangrijkste punten

  • Een kandidaatsleutel is een minimale supersleutel.
  • Eén kandidaat is de primaire sleutel; de andere zijn alternatieve sleutels.
  • De uniciteit van een sleutel moet gelden voor toegestane toekomstige gegevens.
  • Een primaire sleutel is uniek, bevat geen NULL en kan meerdere kolommen omvatten.
  • De declaratie bepaalt de sleutel, niet de naam of positie.

4.2 Natuurlijke en gegenereerde identificatiewaarden

Een natuurlijke sleutel komt uit gegevens uit de echte wereld, zoals het VIN van een voertuig, het ISBN van een boekuitgave of een staatcode. Een surrogaatsleutel bestaat alleen om een rij te identificeren, vaak als een gegenereerd geheel getal of een UUID.

Kies een identificatiewaarde die meegaat

Kies bij voorkeur waarden die uniek, aanwezig, stabiel, compact en veilig om te delen zijn. Namen komen vaker voor; telefoonnummers en e-mailadressen veranderen of worden gedeeld. Social Security-nummers zijn gevoelig en voor sommige klanten niet beschikbaar; als je ze in verwijzende tabellen gebruikt, verspreid je die informatie.

Met een gegenereerde customer_id behoudt Maria identificatiewaarde 1 wanneer haar contactgegevens veranderen. Een natuurlijke state_code, zoals TX, kan goed werken omdat die compact, gestandaardiseerd en nuttig in adresgegevens is.

Bescherm bedrijfsidentificaties afzonderlijk

Dezelfde persoon kan zich twee keer registreren en twee surrogaatsleutels krijgen. De identificatiewaarden onderscheiden rijen; ze sporen geen dubbele personen op.

Als een e-mailadres elk account moet identificeren, gebruik dan NOT NULL UNIQUE. Alleen UNIQUE staat meerdere NULL-waarden toe in PostgreSQL, SQLite en MySQL. SQL Server staat normaal gesproken één NULL toe bij een uniciteitsregel voor één kolom. Aanwezigheid en uniciteit zijn aparte regels.

Het verplichte, unieke e-mailadres is een alternatieve sleutel. Als het verandert, blijft het klantnummer als surrogaatsleutel in bestaande bestellingen ongewijzigd. Als een primaire sleutel waarnaar wordt verwezen verandert, moeten de verwijzingen vanuit de kindtabel ook consistent blijven.

Herken de syntaxis voor gegenereerde sleutels
SysteemVeelgebruikte vorm voor gegenereerde gehele getallen
Standaard-SQL, PostgreSQL, OracleGENERATED ALWAYS AS IDENTITY
MySQLAUTO_INCREMENT
SQL ServerIDENTITY(1,1)
SQLiteINTEGER PRIMARY KEY

PostgreSQL heeft ook de oudere vorm SERIAL. Verwijderingen, mislukte invoegingen en geannuleerd werk kunnen gaten achterlaten. Identificatiewaarden 1, 2 en 4 duiden drie rijen aan, geen vier. Hernummeren om gaten te sluiten kan verwijzingen verbreken.

Herken UUID's

Een UUID is een identificatiewaarde van 128 bits, meestal geschreven als 36 tekens met koppeltekens: 7c9e6679-7425-40de-944b-e07fc1f90ae7. Computers kunnen ze onafhankelijk genereren met een zeer klein risico op dubbele waarden, wat nuttig is wanneer records van verschillende plaatsen worden samengevoegd.

UUID's nemen meer ruimte in en zijn moeilijker te lezen dan kleine gehele getallen. Kies op basis van hoe records worden gemaakt en waarnaar wordt verwezen. Beide soorten sleutels zijn labels: hun maximale waarde is geen aantal rijen en hun volgorde hoeft niet het tijdstip van gebeurtenissen weer te geven.

Belangrijkste punten

  • Natuurlijke sleutels komen van identificatiewaarden uit de echte wereld; surrogaatsleutels bestaan om rijen te identificeren.
  • Kies bij voorkeur primaire sleutels die stabiel, compact, aanwezig en veilig om te delen zijn.
  • Een surrogaatsleutel voorkomt geen dubbele records van zaken uit de echte wereld.
  • NOT NULL UNIQUE kan een verplichte alternatieve identificatiewaarde beschermen.
  • Gaten in gegenereerde identificatiewaarden zijn normaal; het zijn labels, geen aantallen.
  • UUID's maken onafhankelijke generatie van identificatiewaarden mogelijk met een zeer klein risico op dubbele waarden.

4.3 Refererende sleutels en geldige verwijzingen

Een refererende sleutel is een kolom of groep kolommen die verwijst naar een primaire sleutel of een andere geschikte unieke sleutel. De tabel met de verwijzing is de kindtabel; de tabel waarnaar wordt verwezen is de oudertabel. Een refererende sleutel die niet NULL is, moet overeenkomen met een bestaande sleutel in de oudertabel wanneer de integriteitsregel wordt gehandhaafd.

Volg een waarde tussen tabellen
order_idcustomer_idorder_dateshipped_date
10112026-03-022026-03-04
10222026-03-05NULL
10312026-03-092026-03-10

orders.customer_id verwijst naar customers.customer_id. Bestelling 102 wijst naar klant 2, James Wilson. Bestellingen 101 en 103 wijzen allebei naar klant 1, Maria Garcia. Herhaling is toegestaan in de refererende sleutel; de sleutel waarnaar in de oudertabel wordt verwezen, is uniek.

Deze regel is referentiële integriteit. Een bestelling voor klant 99 wordt geweigerd als klant 99 niet bestaat. Anders zou het een verweesde rij zijn: een rij in de kindtabel zonder overeenkomende rij in de oudertabel. Een naam alleen maakt geen integriteitsregel. Een refererende sleutel met de naam placed_by kan nog steeds naar customer_id verwijzen; de gedeclareerde verwijzing maakt de koppeling, met overeenkomende typen voor de sleutelkolommen.

Optioneel of verplicht

Een coupon_id die NULL toestaat, kan NULL zijn wanneer een bestelling geen kortingsbon heeft. Een customer_id die als NOT NULL is gedeclareerd, vereist dat elke bestelling een klantverwijzing heeft, en de refererende sleutel vereist dat die klant bestaat. Deze twee integriteitsregels werken samen: de ene vereist een waarde en de andere controleert de verwijzing.

Refererende sleutels hoeven niet naar een andere tabel te verwijzen. In employees(employee_id, name, manager_id) kan manager_id verwijzen naar employee_id in dezelfde tabel. De verwijzing naar een leidinggevende kan voor de algemeen directeur NULL zijn.

Een wijziging in de oudertabel vereist een regel
ActieEffect wanneer een rij in de oudertabel waarnaar wordt verwezen, wordt verwijderd
NO ACTION of RESTRICTWeigert de verwijdering zolang verwijzingen bestaan, afhankelijk van het controlemoment van de integriteitsregel
CASCADEVerwijdert ook de verwijzende rijen in de kindtabel
SET NULLBehoudt de rijen in de kindtabel en wist hun verwijzing; de kolom moet NULL toestaan

Bij de standaardactie kan klant 1 niet worden verwijderd zolang bestellingen 101 en 103 nog naar haar verwijzen. Cascadering van een bestelling naar haar regels kan zinvol zijn omdat die regels bij die bestelling horen. ON UPDATE geeft het overeenkomstige gedrag aan wanneer een sleutel in de oudertabel verandert. Cascadering betekent niet dat het verwijderen van een rij in de kindtabel de bijbehorende rij in de oudertabel verwijdert.

Samengestelde verwijzingen en handhaving

Als een orderregel wordt geïdentificeerd door (order_id, product_id), heeft een verzending die naar die regel verwijst beide kolommen nodig. De combinatie moet overeenkomen met een bestaande regel. Afzonderlijk een overeenkomst voor een bestelling en een product vinden is onvoldoende: dat product kan nooit in die bestelling zijn voorgekomen. Een verplichte samengestelde verwijzing declareert al haar kolommen als NOT NULL.

PostgreSQL, SQL Server, Oracle en de gebruikelijke InnoDB-engine van MySQL handhaven gedeclareerde refererende sleutels. Schakel in SQLite voor elke verbinding de handhaving van refererende sleutels in met PRAGMA foreign_keys = ON; en controleer of die is ingeschakeld voordat je erop vertrouwt. Een gedeclareerde maar uitgeschakelde integriteitsregel kan de rijen niet beschermen. Refererende sleutels combineren ook niet zelf queryresultaten; een query moet de koppeling expliciet volgen, meestal via een join.

Belangrijkste punten

  • Een refererende sleutelwaarde die niet NULL is, moet overeenkomen met een bestaande sleutel waarnaar wordt verwezen.
  • Refererende sleutelwaarden kunnen worden herhaald; sleutelwaarden in de oudertabel zijn uniek.
  • NOT NULL maakt de koppeling verplicht.
  • Referentiële acties bepalen wat er met rijen in de kindtabel gebeurt wanneer een rij in de oudertabel verandert.
  • Een samengestelde verwijzing moet overeenkomen met de volledige sleutelcombinatie in de oudertabel.
  • In SQLite moet de handhaving van refererende sleutels voor elke verbinding worden ingeschakeld.

4.4 Lees de omvang van relaties in beide richtingen

Om een relatie te bepalen, stel je twee vragen: “Hoeveel rijen daar kunnen aan één rij hier worden gekoppeld?” en vervolgens de omgekeerde vraag. Neem zowel het minimum als het maximum mee. De huidige voorbeeldgegevens laten zien wat er is gebeurd; de integriteitsregels beschrijven wat is toegestaan.

Eén klant, veel bestellingen

Een klant kan nul of meer bestellingen plaatsen. Elke bestelling in de winkel hoort bij precies één klant omdat orders.customer_id een refererende sleutel is die niet NULL is. Dit is een-op-veel. De refererende sleutel hoort in orders, de veel-kant: elke bestelling slaat één klantverwijzing op.

Maria heeft bestellingen 101 en 103; James heeft bestelling 102. Aisha en Wei hebben er geen. Dat zij niet in orders voorkomen, is geldig. Een refererende sleutel vereist voor elke rij in de kindtabel een rij in de oudertabel, maar vereist niet dat elke rij in de oudertabel een rij in de kindtabel heeft.

Een-op-een vereist ook uniciteit

Laat in user_profiles(user_id, bio, photo_url) de user_id zowel de primaire sleutel als een refererende sleutel naar users zijn. Elk profiel verwijst naar één gebruiker en een gebruiker kan maximaal één profiel hebben omdat de profielsleutel niet herhaald kan worden. Het is mogelijk dat een gebruiker nog geen profiel heeft.

Een refererende sleutel zonder uniciteit zou meerdere profielen voor dezelfde gebruiker toestaan en zo een-op-veel opleveren. De uniciteitsregel verandert het maximum. Zulke aparte profieltabellen kunnen optionele of gevoelige gegevens apart van het hoofdrecord van de gebruiker bewaren.

Veel-op-veel gebruikt een tabel met paren

Een bestelling kan meerdere producten bevatten en een product kan in meerdere bestellingen voorkomen. Een koppeltabel, ook wel verbindingstabel of associatieve tabel genoemd, legt elk paar vast:

order_idproduct_idquantityunit_price
10111212,50
1011218,99
10213134,00
10311412,50

order_id verwijst naar orders; product_id verwijst naar products. De samengestelde primaire sleutel (order_id, product_id) staat hetzelfde product in verschillende bestellingen toe, maar voorkomt dat hetzelfde paar twee keer voorkomt. Twee een-op-veelkoppelingen vormen samen de veel-op-veelrelatie.

quantity en unit_price horen bij het paar. Ze beschrijven hoeveel van dat product in die bestelling is verkocht en welke prijs toen in rekening is gebracht. Een actuele productprijs kan later veranderen; die mag het historische bedrag niet overschrijven.

Voor bestelling 101 zijn de twee regelbedragen twee mokken van € 12,50, samen € 25,00, en één oplader van € 8,99. Samen kosten ze € 33,99. De hoeveelheid geeft aan hoeveel mokken zijn gekocht; twee dubbele mokregels opslaan zou in strijd zijn met de gekozen sleutel van deze tabel.

Vermijd lijsten en vaste plaatsen

Een cel product_ids met “11,12” verbergt meerdere verwijzingen binnen één tekstwaarde. Kolommen zoals product1, product2 en product3 leggen een vaste grens op en laten ongebruikte plaatsen over. Een koppeltabel voegt een rij toe voor elk extra paar en laat het DBMS elke verwijzing afzonderlijk controleren.

Een zelfverwijzende relatie gebruikt hetzelfde patroon binnen één tabel: veel medewerkers kunnen via manager_id naar dezelfde leidinggevende verwijzen. De leidinggevende is ook een medewerkersrij. Lees elke koppeling als een rol, zodat de identiteit van de medewerker en de verwijzing naar de leidinggevende gescheiden blijven.

Belangrijkste punten

  • Lees het toegestane minimum en maximum in elke richting.
  • Bij een-op-veel staat de refererende sleutel aan de veel-kant.
  • Een unieke refererende sleutel beperkt een relatie tot maximaal één rij in de kindtabel per rij in de oudertabel.
  • Een koppeltabel geeft veel-op-veelkoppelingen weer met rijen van paren.
  • Gegevens zoals hoeveelheid en verkoopprijs kunnen bij een paar horen.
  • Een zelfverwijzing koppelt rollen binnen één tabel.
5

Lees een schema en volg de koppelingen

Een schema legt de structuur vast die tabellen hun betekenis geeft: kolomtypen, identificatiewaarden, verwijzingen en integriteitsregels. Een diagram maakt die koppelingen zichtbaar, terwijl een tabeldefinitie de regels precies vastlegt. Gebruik beide vormen om het pad van een vraag naar het antwoord te vinden en gebruik vervolgens de werkelijke rijen voor de waarden. Houd structuur en huidige gegevens gescheiden: als je weet dat bestellingen naar klanten verwijzen, weet je nog niet welke klanten vandaag bestellingen hebben geplaatst.

5.1 Structuur, huidige gegevens en integriteitsregels

Een schema beschrijft tabellen, kolommen, gegevenstypen en integriteitsregels. Een databasetoestand bestaat uit de gegevens die op een bepaald moment zijn opgeslagen. Een bestelling toevoegen verandert de databasetoestand; een nieuwe kolom toevoegen verandert het schema. Het schema vertelt wat kan worden opgeslagen, terwijl de rijen vertellen wat nu is opgeslagen.

Lees een korte beschrijving

customers(customer_id, first_name, last_name, email, phone, city, state, zip_code) geeft een tabel en haar kolommen weer. In notities worden primaire sleutels soms onderstreept of met PK aangeduid en verwijzingen met FK. Zo geeft orders(order_id PK, customer_id FK → customers, order_date, shipped_date) de belangrijkste sleutel en de klantkoppeling aan.

Lees een volledige tabeldefinitie
CREATE TABLE orders (
  order_id INTEGER PRIMARY KEY,
  customer_id INTEGER NOT NULL REFERENCES customers (customer_id),
  order_date DATE NOT NULL,
  shipped_date DATE
);

Lees één kolom tegelijk. order_id is de primaire sleutel als geheel getal. customer_id is verplicht en moet naar een klant verwijzen. order_date is verplicht. shipped_date mag NULL zijn. Deze definitie geeft de toegestane structuur, geen lijst van bestaande bestellingen.

Integriteitsregels beantwoorden verschillende vragen:

IntegriteitsregelWat de regel controleert
PRIMARY KEYEen unieke identificatie van een rij, eventueel samengesteld
NOT NULLEen waarde is aanwezig
UNIQUEHerhaalde waarden die niet NULL zijn, zijn verboden; de behandeling van NULL verschilt
REFERENCESEen verwijzing komt overeen met een sleutel in de oudertabel
CHECKEen voorwaarde mag niet FALSE zijn
DEFAULTLevert een waarde als er geen wordt opgegeven

Een standaardwaarde vervangt geen opgegeven ongeldige waarde. Als status de regel DEFAULT 'pending' heeft, levert het weglaten van de status 'pending' op; een opgegeven waarde moet nog steeds aan de andere regels van de kolom voldoen.

Combineer regels voor een orderregel
CREATE TABLE order_items (
  order_id INTEGER NOT NULL REFERENCES orders (order_id),
  product_id INTEGER NOT NULL REFERENCES products (product_id),
  quantity INTEGER NOT NULL CHECK (quantity > 0),
  unit_price DECIMAL(8, 2) NOT NULL,
  PRIMARY KEY (order_id, product_id)
);

De primaire sleutel onderaan gebruikt twee kolommen. Een tweede regel voor dezelfde bestelling en hetzelfde product wordt geweigerd. Hoeveelheid 0 wordt door de controle geweigerd. Een ontbrekende hoeveelheid voldoet niet aan NOT NULL: de controle alleen zou NULL toestaan omdat NULL > 0 UNKNOWN is, niet FALSE. Expliciet NOT NULL op beide sleuteldelen voorkomt ook de historische uitzondering van SQLite voor samengestelde sleutels die NULL toestaan. Gebruik in SQLite gehele centen voor een exacte unit_price; de decimale declaratie alleen biedt geen exacte opslag.

Zoek het schema en de betekenissen

In de SQLite-opdrachtregel toont .schema orders de definitie; in psql van PostgreSQL beschrijft \d orders die. INFORMATION_SCHEMA-views tonen structurele metadata in PostgreSQL, MySQL en SQL Server. SQLite vermeldt objecten in sqlite_schema en grafische tools tonen tabellen en kolommen in een boomstructuur.

“Schema” is ook de naam voor een naamruimte binnen systemen zoals PostgreSQL en SQL Server. sales.orders betekent de tabel orders in het schema sales. Een gegevenswoordenboek geeft betekenissen die de structuur niet kan uitdrukken, zoals de valuta van een prijs of de vraag of een ontbrekende verzenddatum “niet verzonden” betekent. Om rijen te zien, leest een query zoals SELECT * FROM orders; de huidige databasetoestand.

Belangrijkste punten

  • Een schema is de structuur; een databasetoestand bestaat uit de gegevens op één moment.
  • Lees het type van een kolom samen met al haar integriteitsregels.
  • Een verplicht positief getal heeft zowel NOT NULL als een controle op een positieve waarde nodig.
  • Een samengestelde primaire sleutel wordt over de volledige combinatie gedeclareerd.
  • Een gegevenswoordenboek legt betekenissen en eenheden vast die niet in het schema staan.

5.2 Lees de uiteinden van een schemalijn

Een schemadiagram tekent elke tabel als een vak. De titel noemt de tabel; de inhoud vermeldt kolommen en vaak typen. PK markeert primaire sleutels en FK markeert refererende sleutels. Relatielijnen tonen welke refererende sleutel naar welke sleutel in de oudertabel verwijst.

Bepaal eerst het soort lijn

Sommige diagrammen gebruiken een pijl van een refererende sleutel naar de sleutel waarnaar die verwijst. Een pijl van orders.customer_id naar customers.customer_id beschrijft de richting van de verwijzing. Andere tools gebruiken symbolen aan de uiteinden om te beschrijven hoeveel rijen kunnen worden gekoppeld. Controleer de legenda van het diagram: een pijlrichting en de omvang van een relatie geven verschillende informatie.

Lees kraaienpootsymbolen

In kraaienpootnotatie betekent een streepje één, een cirkel nul en een poot met drie vertakkingen veel. Elk lijnuiteinde geeft een minimum en maximum aan. Het symbool dat het dichtst bij de tabel staat, geeft het maximum; het andere geeft het minimum.

Symbolen aan het uiteindeToegestaan aantal rijen aan dat uiteinde
Streepje en streepjePrecies één
Cirkel en streepjeNul of één
Streepje en kraaienpootEén of meer
Cirkel en kraaienpootNul of meer

Als je vanuit één tabel leest, kijk je naar de symbolen naast de andere tabel. Die symbolen beschrijven hoeveel rijen daar bij je ene startrij kunnen passen.

Doorloop klanten en bestellingen

De lijn van de winkel heeft symbolen voor precies één naast customers en symbolen voor nul of meer naast orders.

  1. Begin met één klant. Kijk naar het uiteinde bij bestellingen: de klant kan nul of meer bestellingen hebben.
  2. Begin met één bestelling. Kijk naar het uiteinde bij klanten: de bestelling hoort bij precies één klant.
  3. Controleer de definitie: de refererende sleutel die niet NULL is, staat in orders, dus dat is de veel-kant en elke bestelling heeft een geldige klant nodig.

De kraaienpoot staat naast de tabel met de herhaalde refererende sleutel. Als je vanuit diezelfde tabel naar het nabije uiteinde kijkt, draai je de betekenis om. Een klantverwijzing die NULL toestaat, zou het uiteinde bij klanten veranderen naar nul of één; dat zou niet elke klant tot één bestelling beperken.

Herken een koppeltabel

De winkel heeft een-op-veelkoppelingen van orders naar order_items en van products naar order_items. Beide veel-uiteinden komen samen bij order_items. De twee refererende sleutels vormen de primaire sleutel. Door deze structuur kan een bestelling meerdere producten bevatten en kan een product in meerdere bestellingen voorkomen.

Het diagram beschrijft toegestane koppelingen, niet de huidige aantallen. Het staat toe dat Maria meerdere bestellingen heeft en Aisha geen. Om te weten hoeveel ieder er werkelijk heeft, lees je de rijen. Een minimum van één van ouder naar kind kan een aanvullende bedrijfsregel uitdrukken; een refererende sleutel op zichzelf vereist niet dat een rij in de oudertabel rijen in de kindtabel heeft.

Herken verwante diagramstijlen

Een entiteit-relatiediagram dat tijdens het ontwerp wordt gemaakt, kan bedrijfsentiteiten tonen voordat tabellen bestaan. Diagrammen in Chen-notatie gebruiken ovalen voor attributen en ruiten voor relaties. Een schemadiagram toont de werkelijke tabellen en hun gedeclareerde sleutels. Beide helpen om structuur over te brengen, maar hun symbolen moet je volgens hun eigen legenda lezen.

Belangrijkste punten

  • Een schemadiagram toont tabellen en gedeclareerde koppelingen met sleutels.
  • Lees aan elk lijnuiteinde het minimum en maximum met behulp van de legenda.
  • Het andere uiteinde beschrijft de rijen die aan één startrij zijn gekoppeld.
  • Het veel-uiteinde van een een-op-veelkoppeling bevat de herhaalde refererende sleutel.
  • Twee veel-uiteinden die bij een tabel samenkomen, kunnen een koppeltabel aanduiden.
  • Een diagram geeft toegestane koppelingen; rijen geven werkelijke aantallen.

5.3 Vind gegevens door sleutels te volgen

Zoek elk gevraagd gegeven en volg de sleutels die het met het startrecord verbinden. Namen kunnen vaker voorkomen of veranderen; zoek in plaats daarvan overeenkomende sleutelwaarden.

Vind de klant van een bestelling

“Waar woont de klant die bestelling 102 heeft geplaatst?” volgt dit pad:

  1. Zoek bestelling 102 op via orders.order_id.
  2. Lees de bijbehorende customer_id: 2.
  3. Zoek klant 2 op via customers.customer_id.
  4. Lees customers.city: Denver.

Bestelnummer 102 is niet de klantidentificatie. SQL-joins maken deze koppelingen op basis van sleutels automatisch; weergaveposities verbinden de records niet.

Vind producten en een historisch totaal

Bestelling 101 heeft deze rijen in order_items. Volg elke product_id naar products voor de naam:

product_idquantityunit_priceProductnaam
11212,50Koffiemok
1218,99Telefoonoplader

Gebruik de vastgelegde regelprijs voor het in rekening gebrachte bedrag:

  • Twee mokken van € 12,50 kosten € 25,00.
  • Eén oplader van € 8,99 kost € 8,99.
  • Totaal: € 33,99.

De huidige productprijs kan de kosten van een oude bestelling onjuist weergeven. Bestelling 102 bevat één lamp van € 34,00; bestelling 103 bevat vier mokken van € 12,50, samen € 50,00.

Interpreteer ontbrekende waarden en regels

De verzenddatum van bestelling 102 is NULL, hier gedocumenteerd als “niet verzonden”. Test die met IS NULL, niet met een vergelijking op gelijkheid aan NULL.

Lees elke relevante integriteitsregel wanneer je een wijziging beoordeelt:

  • Een regel voor bestelling 104 wordt geweigerd als die bestelling niet bestaat.
  • Een andere regel met sleutel (101, 11) wordt geweigerd omdat het paar bestaat.
  • Hoeveelheid 0 wordt geweigerd door de controle op een positieve hoeveelheid.
  • Het standaardgedrag van de refererende sleutel blokkeert het verwijderen van product 11 zolang regels ernaar verwijzen.

Een ongebruikte sleutel maakt een rij niet geldig als de bijbehorende verwijzing ontbreekt.

Bepaal de nieuwe rijen

Als een terugkerende klant twee verschillende bestaande producten koopt, voegt dat één rij toe aan orders en twee rijen aan order_items. De klant en producten bestaan al. Een nieuw product aanbieden voegt één rij toe aan products, zonder dat daarvoor een bestelling nodig is.

Belangrijkste punten

  • Zoek elk gevraagd gegeven voordat je het sleutelpad volgt.
  • Koppel refererende sleutelwaarden aan de sleutels waarnaar ze verwijzen, niet aan namen of rijposities.
  • Gebruik de prijs van de verkoopregel voor historische bestellingstotalen.
  • Controleer elke toepasselijke integriteitsregel wanneer je een voorgestelde wijziging beoordeelt.
  • Een nieuwe gebeurtenis voegt rijen toe aan de tabellen waarvoor ze gegevens oplevert.

Relationele databases: voorbeelden

5 Walkthroughs

1

Van gedeelde records naar databaseverzoeken

12 stappen
Bekijk hoe een DBMS samenhangende records bruikbaar houdt en volg vervolgens een verzoek van een toepassing naar de database.
  1. 1
    IntroductieWie beheert gedeelde gegevens?

    De verkoop-, klantenservice- en managementteams van een winkel gebruiken dezelfde klantrecords. Een database bevat zulke gedeelde gegevens, en software die een DBMS heet beheert ze.

    Volg hoe een databasesysteem deze gegevens deelt, wijzigingen consistent houdt (de taak van een transactie) en verzoeken van toepassingen beantwoordt.

  2. 2
    UitlegMaak onderscheid tussen verzameling en software

    Gegevens zijn vastgelegde feiten. Een database is een geordende verzameling samenhangende gegevens; een DBMS is de software die deze beheert.

    De klanten en bestellingen van de winkel zijn gegevens. PostgreSQL slaat ze op, controleert regels en beantwoordt verzoeken.

  3. 3
    VoorbeeldWerk één telefoonnummer bij

    Maria's telefoonnummer staat bij 14 verkopen in een spreadsheet. Een vergeten aanpassing leidt tot tegenstrijdige kopieën.

    Sla haar telefoonnummer één keer op onder customer_id 1 en laat verkopen naar haar verwijzen. Een telefoonwijziging vereist dan één aanpassing; elke verkoop behoudt zijn eigen gegevens.

  4. 4
    AnalogieHoud twee wijzigingen bij elkaar

    Een overboeking trekt geld van de betaalrekening af en telt het bij de spaarrekening op. Als alleen de afschrijving wordt opgeslagen, blijven onjuiste saldi over.

    Een transactie slaat beide wijzigingen samen op of draait ze beide terug, ook als ze verschillende rijen of tabellen betreffen.

  5. 5
    UitdagingKies de bescherming

    Een reservering verlaagt het aantal beschikbare plaatsen, maar het opslaan van de betalingsregistratie mislukt. De twee wijzigingen horen bij één transactie. Wat moet overblijven nadat die transactie is teruggedraaid?

    ---reveal---

    Geen van beide wijzigingen mag overblijven. Door de verlaging van het aantal plaatsen terug te draaien, wordt de eerdere beschikbaarheid hersteld en wordt geen betalingsregistratie van die mislukte transactie opgeslagen. Als alleen de wijziging van het aantal plaatsen behouden blijft, is de reservering onvolledig.

  6. 6
    VerbandHerken de werklast

    Een bestelling plaatsen is transactioneel werk: enkele snelle lees- en schrijfbewerkingen. De maandelijkse verkoop per regio vergelijken is analytisch werk: veel historische records samenvatten.

    Een verkoopdatabase kan beide activiteiten ondersteunen.

  7. 7
    UitlegVolg het verzoek van de toepassing

    Clients sturen verzoeken naar een databaseserver, zoals bij PostgreSQL of SQL Server. SQLite draait als bibliotheek binnen de toepassing, zonder aparte server.

    Een aanbieder van een beheerde clouddienst beheert servers voor zijn gebruikers; tabellen en verzoeken blijven van toepassing.

  8. 8
    VoorbeeldLees een declaratief verzoek

    SELECT first_name, city FROM customers WHERE state = 'TX'; vraagt twee kolommen op van klanten in TX.

    SQL is declaratief: het beschrijft het resultaat en laat de stappen om het op te halen over aan het DBMS. SQL is de taal; PostgreSQL is één product dat deze interpreteert.

  9. 9
    TipLees wat de instructie doet

    ALTER TABLE wijzigt de structuur; INSERT voegt een rij toe; GRANT beheert rechten; COMMIT legt een transactie vast.

    Tekst gebruikt enkele aanhalingstekens: 'TX'. Verdubbel een apostrof binnen de tekst: 'O''Brien'. Een puntkomma beëindigt normaal gesproken een instructie.

  10. 10
    UitdagingKies structuur of gegevens

    Een winkel voegt een kolom delivery_note toe en vult die vervolgens voor één bestelling in. Zijn beide wijzigingen aan rijen?

    ---reveal---

    Het toevoegen van de kolom verandert de structuur: gegevensdefinitie. Het invullen ervan verandert opgeslagen gegevens: gegevensmanipulatie.

  11. 11
    UitdagingBreng de onderdelen samen

    Een website stuurt SQL naar een PostgreSQL-server om een aankoop vast te leggen. Een manager leest later een gewone verkoopview. Bevat de view nog een opgeslagen kopie van al die aankooprijen?

    ---reveal---

    Nee. Een gewone view slaat een query op die de onderliggende gegevens leest; de view slaat zelf geen afzonderlijke resultaatrijen op. PostgreSQL blijft het DBMS dat de aankooprecords beheert, terwijl de website en rapportagetool clients zijn.

  12. 12
    SamenvattingEen gedeelde verzameling met duidelijke verantwoordelijkheden

    Een database bevat gegevens; een DBMS beheert opslag, regels, toegang en herstel. Transacties houden wijzigingen bij elkaar.

    SQL-verzoeken gaan over structuur, rijen, rechten of transactiebeheer. Bepaal de taak voordat je de details leest.

2

Lees de betekenis achter een tabel

10 stappen
Zoek een gegeven, tel de onderdelen van de tabel en maak onderscheid tussen relationele regels en de indeling van een weergave.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBegin met wat een rij voorstelt
  2. 2
    VoorbeeldZoek de woonplaats van een klant
  3. 3
    UitlegGebruik de formele namen
  4. 4
    UitdagingVoorspel twee soorten toevoegingen
  5. 5
    KernpuntIdentificeer records zonder posities
  6. 6
    AnalogieBewaar één waarde voor elke eigenschap
  7. 7
    UitlegKoppel een type aan zijn domein
  8. 8
    UitdagingInterpreteer een export uit een spreadsheet
  9. 9
    UitdagingControleer een nieuw record en de waarden
  10. 10
    SamenvattingLees de structuur vóór de waarden
3

Kies opslag en redeneer met NULL

15 stappen
Pas typekeuzes toe op bedrijfsgegevens en voorspel wat ontbrekende waarden doen met vergelijkingen en berekeningen.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieTwee keuzes voor elke kolom
  2. 2
    UitlegMaak onderscheid tussen numerieke typen
  3. 3
    TipLet op productverschillen
  4. 4
    UitdagingControleer een decimaal bereik
  5. 5
    VerbandHerken datums en indicatoren
  6. 6
    UitlegKies op basis van het doel van de waarde
  7. 7
    VoorbeeldSla geld exact op
  8. 8
    UitdagingCorrigeer een code en een hoeveelheid
  9. 9
    UitlegLees wat ontbreekt
  10. 10
    VoorbeeldVolg een onbekende vergelijking
  11. 11
    KernpuntGebruik de test op ontbrekende waarden
  12. 12
    UitdagingCombineer bekend en onbekend
  13. 13
    VoorbeeldTel wat aanwezig is
  14. 14
    UitdagingControleer de interpretatie van een rapport
  15. 15
    SamenvattingLaat de betekenis de opslag bepalen
4

Maak betrouwbare koppelingen met sleutels

18 stappen
Toets identificatiewaarden, volg refererende sleutels en lees een-op-veelrelaties, een-op-eenrelaties en veel-op-veelrelaties.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieIdentificatie komt vóór een koppeling
  2. 2
    UitlegToets uniciteit en minimaliteit
  3. 3
    UitdagingToets een toekomstige inschrijving
  4. 4
    TipDeclareer één primaire sleutel
  5. 5
    UitlegKies een stabiel label
  6. 6
    KernpuntBehoud een aparte bedrijfsregel
  7. 7
    UitdagingLees een gat zonder te hernummeren
  8. 8
    VoorbeeldVolg de verwijzing van een bestelling
  9. 9
    UitlegVerplichte en optionele verwijzingen
  10. 10
    UitdagingLees een verwijderregel
  11. 11
    VerbandControleer de volledige verwijzing
  12. 12
    UitlegLees een-op-veel in beide richtingen
  13. 13
    VoorbeeldBeperk een koppeling tot één
  14. 14
    VoorbeeldGeef elk productpaar weer
  15. 15
    KernpuntSla een gegeven over het paar op
  16. 16
    UitdagingKies een koppeling voor een nieuwe situatie
  17. 17
    UitdagingCombineer identificatie en verwijzingen
  18. 18
    SamenvattingSleutels vervullen samen verschillende taken
5

Lees een schema om een vraag te beantwoorden

14 stappen
Lees definities en diagramuiteinden, volg vervolgens records en beoordeel of voorgestelde wijzigingen geldig zijn.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieScheid de kaart van de records
  2. 2
    VoorbeeldLees een definitie van bestellingen
  3. 3
    KernpuntCombineer een controle met een verplichte waarde
  4. 4
    UitdagingDeel twee wijzigingen in
  5. 5
    TipZoek de volledige regels
  6. 6
    UitlegLees de legenda van een diagram
  7. 7
    VoorbeeldBegin met één rij en kijk naar de overkant
  8. 8
    UitdagingVoorspel een optionele koppeling
  9. 9
    VerbandHerken een tabel met paren
  10. 10
    VoorbeeldVolg bestelling 102 naar de woonplaats
  11. 11
    VoorbeeldBereken op basis van de verkoopregels
  12. 12
    UitdagingBeoordeel een voorgestelde regel
  13. 13
    UitdagingVerbind gegevens, regels en betekenis
  14. 14
    SamenvattingGebruik elke bron voor haar eigen informatie

Relationele databases: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Lees records, typen en eenvoudige koppelingen10 Oefenvragen

Vraag 1 van 10

Een tabel heeft 6 benoemde kolommen en 18 rijen. Wat zijn de graad en kardinaliteit nadat er twee rijen zijn toegevoegd?
  1. Graad 20, kardinaliteit 6
  2. Graad 6, kardinaliteit 18
  3. Graad 8, kardinaliteit 20
  4. Graad 6, kardinaliteit 20
Toon antwoordVerberg antwoord
Antwoord: D
Er zijn geen kolommen toegevoegd, dus de graad blijft 6; 18 + 2 geeft kardinaliteit 20. Als je deze aantallen omwisselt, verwar je het aantal eigenschappen met het aantal records.

Vraag 2 van 10

Hoeveel cijfers kunnen er in PostgreSQL vóór de komma staan in een waarde van DECIMAL(7, 2)?
  1. 2
  2. 7
  3. 5
  4. 9
Toon antwoordVerberg antwoord
Antwoord: C
De precisie telt alle cijfers; de schaal reserveert er twee achter de komma. Dus 7 − 2 laat er 5 voor de komma over. Wie 7 kiest, verwart de totale precisie met de grens voor het gehele deel.

Vraag 3 van 10

Een boeking slaat een stoeltoewijzing en een bijbehorende betalingsregistratie op. Welke databasevoorziening zorgt ervoor dat beide wijzigingen worden opgeslagen of beide worden teruggedraaid?
  1. Een uniciteitsregel
  2. Een tabeldefinitie
  3. Een transactie
  4. Een opgeslagen view
Toon antwoordVerberg antwoord
Antwoord: C
Een transactie slaat beide wijzigingen samen op of draait ze beide terug, zodat stoel en betaling consistent blijven. Een uniciteitsregel voorkomt dubbele waarden; die kan de wijzigingen niet bundelen.

Vraag 4 van 10

Een apparatuurtabel slaat bedrijfsmiddel 46 op met de telefoonvermelding “212-555-0108, 212-555-0116”. Medewerkers moeten elk nummer afzonderlijk controleren. Hoe moeten de telefoongegevens worden georganiseerd?
  1. Behoud één tekstcel en vergroot de lengte.
  2. Gebruik gerelateerde telefoonrijen, één per nummer.
  3. Voeg een tweede rij met dezelfde sleutel toe.
  4. Gebruik één groter numeriek type voor beide nummers.
Toon antwoordVerberg antwoord
Antwoord: B
Gerelateerde telefoonrijen geven elk nummer een eigen waarde die aan bedrijfsmiddel 46 is gekoppeld. Een langere cel bevat nog steeds een lijst die moet worden opgesplitst; het kopiëren van de rij verwart één bedrijfsmiddel met de meerdere nummers ervan.

Vraag 5 van 10

Bedrijfsregels vereisen dat badge_number aanwezig en uniek is. Afdelingen komen vaker voor. Waarom is (badge_number, afdeling) een supersleutel maar geen kandidaatsleutel?
  1. Een afdelingswaarde kan in meerdere rijen voorkomen.
  2. Een primaire sleutel moet altijd twee kolommen bevatten.
  3. De pasnummers zijn later misschien niet meer uniek.
  4. Zonder afdeling blijft een unieke sleutel over.
Toon antwoordVerberg antwoord
Antwoord: D
Als je afdeling verwijdert, blijft het unieke badge_number over, dus het paar is niet minimaal. Herhaalde afdelingen doen geen afbreuk aan de uniciteit van het paar; de overbodige kolom maakt het geen kandidaatsleutel.

Vraag 6 van 10

Een magazijncode kan “0047” of “47-A” zijn. De code wordt met labels vergeleken en nooit gebruikt om te rekenen. Welk type behoudt deze waarden het best?
  1. Een teksttype met variabele lengte
  2. Een type voor gehele getallen
  3. Een exact decimaal gegevenstype
  4. Een benaderend drijvendekommatype
Toon antwoordVerberg antwoord
Antwoord: A
Tekst behoudt zowel 0047 als 47-A als labels. Een geheel getal verliest de voorloopnullen en kan de letter en het koppelteken niet weergeven. Kies een type op basis van het doel van de waarde.

Vraag 7 van 10

Vier rijen hebben de regiowaarden 'NE', 'SW', NULL en 'NW'. Hoeveel rijen komen door WHERE region <> 'NE'?
  1. 3
  2. 2
  3. 4
  4. 1
Toon antwoordVerberg antwoord
Antwoord: B
Alleen SW en NW komen erdoor: 2 rijen. NE geeft FALSE; NULL geeft UNKNOWN. Wie drie telt, neemt UNKNOWN ten onrechte mee, maar WHERE behoudt alleen TRUE.

Vraag 8 van 10

Tickets heeft een gehandhaafde refererende sleutel event_id naar Events die niet NULL is. Evenementen 12 en 19 bestaan. Twee tickets verwijzen al naar evenement 12. Wat gebeurt er met een derde ticket dat naar evenement 12 verwijst?
  1. Het is toegestaan omdat de rij in de oudertabel bestaat.
  2. Het wordt geweigerd omdat event_id wordt herhaald.
  3. Het maakt nog een rij voor evenement 12.
  4. Het verandert een bestaand ticket voor evenement 12.
Toon antwoordVerberg antwoord
Antwoord: A
Evenement 12 bestaat, dus de verwijzing van het ticket is geldig. Een refererende sleutelwaarde mag worden herhaald tenzij een aparte uniciteitsregel dat verbiedt; de uniciteit van de sleutel in de oudertabel doet dat niet.

Vraag 9 van 10

Een ontwikkelaar beschrijft de rijen die een rapport nodig heeft en laat PostgreSQL kiezen hoe het die vindt. Welke eigenschap van SQL laat dit zien?
  1. SQL is declaratief.
  2. SQL is een engine.
  3. SQL is een bestandsformaat.
  4. SQL is een database.
Toon antwoordVerberg antwoord
Antwoord: A
Declaratieve SQL beschrijft het resultaat; het DBMS kiest de stappen om het op te halen. Een ingebedde engine beschrijft waar software draait, niet hoe een taal een verzoek uitdrukt.

Vraag 10 van 10

Lees quantity INTEGER CHECK (quantity > 0) en status TEXT DEFAULT 'new'. Geen van beide kolommen heeft NOT NULL. Een nieuwe rij geeft hoeveelheid NULL op en laat status weg. Wat wordt opgeslagen?
  1. De rij wordt geweigerd door de hoeveelheidcontrole.
  2. Hoeveelheid wordt 0; status wordt 'new'.
  3. Hoeveelheid blijft NULL; status blijft NULL.
  4. Hoeveelheid blijft NULL; status wordt 'new'.
Toon antwoordVerberg antwoord
Antwoord: D
De hoeveelheidcontrole is UNKNOWN voor NULL en slaagt dus; de weggelaten status krijgt new. Een controle op een positieve waarde weigert FALSE, niet UNKNOWN: ze vereist geen waarde en zet NULL niet om naar nul.
Set 2: Pas regels toe in een kleine database10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een app gebruikt een gewone view met de naam open_jobs en een index op jobs.job_id. Wat is de rol van elk?
  1. De view bevat gekopieerde rijen; de index wijzigt het schema.
  2. De view slaat een query op; de index helpt rijen te vinden.
  3. De view verleent toegang; de index levert ontbrekende waarden.
  4. De view slaat de tabel op; de index bewaart een query.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een bedrijf leest factuurrijen van meerdere jaren om de jaaromzet per regio te vergelijken. Wat voor soort werklast is dit?
  1. Transactionele werklast
  2. Ingebedde werklast
  3. Analytische werklast
  4. Werklast voor gegevensdefinitie
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een rapport toont item 8 vóór item 3. Bij een latere uitvoering staat item 3 eerst, terwijl alle waarden gelijk zijn gebleven. Wat verklaart de verandering?
  1. De uitvoervolgorde ligt niet vast tenzij je erom vraagt.
  2. Het eerste item is de primaire sleutel geworden.
  3. Kolomposities identificeren nu andere items.
  4. De tabel moet een uniciteitsregel zijn kwijtgeraakt.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Elke bibliotheeklener kan veel boeken lenen en elk boek kan in de loop van de tijd door veel leners worden geleend. Welke structuur geeft een uitleengebeurtenis weer?
  1. Een rij met verwijzingen naar lener en boek, plus de uitleendatum
  2. Een lenersrij met een kommagescheiden lijst van alle geleende boeken
  3. Een boekrij met een kommagescheiden lijst van alle eerdere leners
  4. Een lenersrij met vaste verwijzingskolommen book_1, book_2 en book_3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een tabel bevat momenteel de gegenereerde identificatiewaarden 2, 5 en 8. Hoeveel rijen bevat de tabel?
  1. 8 rijen
  2. 3 rijen
  3. 5 rijen
  4. 6 rijen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een diagram heeft symbolen voor precies één naast Departments en symbolen voor nul of meer naast Employees. Gelezen vanuit één afdeling: hoeveel medewerkers mogen worden gekoppeld?
  1. Precies één medewerker
  2. Eén of meer medewerkers
  3. Nul of één medewerker
  4. Nul of meer medewerkers
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Vijf inspectiemetingen zijn 6, NULL, 12, NULL en 9. Wat zijn COUNT(*) en AVG(reading)?
  1. 5 en 5,4
  2. 3 en 9
  3. 5 en 9
  4. 3 en 5,4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een gewone SQLite-tabel declareert label VARCHAR(4). Een rij geeft de tekst “Winter” op. Wat doet SQLite?
  1. Het slaat alleen de eerste vier letters op.
  2. Het vult het woord aan met twee spaties.
  3. Het weigert de rij omdat de tekst te lang is.
  4. Het slaat het volledige woord van zes letters op.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Orders heeft bestelling 620 met account_id 14. Accounts heeft account 14 in Phoenix en account 620 in Tulsa. De account_id van de bestelling verwijst naar Accounts.account_id. Waar bevindt het account van bestelling 620 zich?
  1. Tulsa, door de twee identificatiewaarden 620 te koppelen
  2. Phoenix, door account_id 14 te volgen
  3. Beide steden zijn mogelijk, omdat beide identificatiewaarden bestaan
  4. Geen van beide steden, omdat de sleutelnamen verschillen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een workshop staat één inschrijving per lid, sessie en datum toe. Leden kunnen op één datum verschillende sessies bijwonen en een sessie op een latere datum herhalen. Een sessie kan veel leden hebben. Welke combinatie identificeert een inschrijving?
  1. member_id en session_id
  2. member_id en datum
  3. member_id, session_id en datum
  4. session_id en datum
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Kies typen en volg gekoppelde records10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Aan het uiteinde van een diagram bij de oudertabel tonen een cirkel en streepje nul of één. Het uiteinde bij de kindtabel toont nul of meer. Welke verwijzing in de kindtabel past bij deze symbolen?
  1. Een verplichte refererende sleutel zonder uniciteitsregel
  2. Een verplichte refererende sleutel die ook uniek is
  3. Een refererende sleutel die NULL toestaat en ook uniek is
  4. Een refererende sleutel die NULL toestaat zonder uniciteitsregel
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een SQLite-app moet exacte bedragen in euro's en centen van 7,35 en 2,80 opslaan. Welke opslagkeuze houdt de bedragen exact?
  1. REAL-waarden 7,35 en 2,80
  2. DECIMAL-waarden 7,35 en 2,80
  3. INTEGER-centen 735 en 280
  4. TEXT-bedragen die direct bij berekeningen worden gebruikt
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Factuur 75 heeft twee regels: item 6, hoeveelheid 3, in rekening gebrachte stukprijs 4,20; item 8, hoeveelheid 2, in rekening gebrachte stukprijs 6,50. Hun huidige catalogusprijzen zijn 4,80 en 6,00. Wat was het in rekening gebrachte factuurtotaal?
  1. 25,60
  2. 26,40
  3. 27,40
  4. 24,60
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

In PostgreSQL heeft een verzending NULL voor delay_days en status 'urgent'. Wat is het resultaat van (delay_days > 2) OR (status = 'urgent') en behoudt WHERE de rij?
  1. UNKNOWN; de rij valt weg
  2. TRUE; de rij blijft behouden
  3. FALSE; de rij valt weg
  4. UNKNOWN; de rij blijft behouden
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een tabel krijgt tracking_note als nieuwe kolom voor elke levering. Welke eigenschap verandert direct?
  1. De graad
  2. Het aantal rijen
  3. De index
  4. De primaire sleutel
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een lidmaatschapstabel gebruikt een gegenereerde member_id als primaire sleutel. Een e-mailadres moet aanwezig zijn en maximaal één account identificeren. Welke aanvullende declaratie dwingt beide e-mailregels af in PostgreSQL?
  1. email TEXT PRIMARY KEY
  2. email TEXT NOT NULL
  3. email TEXT UNIQUE
  4. email TEXT NOT NULL UNIQUE
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een dienst herhaalt het huidige telefoonnummer van elke leverancier op elke verzendrij. Medewerkers slaan bij het bijwerken sommige kopieën over. Welke wijziging verhelpt de inconsistentie?
  1. Geef elke verzending een grotere identificatiewaarde.
  2. Sorteer verzendingen op het telefoonnummer van de leverancier.
  3. Sla telefoonnummers op als getallen in plaats van tekst.
  4. Sla leveranciersgegevens één keer op en verwijs ernaar.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Profiles.user_id is zowel de primaire sleutel als een refererende sleutel naar Users.user_id. Geen enkele regel vereist dat een gebruiker een profiel heeft. Wat staat dit toe?
  1. Veel profielen per gebruiker; één gebruiker per profiel
  2. Eén of meer profielen per gebruiker; één gebruiker per profiel
  3. Nul of één profiel per gebruiker; één gebruiker per profiel
  4. Eén profiel per gebruiker; veel gebruikers per profiel
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Er wordt een nieuwe factuurrij toegevoegd zonder kolommen of integriteitsregels te wijzigen. Wat is er veranderd?
  1. Het schema, maar niet de databasetoestand
  2. De databasetoestand, maar niet het schema
  3. Zowel het schema als de databasetoestand
  4. Noch het schema, noch de databasetoestand
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

StockRows heeft de primaire sleutel (warehouse_id, item_id) met de rijen (4, 7) en (5, 9). Reservations heeft een verplichte, gehandhaafde samengestelde refererende sleutel naar StockRows. Is een reservering voor (4, 9) toegestaan?
  1. Nee; het volledige paar waarnaar wordt verwezen ontbreekt.
  2. Ja; magazijn 4 en item 9 komen beide voor.
  3. Ja; elk sleutelonderdeel is afzonderlijk uniek.
  4. Nee; alle bestaande paren zouden magazijn 4 moeten hebben.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Lees integriteitsregels en leg gevolgen uit10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een verkooptabel bevat verkooprijen en onderaan een rij met het label “TOTAAL” die de som van hun bedragen bevat. Waarom is die rij een probleem wanneer de bedragkolom opnieuw wordt opgeteld?
  1. De rij maakt van elk verkoopbedrag een tekstwaarde.
  2. De rij dwingt alle verkooprijen tot dezelfde sleutel.
  3. De rij verandert het aantal kolommen van elke verkoop.
  4. De rij voegt een samenvatting toe alsof die een verkoop is.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Twee prijzen zijn 30 USD en 30 EUR. Waarom kun je die niet direct optellen tot één betekenisvol geldbedrag?
  1. Ze hebben verschillende primaire sleutels nodig.
  2. Hun tekstlengtes zijn gelijk.
  3. Hun valuta-eenheden verschillen.
  4. Hun waarden hebben geen schaal.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een cursusoverzicht staat toe dat elke cursist veel cursussen volgt, waaronder dezelfde cursus in verschillende perioden. Elke cursus heeft veel cursisten. Welke koppelrij en sleutel passen bij deze regels?
  1. Verwijzingen naar cursist en cursus; sleutel learner_id
  2. Verwijzingen naar cursist en cursus; sleutel (learner_id, course_id)
  3. Cursist, cursus en periode; sleutel (learner_id, course_id, periode)
  4. Cursist, cursus en periode; sleutel (course_id, periode)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een tabel heeft 9 kolommen en 24 rijen. Drie rijen worden verwijderd en daarna worden twee kolommen toegevoegd. Wat zijn de graad en kardinaliteit?
  1. Graad 11, kardinaliteit 21
  2. Graad 6, kardinaliteit 26
  3. Graad 9, kardinaliteit 23
  4. Graad 21, kardinaliteit 11
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een diagram toont Orders en Products, elk met een een-op-veelkoppeling naar Lines. Lines heeft de primaire sleutel (order_id, product_id) en beide delen zijn refererende sleutels. Wat laat dit zien tussen bestellingen en producten?
  1. Een-op-een, omdat elk paar uniek is
  2. Veel-op-veel, via de tabel Lines
  3. Een-op-veel, met Products als oudertabel
  4. Veel-op-een, met Orders als kindtabel
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Passes staat één actieve pas per persoon en per kluisje toe. Zowel person_id als locker_id is verplicht en afzonderlijk uniek. De primaire sleutel is person_id. Hoe moet locker_id worden ingedeeld?
  1. Alleen een refererende sleutel
  2. Een niet-minimale supersleutel
  3. Een tweede primaire sleutel
  4. Een alternatieve kandidaatsleutel
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een schema declareert prijs DECIMAL(8, 2). Welke aanvullende informatie is nodig om een opgeslagen prijs van 45,00 als een bedrag uit de praktijk te interpreteren?
  1. Het fysieke adres van de schijfpagina
  2. Het aantal indexen op de tabel
  3. De weergegeven positie van de rij
  4. De valuta die de kolom gebruikt
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een website en een rapportagetool verbinden beide met een PostgreSQL-server die databases voor winkel en salarisadministratie beheert. Welke beschrijving maakt correct onderscheid tussen deze onderdelen?
  1. PostgreSQL is een client; winkel en salarisadministratie zijn SQL-dialecten.
  2. De website is SQL; PostgreSQL en salarisadministratie zijn databases.
  3. PostgreSQL is het DBMS; winkel en salarisadministratie zijn databases.
  4. De rapportagetool is het DBMS; PostgreSQL zijn de opgeslagen gegevens.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Twee gewone SQLite-tabellen declareren bedrag DECIMAL(6, 2) en label VARCHAR(3). Rijen geven bedrag 1234567,89 en label “Zomers” op. Wat dwingen alleen die declaraties af?
  1. Zowel de precisie van het bedrag als de lengte van het label
  2. Noch de precisie van het bedrag, noch de lengte van het label
  3. De precisie van het bedrag, maar niet de lengte van het label
  4. De lengte van het label, maar niet de precisie van het bedrag
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Veel oude facturen verwijzen naar een klantidentificatie. Klanten veranderen vaak hun e-mailadres en het bedrijf vereist dat e-mailadressen uniek en aanwezig blijven. Welke inrichting ondersteunt deze regels het best?
  1. Stabiele surrogaatsleutel; e-mail gedeclareerd als NOT NULL UNIQUE
  2. E-mail als primaire sleutel; gegenereerde identificatie zonder uniciteitsregel
  3. Telefoon als primaire sleutel; e-mail opgeslagen zonder integriteitsregels
  4. E-mail als primaire sleutel; na elke wijziging een nieuwe klantrij
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Los vraagstukken over ontbrekende gegevens en samenhangende integriteitsregels op10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een DBMS bouwt een index opnieuw op en deelt opgeslagen pagina's anders in. Toepassingen gebruiken nog steeds dezelfde tabel- en kolomnamen om ongewijzigde gegevens op te vragen. Welk principe laat dit zien?
  1. Gegevensonafhankelijkheid
  2. Joinkardinaliteit
  3. Atomaire transacties
  4. Samengestelde rijsleutels
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Scans gebruikt de primaire sleutel (batch_id, page_no). Het paar (18, 4) bestaat. Batch- en paginanummers mogen afzonderlijk worden herhaald. Welke voorgestelde rij wordt specifiek geweigerd omdat die deze sleutel dupliceert?
  1. batch 18, pagina 5, nieuwe afbeelding
  2. batch 19, pagina 4, nieuwe afbeelding
  3. batch 18, pagina 4, andere afbeelding
  4. batch 19, pagina 5, andere afbeelding
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een leendienst moet voorkomen dat een betaling naar een niet-bestaande lening verwijst, ook wanneer meerdere apps gegevens schrijven. Waar moet deze gedeelde regel worden afgedwongen?
  1. In de kolomkoppen van elk rapport
  2. In een gehandhaafde verwijzingsregel in de database
  3. In de tekst van het weergavelabel van de lening
  4. In de volgorde waarin betalingsrijen worden getoond
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Wat betekent een cirkel gevolgd door een streepje aan een uiteinde in een kraaienpootdiagram?
  1. Nul of één rij
  2. Precies één rij
  3. Nul of meer rijen
  4. Eén of meer rijen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Verkoop 810 hoort bij bestaande klant 26. Een nieuwe aankoop van diezelfde klant bevat drie verschillende bestaande producten, één regel per product. Hoeveel nieuwe rijen horen in Clients, Sales en SaleLines?
  1. 1 klant, 1 verkoop, 3 regels
  2. 0 klanten, 3 verkopen, 3 regels
  3. 0 klanten, 1 verkoop, 1 regel
  4. 0 klanten, 1 verkoop, 3 regels
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Aanvankelijk is Orders.customer_id een refererende sleutel naar Customers die niet NULL is en geen uniciteitsregel heeft. Het is toegestaan dat klanten geen bestellingen hebben. Als je UNIQUE toevoegt aan Orders.customer_id, blijven de andere regels ongewijzigd. Hoe verandert de relatie?
  1. Klanten gaan van veel bestellingen naar precies één; elke bestelling houdt één klant.
  2. Klanten gaan van nul of veel bestellingen naar nul of één; elke bestelling houdt één klant.
  3. Klanten houden nul of veel bestellingen; elke bestelling krijgt nul of één klant.
  4. Klanten gaan van nul of veel bestellingen naar nul of één; elke bestelling krijgt nul of één klant.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Bij een SQLite-verbinding staat de handhaving van refererende sleutels uit. Er is een gedeclareerde verwijzing, maar een verweesde rij wordt geaccepteerd. Wat moet er veranderen voordat toekomstige schrijfbewerkingen op die integriteitsregel kunnen vertrouwen?
  1. Maak van de identificatie in de oudertabel een tekstkolom.
  2. Sorteer rijen in de kindtabel op hun refererende sleutel.
  3. Schakel refererende sleutels alleen in de rapportagequery in.
  4. Schakel refererende sleutels voor de verbinding in vóór het schrijven.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Zes accounts hebben als stadswaarden 'Miami', NULL, 'Dallas', 'Miami', NULL en 'Boise'. Hoeveel komen door WHERE NOT (city = 'Miami') OR city IS NULL?
  1. 2
  2. 3
  3. 6
  4. 4
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een SQLite-tabel definieert a INTEGER NOT NULL, b INTEGER NOT NULL, PRIMARY KEY (a, b) en q INTEGER NOT NULL CHECK (q > 0). Er bestaan geen rijen. Welke voorgestelde rij voldoet aan al deze integriteitsregels?
  1. a = 2, b = NULL, q = 3
  2. a = 2, b = 5, q = 0
  3. a = 2, b = 5, q = 3
  4. a = 2, b = 5, q = NULL
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Project 31 heeft taken 7 en 9 via een refererende sleutel project_id die NULL toestaat en ON DELETE SET NULL gebruikt. Notitie 4 verwijst naar taak 7 via een gehandhaafde refererende sleutel met ON DELETE CASCADE. Na het verwijderen van project 31 wordt taak 7 verwijderd. Wat blijft er over van taak 9 en notitie 4?
  1. Taak 9 blijft met project_id NULL; notitie 4 wordt verwijderd.
  2. Taak 9 blijft met project_id 31; notitie 4 wordt verwijderd.
  3. Taak 9 wordt verwijderd; notitie 4 blijft gekoppeld aan taak 7.
  4. Taak 9 blijft met project_id NULL; notitie 4 blijft behouden.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

76 Kernbegrippen, elk met een definitie

A

Alternatieve sleutel
Een alternatieve sleutel is een kandidaatsleutel die niet als primaire sleutel is gekozen en die meestal wordt afgedwongen door verplichte waarden met uniciteit te combineren.
Het verplichte unieke e-mailadres van een account kan naast een gegenereerde account_id een alternatieve sleutel blijven.
Analytische werklast (OLAP)
Een analytische werklast vat veel opgeslagen records samen om totalen of patronen te vergelijken.
Een maandrapport vergelijkt de verkoop tussen regio's door de opgeslagen records van veel aankopen te lezen.
Atomaire waarde
Een atomaire waarde is één waarde voor het doel van een kolom, in plaats van een lijst afzonderlijke waarden die onafhankelijk moeten worden verwerkt.
Een telefoonveld met twee door een komma gescheiden nummers bevat een lijst waar één telefoonwaarde wordt verwacht.

B

Bedrag in gehele centen
Een bedrag in gehele centen geeft een bedrag weer als een geheel aantal van de kleinste centeenheid van de valuta en biedt exacte opslag voor geld in centen.
Een SQLite-prijs van € 12,50 kan worden opgeslagen als 1250 cent en bij weergave worden opgemaakt in euro's.
Booleaans gegevenstype
Een Booleaans gegevenstype stelt gegevens voor die waar of onwaar zijn, met NULL voor ontbrekende informatie tenzij een integriteitsregel dat verbiedt.
Een indicator in_stock legt vast of een artikel beschikbaar is; de exacte opslagvorm verschilt per DBMS.

C

Cascadering
Cascadering laat een verwijdering of sleutelwijziging in de oudertabel doorwerken naar verwijzende rijen in de kindtabel, volgens de gedeclareerde actie van de refererende sleutel.
Het verwijderen van een bestelling kan doorwerken naar de orderregels omdat die rijen in de kindtabel bij die bestelling horen.
CHECK-integriteitsregel
Een CHECK-integriteitsregel weigert een rij als de voorwaarde FALSE is, maar een resultaat UNKNOWN door NULL weigert de rij op zichzelf niet.
Een verplichte positieve hoeveelheid gebruikt NOT NULL samen met CHECK (quantity > 0) om beide regels af te dekken.
Client-serversysteem
In een client-serversysteem sturen clients verzoeken naar een server die gegevens beheert en teruggeeft.
Een website en een rapportagetool kunnen beide via een netwerk met dezelfde PostgreSQL-server verbinden.

D

Database
Een database is een geordende verzameling samenhangende gegevens die je kunt doorzoeken, bijwerken en delen.
Een winkeldatabase bewaart klant-, product- en bestelrecords samen voor meerdere toepassingen.
Databasemanagementsysteem (DBMS)
Een DBMS is software die databases beheert, regels afdwingt en de toegang regelt.
Wanneer PostgreSQL een winkeldatabase beheert, is de software iets anders dan de klantrecords die daarin zijn opgeslagen.
Databaseschema
Een databaseschema beschrijft de structuur van tabellen, kolommen, gegevenstypen, sleutels en integriteitsregels die bepalen welke records zijn toegestaan.
Een nieuwe kolom voor een bezorginstructie toevoegen verandert het schema, ook voordat een instructie is opgeslagen.
Databasetoestand
Een databasetoestand is, in de betekenis van schema tegenover gegevens, de verzameling waarden die op één bepaald moment is opgeslagen.
Een nieuwe bestelling toevoegen verandert de huidige databasetoestand terwijl de tabeldefinitie ongewijzigd blijft.
Domein
Een domein is de verzameling waarden die voor een kolom zijn toegestaan, beschreven via het gegevenstype en eventuele aanvullende beperkingen.
Een hoeveelheidsdomein kan gehele getallen groter dan nul vereisen en zo negatieve voorraadhoeveelheden uitsluiten.
Driewaardige logica
Driewaardige logica combineert de resultaten TRUE, FALSE en UNKNOWN en houdt rekening met voorwaarden die ontbrekende databasewaarden bevatten.
TRUE OR UNKNOWN is TRUE omdat de ware voorwaarde de gecombineerde OR-voorwaarde al laat slagen.
Drijvendekommatype
Een drijvendekommatype slaat benaderende binaire getallen op en biedt een groot numeriek bereik, maar introduceert kleine decimale afrondingsverschillen.
Een gemeten temperatuur kan een drijvendekommatype gebruiken wanneer kleine weergavefouten acceptabel zijn.

E

Een-op-eenrelatie
Een een-op-eenrelatie staat maximaal één overeenkomende rij aan elke kant toe en wordt meestal afgedwongen met een refererende sleutel die ook uniek is.
Een profiel kan user_id gebruiken als zowel primaire sleutel als refererende sleutel, zodat een tweede profiel voor één gebruiker wordt voorkomen.
Een-op-veelrelatie
Een een-op-veelrelatie staat toe dat één rij in de oudertabel aan meerdere rijen in de kindtabel is gekoppeld, die elk een refererende sleutel naar die rij bevatten.
De verwijzing naar een leidinggevende bij een medewerker kan worden herhaald omdat meerdere medewerkers dezelfde leidinggevende kunnen hebben.
Entiteit-relatiediagram
Een entiteit-relatiediagram geeft tijdens het ontwerp bedrijfsentiteiten en relaties weer die later in tabellen kunnen worden omgezet.
Diagrammen in Chen-notatie kunnen attributen als ovalen en relaties als ruiten tekenen in plaats van als tabelvakken.
Exact decimaal gegevenstype
Een exact decimaal gegevenstype slaat decimale bedragen zonder binaire benadering op in systemen die dit ondersteunen, zoals PostgreSQL.
Een PostgreSQL-prijs die als DECIMAL(8, 2) is gedeclareerd, slaat exacte bedragen in euro's en centen binnen het bereik op.

G

Gegenereerde identificatiewaarde
Een gegenereerde identificatiewaarde is een sleutelwaarde die automatisch door de database wordt geleverd, met syntaxis die per databaseproduct verschilt.
INTEGER PRIMARY KEY van SQLite levert een geheel getal wanneer een nieuwe rij de identificatiewaarde weglaat.
Gegevens
Gegevens zijn vastgelegde feiten, zoals namen, datums of bedragen.
Een bezorgdienst legt het gewicht, de bestemming en de verzenddatum van een pakket vast als gegevens.
Gegevensdefinitietaal (DDL)
DDL-instructies maken, wijzigen of verwijderen databasestructuren, zoals tabellen.
Een nieuwe kolom voor de leverdatum toevoegen verandert de structuur en hoort daarom bij gegevensdefinitie.
Gegevensmanipulatietaal (DML)
DML-instructies lezen of wijzigen opgeslagen rijen; de bewerkingen omvatten invoegen, wijzigen en verwijderen.
Een nieuwe bestelling vastleggen voegt gegevens toe; het maakt geen extra kolom en verandert de vorm van de tabel niet.
Gegevensonafhankelijkheid
Gegevensonafhankelijkheid scheidt de logische tabelstructuur die toepassingen gebruiken van de fysieke indeling van opgeslagen gegevens door het DBMS.
Het DBMS kan schijfpagina's anders indelen terwijl toepassingen naar dezelfde benoemde kolommen blijven verwijzen.
Gegevenstype voor gehele getallen
Een gegevenstype voor gehele getallen slaat gehele getallen binnen een ondersteund bereik op en is daarmee geschikt voor tellingen, hoeveelheden en veel gegenereerde identificatiewaarden.
De hoeveelheid lampen in een bestelling is een telling in gehele getallen, anders dan hun gemeten gewicht.
Gegevenswoordenboek
Een gegevenswoordenboek documenteert kolombetekenissen, eenheden en bedrijfsregels die de typen en integriteitsregels van een tabel niet volledig uitdrukken.
Documentatie legt uit of een shipped_date die NULL is betekent dat er niet is verzonden of dat een datum verloren is gegaan.
Gestructureerde gegevens
Gestructureerde gegevens delen vastgelegde, benoemde velden, ook wanneer sommige waarden ontbreken.
Elke bestelrij heeft dezelfde kolommen, waaronder een verzenddatum die vóór verzending NULL kan zijn.
Graad
De graad van een tabel is het aantal kolommen, een eigenschap van haar structuur.
Als je de geboortedatum van een klant als nieuwe kolom toevoegt, stijgt de graad van de klantentabel.

I

Index
Een index is een opzoekstructuur die een DBMS helpt overeenkomende rijen te vinden.
Een index op de primaire sleutel helpt het systeem één klantrecord te vinden in een tabel met miljoenen records.
Ingebedde database-engine
Een ingebedde database-engine draait binnen een toepassing als bibliotheek, zonder aparte server.
Een desktopapp kan SQLite gebruiken om een lokaal databasebestand met records te lezen en te beschrijven.
Integriteitsregel (constraint)
Een integriteitsregel is een gedeclareerde regel die toegestane gegevens beperkt, zoals uniciteit, verplichte waarden of geldige verwijzingen tussen tabellen.
Een integriteitsregel voor een positieve hoeveelheid weigert een orderregel met nul eenheden, ook al is nul een geheel getal.
IS NULL
IS NULL is de SQL-test die waar teruggeeft wanneer een vermelding ontbreekt, zodat zulke rijen zonder een gelijkheidsvergelijking kunnen worden gevonden.
De voorwaarde phone IS NULL vindt klanten van wie het telefoonnummer niet is vastgelegd.
ISO-datumnotatie
De ISO-datumnotatie schrijft een kalenderdatum als jaar-maand-dag en geeft daarmee een ondubbelzinnige weergave zoals 2026-03-02.
Consistente ISO-datumtekst in SQLite sorteert in kalendervolgorde, anders dan Amerikaanse weergavetekst met de maand voorop.

J

Join
Een join combineert gerelateerde gegevens door waarden tussen tabellen te koppelen en automatiseert zo het volgen van sleutels bij een handmatige zoekactie.
Een klantzoekactie koppelt orders.customer_id aan customers.customer_id om de juiste woonplaats te vinden.

K

Kandidaatsleutel
Een kandidaatsleutel is een minimale supersleutel: de waarden identificeren een rij uniek en als je een onderdeel verwijdert, vervalt die garantie.
Een verplicht, uniek e-mailadres van een medewerker kan een kandidaatsleutel zijn, ook als employee_id de primaire sleutel wordt.
Kolom (attribuut of veld)
Een kolom (attribuut of veld) is een benoemde eigenschap met een gegevenstype die elke rij deelt.
De kolom city bevat voor elk klantrecord een stadswaarde, of NULL wanneer dat is toegestaan.
Koppeltabel
Een koppeltabel legt paren vast via refererende sleutels naar twee tabellen en gebruikt hun combinatie vaak als primaire sleutel.
Elke rij in order_items koppelt een bestelling aan een product en legt de hoeveelheid en de in rekening gebrachte stukprijs vast.
Kraaienpootnotatie
Kraaienpootnotatie markeert relatie-uiteinden met cirkels, streepjes en poten met drie vertakkingen om minimum- en maximumaantallen gekoppelde rijen te tonen.
Een cirkel en een poot naast bestellingen staan toe dat één klant nul of meer gerelateerde bestelrijen heeft.

N

Natuurlijke sleutel
Een natuurlijke sleutel gebruikt een identificatiewaarde uit de echte wereld van het onderwerp dat wordt vastgelegd, zoals een voertuigidentificatienummer of staatcode.
Een statentabel kan een state_code van twee letters gebruiken als leesbare primaire sleutel in adresrecords.
NOT NULL
NOT NULL is een integriteitsregel die vereist dat een kolomvermelding aanwezig is en NULL weigert, zonder zelf te controleren op een positieve waarde of niet-lege tekst.
Een besteldatum kan verplicht zijn terwijl een verzenddatum tot aan de verzending NULL mag zijn.
NULL
NULL is de markering voor een ontbrekende databasewaarde, die onbekend, nog niet beschikbaar of niet van toepassing op dat record kan zijn.
De verzenddatum van een bestelling kan NULL zijn omdat die nog niet is verzonden, terwijl de besteldatum is vastgelegd.
Numerieke code
Een numerieke code is een identificatiewaarde die met cijfers wordt geschreven en als label dient, zodat voorloopnullen en andere opmaak betekenis kunnen hebben.
De ZIP-code 02108 heeft tekstopslag nodig om de eerste nul te behouden wanneer de waarde wordt teruggelezen.

O

Optionele relatie
Een optionele relatie staat toe dat een koppeling ontbreekt, vaak weergegeven met een refererende sleutel die NULL toestaat en een minimum van nul aan de kant van de oudertabel.
Een bestelling zonder kortingsbon kan coupon_id NULL houden terwijl andere bestellingen naar bestaande kortingsbonnen verwijzen.
Orderregel
Een orderregel is een record van één product binnen één bestelling en bevat gegevens over dat paar, zoals de hoeveelheid en de in rekening gebrachte stukprijs.
Twee mokken in één bestelling kunnen worden weergegeven door één regel met hoeveelheid 2 en de vastgelegde prijs per mok.
Ouder- en kindtabellen
Een oudertabel levert een sleutel waarnaar wordt verwezen; een kindtabel slaat de refererende sleutel op die naar die oudertabel wijst, mogelijk meerdere keren.
Klanten is de oudertabel en bestellingen de kindtabel wanneer elke bestelling de identificatiewaarde van haar klant opslaat.

P

Precisie
De precisie van DECIMAL(p, s) is p, het totale aantal beschikbare cijfers voor het gehele deel en het deel achter de komma van een waarde.
In DECIMAL(8, 2) laten acht cijfers in totaal ruimte voor zes vóór en twee achter de komma.
Primaire sleutel
Een primaire sleutel is de kandidaatsleutel die is gekozen als belangrijkste identificatie van rijen in een tabel, met unieke waarden zonder NULL en mogelijk meerdere kolommen.
De klantentabel gebruikt customer_id als primaire sleutel, zodat bestellingen naar één specifieke klant kunnen verwijzen.

R

Referentiële actie
Een referentiële actie bepaalt hoe een refererende sleutel omgaat met het verwijderen van een rij in de oudertabel waarnaar wordt verwezen of met een wijziging van haar sleutel, bijvoorbeeld door de wijziging te blokkeren of door te laten werken.
ON DELETE SET NULL behoudt rijen in de kindtabel maar verwijdert hun verwijzing naar de oudertabel, dus die verwijzing moet NULL toestaan.
Referentiële integriteit
Referentiële integriteit is de regel dat gehandhaafde verwijzingen via refererende sleutels die niet NULL zijn, overeenkomen met bestaande rijen in de oudertabel, zodat koppelingen geldig blijven.
Een gehandhaafde verwijzingsregel van bestelling naar klant weigert een bestelling voor klant 99 als die klant ontbreekt.
Refererende sleutel
Een refererende sleutel is een kolom of combinatie waarvan verwijzingen die niet NULL zijn, moeten overeenkomen met een bestaande primaire sleutel of geschikte unieke sleutel in de oudertabel.
Meerdere bestelrijen kunnen customer_id 1 bevatten en elk naar hetzelfde unieke klantrecord verwijzen.
Regelbedrag
Een regelbedrag is de prijs van de eenheden op één orderregel, berekend met de hoeveelheid en de voor die verkoop vastgelegde stukprijs.
Twee mokken van € 12,50 dragen € 25,00 bij aan het bestellingstotaal voordat de overige regels worden opgeteld.
Relatiekardinaliteit
Relatiekardinaliteit beschrijft hoeveel rijen aan elke kant van een koppeling bij één rij aan de andere kant mogen horen.
Een klant kan veel bestellingen hebben, terwijl elke bestelling van de winkel naar precies één klant moet verwijzen.
Relationele database
Een relationele database gebruikt tabellen: kolommen beschrijven eigenschappen en rijen beschrijven records.
Een winkel bewaart bestellingen in één tabel en gebruikt klantidentificaties om naar een aparte klantentabel te verwijzen.
Rij (tupel of record)
Een rij (tupel of record) bevat de vermeldingen van één exemplaar voor alle kolommen van de tabel.
In een klantentabel bevat de rij voor een klant met de naam Wei Chen zijn identificatiewaarde, naam, woonplaats en de andere klanteigenschappen.

S

Samengestelde sleutel
Een samengestelde sleutel identificeert rijen via een combinatie van kolommen, waarvan de volledige waarden uniek moeten zijn, ook als afzonderlijke delen worden herhaald.
Student, cursus en periode identificeren samen een inschrijving wanneer een student een cursus later opnieuw mag volgen.
Schaal
De schaal van DECIMAL(p, s) is s, het aantal cijfers achter de komma, dat de precisie van het decimale deel bepaalt.
Een schaal van twee biedt twee decimalen, zoals nodig is voor prijzen in euro's en centen.
Schemadiagram
Een schemadiagram toont bestaande tabellen, hun kolommen en sleutelkoppelingen in vakken en lijnen, vaak met de toegestane aantallen voor relaties.
Een lijn verbindt orders.customer_id met de klantsleutel en maakt zo de verwijzing van bestellingen naar klanten zichtbaar.
Sleutelpad
Een sleutelpad is een reeks gedeclareerde verwijzingen die je tussen tabellen volgt om een startrecord te verbinden met de gegevens die nodig zijn voor een antwoord.
Om de woonplaats bij een bestelling te vinden, volg je de customer_id naar een klantrij en lees je de woonplaats van die rij.
SQL
SQL is de standaard declaratieve taal voor relationele databases, met productspecifieke dialecten.
Een rapportagetool stuurt een SQL-verzoek naar PostgreSQL om de benodigde klantrecords op te halen.
SQL-dialect
Een SQL-dialect is de SQL-syntaxis, de typen en de toegevoegde mogelijkheden die een product ondersteunt.
SQLite gebruikt LIMIT 10 voor een resultaatlimiet, terwijl SQL Server meestal TOP 10 gebruikt.
Standaardwaarde
Een standaardwaarde wordt geleverd wanneer een nieuwe rij de waarde van een kolom weglaat, terwijl andere integriteitsregels nog steeds bepalen welke waarde wordt opgeslagen.
Een statuskolom met DEFAULT 'pending' legt pending vast wanneer de nieuwe rij geen status opgeeft.
Supersleutel
Een supersleutel is een kolom of verzameling kolommen waarvan de gecombineerde waarden elke rij uniek identificeren, ook als de sleutel overbodige kolommen bevat.
Als employee_id uniek is, identificeert de combinatie met afdeling de medewerker nog steeds, maar voegt ze een extra kolom toe.
Surrogaatsleutel
Een surrogaatsleutel is een identificatiewaarde die alleen is ingevoerd om databaserijen te onderscheiden, zoals een gegenereerd geheel getal zonder zakelijke betekenis.
Een customer_id blijft gelijk wanneer de klant een e-mailadres, telefoonnummer of achternaam wijzigt.

T

Tabel (relatie)
Een tabel (relatie) bevat gegevens over één soort zaken in benoemde kolommen en afzonderlijke rijen.
De productentabel registreert elk artikel dat de winkel aanbiedt met kolommen zoals naam en prijs.
Tabelkardinaliteit
De kardinaliteit van een tabel is het aantal rijen dat deze momenteel bevat. Dat verandert als records worden toegevoegd of verwijderd.
Een winkelklantentabel die momenteel vier records bevat, heeft een tabelkardinaliteit van vier.
Teksttype
Een teksttype slaat tekst op zoals namen of codes; de lengte en het vergelijkingsgedrag hangen af van de declaratie en het databasesysteem.
Een productcode zoals MUG-11-BLU hoort in tekstopslag omdat het een label is, geen hoeveelheid.
Transactie
Een transactie bundelt wijzigingen zodat ze allemaal samen worden opgeslagen of allemaal worden teruggedraaid.
Een overboeking trekt binnen dezelfde transactie geld van de ene rekening af en telt het bij een andere op.
Transactionele werklast (OLTP)
Een transactionele werklast registreert dagelijkse gebeurtenissen via kleine lees- en schrijfbewerkingen.
Een ticketsysteem registreert elke boeking en betaling terwijl klanten gedurende de dag plaatsen kopen.
Typeaffiniteit
Typeaffiniteit van SQLite is een voorkeur voor het opslagtype van een kolom, waarbij conversies worden geprobeerd maar flexibel opgeslagen waarden zijn toegestaan.
Een gewone SQLite-kolom voor gehele getallen kan abc als tekst behouden wanneer conversie naar een geheel getal mislukt.

U

UNKNOWN
UNKNOWN is de derde waarheidswaarde van SQL, die ontstaat wanneer een vergelijking afhangt van ontbrekende informatie en niet als waar of onwaar kan worden vastgesteld.
state <> 'TX' is UNKNOWN voor een klant van wie de staat NULL is, dus WHERE laat die rij weg.
UUID
Een UUID is een identificatiewaarde van 128 bits, meestal geschreven in 36 tekens, die onafhankelijk kan worden gegenereerd met een zeer klein risico op dubbele waarden.
Afzonderlijke apparaten kunnen UUID's genereren voordat hun nieuwe records in één database worden samengevoegd.

V

Valutacode
Een valutacode is een gestandaardiseerd label van drie letters dat de valuta van een bedrag aanduidt, zoals USD, EUR of JPY.
Twee rijen die beide 20 bevatten, kunnen verschillende bedragen voorstellen als de ene USD en de andere EUR vermeldt.
Veel-op-veelrelatie
Een veel-op-veelrelatie laat rijen aan beide kanten koppelen aan meerdere rijen aan de andere kant en wordt weergegeven met een tabel van paren.
Eén bestelling bevat meerdere producten en één product kan in veel verschillende bestellingen voorkomen.
Verweesde rij
Een verweesde rij is een record in een kindtabel waarvan de verwijzing die niet NULL is geen overeenkomst in de oudertabel heeft, zodat de veronderstelde relatie niet kan worden gelegd.
Een bestelling die naar een verwijderde klant verwijst, zou verweesd zijn als geen gehandhaafde integriteitsregel dat voorkwam.
View
Een view is een opgeslagen query die als een tabel wordt gebruikt; een gewone view heeft zelf geen opgeslagen resultaatrijen.
Een verkoopview kan geselecteerde bestelkolommen tonen terwijl de onderliggende records in hun tabellen blijven.

Z

Zelfverwijzende relatie
Een zelfverwijzende relatie koppelt rollen binnen één tabel doordat een refererende sleutel naar een sleutel in dezelfde tabel verwijst.
De manager_id van een medewerker wijst naar een andere medewerkersrij, met NULL voor iemand die geen leidinggevende heeft.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag