Ga naar hoofdinhoud

SQL Foreign Key: houd je databasetoewijzingen op orde

Ontdek hoe foreign keys tabellen aan elkaar koppelen, voorkomen dat ongeldige data binnenglipt en je database consistent houden.
· 13 min lezen

Verken met AI

In relationele databases is data meestal verdeeld over meerdere tabellen, die elk een specifiek aspect van een groter systeem opslaan. Deze scheiding is een goede ontwerpkeuze, maar brengt wel de uitdaging met zich mee dat data snel lastig te interpreteren kan worden.

Om deze uitdaging aan te pakken, steunen relationele databases op regels die relaties tussen tabellen afdwingen. Een van de belangrijkste mechanismen om deze structuur en betrouwbaarheid te behouden, is het gebruik van foreign keys, die ervoor zorgen dat gerelateerde data op één lijn blijft.

In deze tutorial leg ik uit hoe foreign keys werken. Als je net begint als database engineer, raad ik je aan onze cursussen Introduction to Relational Databases in SQL en Database Design te volgen om te leren hoe je relaties creëert bij het definiëren van je databaseschema.

Primary key vs. foreign key

Zowel de primary key, waar we een ander artikel over hebben, als de foreign key helpen de structuur en integriteit van een relationele database te behouden. Ik leg ze allebei uit:

Wat is een foreign key?

Een foreign key is een veld of set velden in de ene tabel die verwijst naar de primary key in een andere tabel. Deze foreign key legt een koppeling tussen tabellen om te garanderen dat de data in de verwijzende tabel overeenkomt met geldige items in de verwezen tabel.

Stel dat je een database hebt met een tabel users en een tabel orders. De tabel orders kan een kolom user_id bevatten, die moet overeenkomen met een bestaande user_id in de tabel users. De foreign key-constraint zorgt ervoor dat je geen order kunt aanmaken die is gekoppeld aan een niet-bestaande gebruiker.

Foreign keys begrijpen vraagt ook om begrip van primary keys, omdat foreign keys afhankelijk zijn van primary keys om deze relaties op te zetten en te onderhouden.

Wat is een primary key?

Een primary key is een kolom of combinatie van kolommen die elk record in een tabel uniek identificeert. Geen twee rijen mogen dezelfde primary key-waarde delen en deze kan nooit NULL zijn. Daarom moet een tabel één primary key hebben: de unieke identifier waarnaar alle foreign keys in andere tabellen verwijzen.

Bijvoorbeeld, de query hieronder maakt de tabel users, met de kolom user_id als primary key:

-- Create users table with user_id as primary key
CREATE TABLE users (
    user_id INT PRIMARY KEY, 
    username VARCHAR(100),
    email VARCHAR(255)
);

De belangrijkste verschillen tussen primary keys en foreign keys

Ik heb de verschillen tussen de primary en foreign keys samengevat in de tabel hieronder:

Aspect

Primary key

Foreign key

Doel

Identificeert elk record binnen een tabel uniek

Maakt een relatie door te verwijzen naar een primary key in een andere tabel

Uniciteit

Moet uniek zijn

Mag dubbele waarden bevatten

NULL-waarden

Mag niet NULL zijn

Mag NULL zijn (tenzij beperkt)

Locatie

Gedefinieerd in dezelfde tabel

Verwijst naar de primary key van een andere tabel

Uit de bovenstaande uitleg blijkt dat primary en foreign keys belangrijk zijn voor het creëren van gestructureerde en betrouwbare databases. Ze werken samen om data consistent te houden, relaties te onderhouden en de integriteit van de database te waarborgen.

Foreign keys bouwen en beheren in SQL

Nu je begrijpt wat foreign keys zijn en waarom ze belangrijk zijn in databases, gaan we leren hoe je hun gedrag definieert, beheert en aanstuurt bij het ontwerpen van je database.

Foreign keys definiëren met SQL

Je kunt een foreign key in SQL op twee manieren instellen: bij het aanmaken van de tabel of achteraf toevoegen als de tabel al bestaat.

Het voorbeeld hieronder laat de eerste optie zien: hoe je een foreign key definieert bij het aanmaken van een tabel in SQL Server.

-- Create parent table: users
CREATE TABLE users (
    user_id INT IDENTITY(1,1) PRIMARY KEY,
    username NVARCHAR(100),
    email NVARCHAR(255)
);

-- Create child table: orders
CREATE TABLE orders (
    order_id INT IDENTITY(1,1) PRIMARY KEY,
    user_id INT,
    order_date DATE,
    CONSTRAINT fk_orders_users FOREIGN KEY (user_id)
        REFERENCES users(user_id)
);

De syntax is hetzelfde voor PostgreSQL, al gebruiken we SERIAL voor auto-increments voor de primary key.

-- Create parent table: users
CREATE TABLE users (
    user_id SERIAL PRIMARY KEY,   -- SERIAL auto-increments
    username VARCHAR(100),
    email VARCHAR(255)
);

-- Create child table: orders
CREATE TABLE orders (
    order_id SERIAL PRIMARY KEY,
    user_id INT,
    order_date DATE,
    CONSTRAINT fk_orders_users FOREIGN KEY (user_id)
        REFERENCES users(user_id)
);

Als je een MySQL-database gebruikt, moet je InnoDB gebruiken zoals hieronder getoond.

-- Create parent table: users
CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(100),
    email VARCHAR(255)
) ENGINE=InnoDB;   -- Must use InnoDB for FK support

-- Create child table: orders
CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    CONSTRAINT fk_orders_users FOREIGN KEY (user_id)
        REFERENCES users(user_id)
) ENGINE=InnoDB;

Als je een Oracle-database gebruikt, kun je de foreign key definiëren, maar zorg ervoor dat de datatypen in beide tabellen exact overeenkomen.

-- Create parent table: users
CREATE TABLE users (
    user_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    username VARCHAR2(100),
    email VARCHAR2(255)
);

-- Create child table: orders
CREATE TABLE orders (
    order_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    user_id NUMBER,
    order_date DATE,
    CONSTRAINT fk_orders_users FOREIGN KEY (user_id)
        REFERENCES users(user_id)
);

Om een foreign key toe te voegen aan een bestaande tabel, gebruik je de volgende query:

-- Assuming orders table already exists
ALTER TABLE orders
ADD CONSTRAINT fk_orders_users
FOREIGN KEY (user_id)
REFERENCES users(user_id);

Ik raad je aan onze cursussen Introduction to SQL Server en Creating PostgreSQL Databases te volgen om meer te leren over de verschillen in de SQL-dialecten bij het creëren van databases.

Constraints beheren en naamgevingsconventies

Foreign keys zijn een type constraint: een regel die door het databasebeheersysteem (DBMS) wordt afgedwongen om data te valideren bij bewerkingen zoals inserts, updates en deletes. Wanneer een foreign key-constraint actief is, zorgt de database ervoor dat elke waarde die in de foreign key-kolom wordt ingevoerd al bestaat in de verwijzende primary key-kolom.

Een gangbare praktijk is om constraints te benoemen volgens het patroon fk_<child>_<parent>. In onze voorbeelden wordt de foreign key dan fk_orders_users. Als je je foreign keys op deze manier benoemt, worden schema’s leesbaar, helpt het bij het debuggen van constraint-overtredingen en werkt het goed met migratietools. De constraintvalidatie werkt als je de volgende operaties uitvoert:

  • INSERT: Wijst een rij af als de verwezen parentwaarde niet bestaat

  • UPDATE: Voorkomt wijzigingen die relaties zouden breken.

  • DELETE: Blokkeert delete-bewerkingen wanneer afhankelijke kindrijen bestaan.

Referentiële integriteit en cascaderende acties

Referentiële integriteit is het kernprincipe dat door de foreign key-constraint wordt afgedwongen. Foreign keys helpen dit te handhaven door te voorkomen dat er verweesde records ontstaan, die optreden wanneer rijen in een kindtabel verwijzen naar niet-bestaande rijen in een parenttabel.

SQL laat je ook cascaderende acties instellen. Dit zijn automatische instructies die het databasebeheersysteem (DBMS) precies vertellen hoe om te gaan met wijzigingen die worden aangebracht aan het record waarnaar wordt verwezen. Je kunt deze cascaderende operaties bijvoorbeeld gebruiken om zaken te doen zoals:

Actie

Gedrag

ON DELETE CASCADE

Verwijder kindrijen wanneer de parentrij wordt verwijderd

ON UPDATE CASCADE

Werk de kindersleutel bij wanneer de parentsleutel verandert

SET NULL

Foreign key in kind wordt NULL

SET DEFAULT

Kind krijgt standaardwaarde

NO ACTION / RESTRICT

Voorkom wijzigingen die relaties breken

Bijvoorbeeld, de volgende query voegt de cascaderende operaties toe om een gebruikersrecord te verwijderen als hij of zij de order verwijdert, en werkt automatisch bij als hun user_id verandert.

-- Adds cascading rules to enforce hierarchical cleanup
ALTER TABLE orders
ADD CONSTRAINT fk_orders_users
FOREIGN KEY (user_id)
REFERENCES users(user_id)
ON DELETE CASCADE     -- deleting a user deletes their orders
ON UPDATE CASCADE;    -- if user_id changes, update automatically

Relaties tussen tabellen ontwerpen

Foreign keys zijn de bouwstenen in datamodellering die de relaties tussen tabellen in een database definiëren. In deze sectie bekijken we de verschillende manieren waarop foreign keys dataconsistentie garanderen bij het koppelen van tabellen.

One-to-many- en many-to-many-relaties

In een one-to-many-relatie (1:N) kan één rij in een parenttabel gekoppeld zijn aan veel records in een kindtabel. Deze relatie wordt afgedwongen door de primary key van de parenttabel, zoals users.user_id, als foreign key te plaatsen in de kindtabel, zoals orders.customer_id.

Bijvoorbeeld: één gebruiker kan veel orders hebben, of één afdeling kan veel werknemers hebben.

Voorbeeld van een one-to-many-relatie.

Voorbeeld van een one-to-many-relatie. Afbeelding door de auteur.

Een many-to-many-relatie (M:N) daarentegen treedt op wanneer meerdere records in de ene tabel gerelateerd kunnen zijn aan meerdere records in een andere. Omdat je een many-to-many-relatie niet direct kunt implementeren in een genormaliseerde database, gebruiken we een koppel- of brugtabel met twee foreign keys.

Voorbeeld van een many-to-many-relatie.

Voorbeeld van een many-to-many-relatie. Afbeelding door de auteur.

Samengestelde en zelfverwijzende foreign keys

Een samengestelde sleutel bestaat uit twee of meer kolommen die samen een record uniek identificeren en die samen moeten worden verwezen. Dit patroon wordt gebruikt wanneer de natuurlijke sleutel meerdere velden beslaat, of als je dubbele relaties wilt voorkomen. Zo kun je een cursusaanbod hebben dat wordt geïdentificeerd door (course_id, semester) of een koppeltabel met student_id en course_id als samengestelde primary key.

-- Defines courses table
CREATE TABLE course_offerings (
    course_id INT,
    semester VARCHAR(10),
    
    -- Composite primary key ensures a course can only be offered once per semester
    PRIMARY KEY (course_id, semester) 
);

-- Create enrollment table
CREATE TABLE enrollment (
    student_id INT,
    course_id INT,
    semester VARCHAR(10),

    -- This foreign key links enrollment records to a valid course offering
    FOREIGN KEY (course_id, semester)
        REFERENCES course_offerings(course_id, semester)
);

Een zelfverwijzende foreign key of recursieve foreign key is een foreign key die verwijst naar de primary key binnen dezelfde tabel. Dit patroon komt vaak voor in hiërarchische data zoals Werknemer → Manager. Zo kun je recursieve relaties weergeven zonder extra tabellen te maken.

In de query hieronder verwijst manager_id naar employee_id in dezelfde tabel.

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),

    -- manager_id references employee_id in the same table
    manager_id INT,
    FOREIGN KEY (manager_id) REFERENCES employees(employee_id)
);

Werken met data en integriteit waarborgen

We weten nu dat foreign keys worden gebruikt om dataintegriteit in databases te garanderen. In deze sectie bekijken we de praktische overwegingen bij het werken met foreign keys voor SQL-bewerkingen, veelvoorkomende uitdagingen en hoe je constraints beheert.

INSERT-, UPDATE- en DELETE-bewerkingen

Kijken we hoe deze bewerkingen interageren met foreign keys.

Insert-bewerkingen met foreign keys

Om een kindrecord in te voegen, moet de verwezen parentwaarde bestaan. Zo niet, dan mislukt de insert. De query hieronder zal bijvoorbeeld het record in de tabel orders invoegen als de tabel users een record bevat waar user_id 1 is.

-- users table contains user_id = 1
INSERT INTO orders (order_id, user_id, order_date)
VALUES (100, 1, '2024-02-01');

Als je probeert een record in te voegen voor een gebruiker die niet bestaat in de parenttabel, krijg je een foutmelding die een overtreding van de foreign key-constraint aangeeft.

-- user_id = 999 does NOT exist in users table
INSERT INTO orders (order_id, user_id, order_date)
VALUES (101, 999, '2024-02-01');
ERROR: insert or update on table "orders" violates foreign key constraint "fk_orders_users"

Update-bewerkingen en cascaderend gedrag

Updates kunnen betrekking hebben op de foreign key of op de primary key-tabel. Als je bijvoorbeeld de foreign key in de orders-tabel bijwerkt, slaagt dit alleen als de primary key bestaat in de parenttabel. De update hieronder slaagt bijvoorbeeld alleen als users.user_id = 5 bestaat.

-- updating foreign key value
UPDATE orders
SET user_id = 5
WHERE order_id = 100;

Uit het bovenstaande voorbeeld blijkt dat je de primary key niet kunt updaten zonder ON UPDATE CASCADE, omdat kindrijen nog steeds naar 1 verwijzen. Om dit te voorkomen, laten we eerst de bestaande foreign key-constraint vallen en maken we deze vervolgens opnieuw met ON UPDATE CASCADE ingeschakeld. Met deze methode worden de bijbehorende waarden in orders.user_id automatisch bijgewerkt.

-- Drop existing foreign key constraint
ALTER TABLE orders
DROP CONSTRAINT fk_orders_users;

-- Recreate FK with ON UPDATE CASCADE enabled
ALTER TABLE orders
ADD CONSTRAINT fk_orders_users
FOREIGN KEY (user_id)
    REFERENCES users(user_id)
    ON UPDATE CASCADE;   -- Automatically update child rows when parent key changes
UPDATE users
SET user_id = 500
WHERE user_id = 1;

Delete-bewerkingen en cascades

Als je probeert een parentrij te verwijderen zonder dat er een cascade-regel is ingesteld, zal de delete mislukken en krijg je een foutmelding. Als je een ON DELETE CASCADE-clausule toevoegt, vertel je de database om alle gerelateerde kindrijen automatisch te verwijderen wanneer het parentrecord wordt verwijderd, zodat alles consistent blijft.

In het onderstaande voorbeeld maken we een foreign key op orders.user_id die verwijst naar users.user_id. Met ON DELETE CASCADE worden alle gerelateerde orders automatisch verwijderd als een gebruiker uit de tabel users wordt verwijderd.

-- Add a new foreign key constraint to the orders table
ALTER TABLE orders
ADD CONSTRAINT fk_orders_users
FOREIGN KEY (user_id)
    REFERENCES users(user_id)
    ON DELETE CASCADE;             -- Delete orders automatically when user is deleted

Soms wil je dat de database de verwijderingen automatisch afhandelt. Je kunt dit afdwingen met ON DELETE SET NULL bij het aanmaken van de tabel. Dit zet de foreign key-kolommen in de kindtabel op NULL als het parentrecord verandert of wordt verwijderd.

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,               -- FK referencing users.user_id
    order_date DATE,
    FOREIGN KEY (user_id)
        REFERENCES users(user_id)
        ON DELETE SET NULL     -- If a user is deleted, set user_id in orders to NULL
);

Veelvoorkomende uitdagingen aanpakken

Naarmate je complexere databases ontwerpt, kom je waarschijnlijk uitdagingen tegen met foreign keys. Hieronder staan de veelvoorkomende problemen die ik met foreign keys heb ervaren en praktische oplossingen voor elk.

  • Niet-overeenkomende datatypen: Als je foreign key- en verwijzende primary key-kolommen onverenigbare datatypen hebben, kan de constraint niet worden aangemaakt. Standaardiseer daarom altijd typen over gerelateerde tabellen.

  • Circulaire afhankelijkheden: Ontstaan wanneer twee tabellen naar elkaar verwijzen, wat kan leiden tot insert-deadlocks. Herzie in dat geval het schema-ontwerp of maak de tabel eerst zonder foreign keys, laad de basisdata en gebruik daarna ALTER TABLE om de constraints toe te voegen.

  • Hangende foreign keys: Dit probleem doet zich voor wanneer de foreign key van een kind verwijst naar een niet-bestaande parenttabel. Los dit op met cascaderende acties om de data te valideren tijdens delete- en updatebewerkingen.

Wijzigingen beheren en constraints droppen

Soms wil je de foreign key-constraints aanpassen bij het herontwerpen van je databaseschema. Hieronder staan manieren om de foreign key te droppen, met kleine syntaxisverschillen tussen de verschillende SQL-dialecten.

In PostgreSQL, SQL Server en Oracle gebruiken we de instructie DROP CONSTRAINT.

-- Drop foreign key
ALTER TABLE orders
DROP CONSTRAINT fk_orders_users;

In MySQL gebruiken we echter de instructie DROP FOREIGN KEY om de foreign key te verwijderen.

-- Drop foreign key
ALTER TABLE orders
DROP FOREIGN KEY fk_orders_users;

Let erop dat het verwijderen van een foreign key-constraint ervoor zorgt dat de database de referentiële integriteit niet meer afdwingt. Na verwijdering kun je data invoegen of updaten die de relatie schendt, wat kan leiden tot data- of inconsistentie.

Prestaties en optimalisatie

Uit de bovenstaande voorbeelden hebben we gezien hoe foreign keys zorgen voor een effectief dataontwerp door dataintegriteit te behouden. Het is echter belangrijk te begrijpen hoe je foreign keys optimaliseert om de prestaties van je databases te verbeteren. Hieronder vind je tips die ik nuttig heb gevonden bij het werken met foreign keys:

Indexering en query-prestaties

Wanneer je een foreign key indexeert, kan de database tijdens insert-, update- of delete-bewerkingen snel wijzigingen valideren door overeenkomende sleutels in de parenttabel te vinden. Evenzo versnellen indexen join-bewerkingen die kind- en parenttabellen koppelen, doordat de database-engine rijen kan matchen op basis van foreign key-waarden.

Als best practice raad ik aan foreign key-kolommen expliciet te indexeren als het DBMS dit niet automatisch doet.

Query-optimalisatietechnieken

Sommige SQL-engines gebruiken het bestaan van foreign keys om join-eliminatie toe te passen, een techniek die onnodige joins identificeert en uit het query-uitvoeringsplan verwijdert. Als een query bijvoorbeeld alleen kolommen uit de kindtabel benadert maar een join op een parenttabel bevat voor filtering die door de foreign key-constraint is gegarandeerd, kan de join worden geoptimaliseerd en weggelaten.

Je kunt altijd de execution plans bekijken om te zien hoe de query-optimizer omgaat met foreign keys en joins. Deze optimalisaties en hun efficiëntie verschillen per SQL-engine, zoals PostgreSQL, MySQL en SQL Server. Inzicht in het gedrag van de optimizer van jouw specifieke database helpt je om performante queries te schrijven die optimaal profiteren van foreign key-constraints.

Je kunt bijvoorbeeld de volgende query gebruiken om het execution plan in PostgreSQL te bekijken:

-- View execution plan
EXPLAIN ANALYZE
SELECT o.order_id, u.email
FROM orders o
JOIN users u ON o.user_id = u.user_id;

Deze tabel vat samen hoe je het execution plan in verschillende databases bekijkt:

Database

Commando

PostgreSQL

EXPLAIN / EXPLAIN ANALYZE

MySQL

EXPLAIN

SQL Server

Geschat / werkelijk uitvoeringsplan

Oracle

EXPLAIN PLAN FOR

Ik aanbeveel onze Joining Data in SQL-cursus om de verschillende soorten joins in SQL te leren en hoe je met verschillende gerelateerde tabellen in de database werkt.

Geavanceerde use-cases en best practices

Naast de basisimplementatie kun je foreign keys gebruiken om een robuuste, schaalbare en onderhoudbare database-architectuur te bouwen. In deze sectie leg ik de gespecialiseerde scenario’s en ontwerpprincipes op hoog niveau uit waar je rekening mee moet houden bij het gebruik van foreign keys.

Relaties over databases of schema’s heen

Hoewel foreign keys zijn ontworpen om integriteit binnen één database of schema af te dwingen, vereisen complexere enterprise-omgevingen vaak relaties over deze grenzen heen. De tabel hieronder vat cross-schema-ondersteuning en cross-database-ondersteuning samen voor verschillende SQL-dialecten.

Database

Ondersteuning voor cross-schema

Ondersteuning voor cross-database

Beperkingen

PostgreSQL

Ja

Nee

Beperkt tot één databasecluster.

SQL Server

Ja

Ja

Cross-database-integriteit wordt beheerd door applicatielogica of triggers in plaats van native FK’s.

Oracle

Ja

Ja

Databaselinks zijn voor data-toegang; native FK-constraints worden doorgaans niet afgedwongen over links heen.

MySQL

Nee

Nee

Strikt beperkt tot tabellen binnen dezelfde database en storage-engine, zoals InnoDB.

SQLite

Nee

Nee

Beperkt tot het specifieke bestand/de databaseverbinding.

Onderhoud en auditing

Wanneer je foreign keys opzet, merk je dat ze veranderen zodra je bedrijfslogica verschuift. Overweeg de volgende manieren om de foreign keys te auditen en te onderhouden zodat ze up-to-date blijven:

  • Constraints herzien: Audit foreign key-constraints periodiek om te zorgen dat ze in lijn blijven met veranderende bedrijfsregels en schemawijzigingen.
  • Regelmatige index-audit: Controleer altijd of er indexen bestaan op alle foreign key-kolommen om optimale join- en validatieprestaties te behouden, vooral na grote data-imports of systeemupgrades.
  • Documentatie en visualisatie: Gebruik Entity-Relationship (ER)-diagrammen of schemavisualisatietools om relaties te documenteren. Deze visuele hulpmiddelen zorgen ervoor dat alle developers en analisten de relaties en de integriteitsregels die door je foreign keys worden afgedwongen, begrijpen.

Best practices voor robuust databaseontwerp

Haal het meeste uit hoe foreign keys werken door je aan de volgende richtlijnen te houden:

  • Stem je sleutels af op echte bedrijfslogica: Zorg dat primary en foreign keys echte entiteiten en hun onderlinge relaties representeren, in plaats van te vertrouwen op kunstmatige of instabiele identifiers.

  • Gebruik duidelijke, consistente namen: Kies beschrijvende constraintnamen, zoals fk_orders_user_id, zodat je schema makkelijker te onderhouden, te debuggen en samen te gebruiken is.

  • Balans tussen strengheid en flexibiliteit: Constraints moeten de datakwaliteit beschermen, maar je ontwerp moet nog steeds ruimte laten voor praktische randgevallen of validaties in de applicatielaag.

  • Vermijd circulaire relaties: Structureer je schema zo dat foreign key-afhankelijkheden geen lus vormen, want die maken inserts, updates en deletes onnodig complex.

  • Optimaliseer prestaties: Indexeer je foreign keys goed en pas cascaderende acties zorgvuldig toe, zodat je integriteit behoudt zonder je systeem te vertragen.

Conclusie

Zoals met elke vaardigheid, leer je foreign keys beheersen door te oefenen. Ik moedig je aan om te experimenteren met schemamodellering, cascaderende acties te testen en te begrijpen hoe constraints zich in praktijksituaties gedragen. Na verloop van tijd leer je hoe je strikte regels in balans brengt met de flexibiliteit die je applicaties nodig hebben, zodat je databases maakt die zowel veerkrachtig als aanpasbaar zijn wanneer de eisen evolueren.

Nu je begrijpt hoe je foreign keys gebruikt in databaseontwerp, raad ik je aan ons carrièrepad Associate Data Engineer in SQL te proberen om de basis van data engineering en datawarehousing te leren. Als je je databasebeheervaardigheden voor big data wilt aanscherpen, raad ik ten slotte onze cursus Introduction to Data Modeling in Snowflake aan om meer te leren over dimensioneel modelleren.

Allan Ouko

Auteur

Allan Ouko

\n
\n
\n
\n
Technical writer voor data science met praktische ervaring in data-analyse, business intelligence en data science. Ik schrijf praktische, op de industrie gerichte content over SQL, Python, Power BI, Databricks en data engineering, gebaseerd op analytisch werk in de echte wereld. Mijn schrijfwerk slaat een brug tussen technische diepgang en zakelijke impact, en helpt professionals om data om te zetten in onderbouwde beslissingen.
\n
\n
\n
\n

Veelgestelde vragen

Wat is het verschil tussen een primary key en een foreign key?

Een primary key identificeert records uniek in de eigen tabel, terwijl een foreign key verwijst naar een primary key in een andere tabel om een relatie vast te leggen.

Kan een tabel meerdere foreign keys hebben?

Ja, een tabel kan meerdere foreign keys hebben, die elk naar verschillende parenttabellen verwijzen.

Moet een tabel unieke foreign key-kolommen hebben?

Nee, foreign key-kolommen mogen dubbele waarden bevatten, maar moeten wel naar geldige rijen in de parenttabel verwijzen.

Wat gebeurt er als je een record verwijdert waarnaar een foreign key verwijst?

Afhankelijk van de constraints kan de database verwijderen beperken, gerelateerde rijen cascaderend verwijderen of foreign key-waarden op NULL zetten.

Zijn foreign keys verplicht in relationele databases?

Hoewel ze niet verplicht zijn, zijn foreign keys essentieel om relationele integriteit en een betrouwbaar databaseontwerp af te dwingen.

Onderwerpen

Gerelateerd