Welke eigenschappen moet een primaire sleutel hebben? SQL – Primaire sleutel. Eén op veel relatie

Primaire sleutel is een veld in een tabel dat elke rij/record in een databasetabel op unieke wijze identificeert. Primaire sleutels moet unieke waarden bevatten. De primaire sleutelkolom mag geen waarde hebben.

Een tabel kan slechts één primaire sleutel hebben, die uit een of meer velden kan bestaan. Wanneer meerdere velden als primaire sleutel worden gebruikt, worden deze een samengestelde sleutel genoemd.

Als voor een tabel een primaire sleutel is gedefinieerd voor een of meer velden, kunt u niet twee records hebben met dezelfde waarde voor die velden.

Opmerking– U kunt deze concepten gebruiken bij het maken van databasetabellen.

Een primaire sleutel maken

Hier is de syntaxis om het ID-attribuut te definiëren als de primaire sleutel in de tabel Klanten.

MAAK TABEL KLANTEN (ID INT NIET NULL, NAAM VARCHAR (20) NIET NULL, LEEFTIJD INT NIET NULL, ADRES KARAKTER (25), SALARIS DECIMAAL (18, 2), PRIMAIRE SLEUTEL (ID));

Om een ​​primaire sleutelbeperking te maken voor de kolom 'ID' wanneer de tabel CUSTOMERS al bestaat, gebruikt u het volgende SQL-syntaxis:

WIJZIG TAFEL KLANTEN VOEG PRIMAIRE SLEUTEL (ID) TOE;

Opmerking

Als u de instructie ALTER TABLE gebruikt om een ​​primaire sleutel toe te voegen, moeten de primaire sleutelkolom(men) al zijn gedeclareerd als bevattende geen NULL-waarden (als de tabel eerst is gemaakt).

Gebruik de onderstaande SQL-syntaxis om een ​​primaire sleutel voor meerdere kolommen te definiëren:

MAAK TABEL KLANTEN (ID INT NIET NULL, NAAM VARCHAR (20) NIET NULL, LEEFTIJD INT NIET NULL, ADRES KARAKTER (25), SALARIS DECIMAAL (18, 2), PRIMAIRE SLEUTEL (ID, NAAM));

Als u een beperking voor de primaire sleutel wilt maken voor de kolommen ID en NAME terwijl de tabel CUSTOMERS al bestaat, gebruikt u de volgende SQL-syntaxis.

WIJZIG TABEL KLANTEN TOEVOEGEN CONSTRAINT PK_CUSTID PRIMAIRE SLEUTEL (ID, NAAM);

Een primaire sleutel verwijderen

U kunt primaire sleutelbeperkingen uit een tabel verwijderen met behulp van de onderstaande syntaxis.

WIJZIGEN TAFEL KLANTEN LATEN PRIMAIRE SLEUTEL;

Dit elektronische opslag informatie toegankelijk via een of meer computers. Doorgaans worden databases gemaakt om gegevens op te slaan en te openen die informatie over sommigen bevatten vakgebied, dat wil zeggen een gebied van menselijke activiteit of een deel van de echte wereld.

DBMS is software om een ​​database aan te maken, te vullen, bij te werken en te verwijderen.

De informatie-eenheid die in de database is opgeslagen, is een tabel. Elke tabel is een verzameling rijen en kolommen, waarbij de rijen overeenkomen met een exemplaar van een object, een specifieke gebeurtenis of fenomeen, en de kolommen overeenkomen met de attributen (kenmerken, kenmerken, parameters) van het object, de gebeurtenis of het fenomeen. Elke regel bevat informatie over een specifieke gebeurtenis.

In databasetermen worden de kolommen van een tabel velden genoemd en de rijen records.

Er kunnen relaties bestaan ​​tussen individuele databasetabellen, dat wil zeggen dat informatie uit de vorige tabel kan worden toegevoegd aan een andere. Databases die relaties hebben tussen individuele tabellen worden relationeel genoemd. Dezelfde tabel kan de hoofdtabel zijn in relatie tot de ene databasetabel en een onderliggende tabel in relatie tot een andere.

Tabellen die door relaties zijn verbonden, werken samen volgens het master-slave-principe. Dezelfde tabel kan de hoofdtabel van de ene databasetabel zijn en een onderliggende tabel van een andere.

Voorwerp is iets dat bestaat en te onderscheiden is en een reeks eigenschappen bezit. Het verschil tussen het ene object en het andere object wordt bepaald door specifieke eigenschapswaarden.

Essence – weerspiegeling van een object in het geheugen van een persoon of computer.

Attribuut – de specifieke waarde van een van de eigendommen van de entiteit.

Veld is een enkel element van een record waarin een specifieke attribuutwaarde is opgeslagen.

Communicatie veld Dit is het veld waarmee twee tabellen met elkaar verbonden zijn.

Primaire en secundaire sleutels

Elke databasetabel kan een primaire sleutel hebben: dit is een veld of een verzameling velden die een record op unieke wijze identificeert.

De primaire sleutelwaarde in een databasetabel moet uniek zijn, dat wil zeggen dat er niet twee of meer records in de tabel mogen voorkomen met dezelfde primaire sleutelwaarde.

Primaire sleutels maken het eenvoudiger om relaties tussen tabellen tot stand te brengen. Omdat de primaire sleutel uniek moet zijn, kunnen niet alle velden in de tabel ervoor worden gebruikt.

Als de tabel geen velden bevat waarvan de waarden uniek zijn, wordt er voor het maken van een primaire sleutel meestal een extra numeriek veld in geïntroduceerd, waarvan het DBMS naar eigen goeddunken over de waarden kan beschikken.

Secundaire sleutels worden ingesteld door velden die vaak worden gebruikt bij het zoeken of sorteren van gegevens: indexen die op secundaire sleutels zijn gebouwd, helpen het systeem veel sneller de vereiste waarden te vinden die in de overeenkomstige velden zijn opgeslagen.

In tegenstelling tot primaire sleutels kunnen velden voor secundaire sleutels niet-unieke informatie bevatten.

Relationele relaties tussen tabellen

Eén-op-één. Er is sprake van een één-op-één-relatie wanneer één record in een bovenliggende tabel overeenkomt met één record in een onderliggende tabel.

Deze relatie komt veel minder vaak voor dan de een-op-veel-relatie die wordt gebruikt als u niet wilt dat de databasetabel wordt uitgebreid met een secundaire tabel. Eén-op-één communicatie resulteert in leesbaarheid gerelateerde informatie in verschillende tabellen moet u meerdere leesbewerkingen uitvoeren, waardoor het verkrijgen van de benodigde informatie langzamer gaat. Bovendien kunnen databases die tabellen bevatten met een één-op-één-relatie niet als volledig genormaliseerd worden beschouwd.

Net als een één-op-veel-relatie kan een één-op-één-relatie zowel hard als zacht zijn.

InterBase kan worden gebruikt de volgende typen beperkingen:
  • PRIMAIRE SLEUTEL - de primaire sleutel van de tabel.
  • UNIEK - unieke tafelsleutel.
  • BUITENLANDSE SLEUTEL- externe sleutel, biedt een link naar een andere tabel en garandeert referentiële integriteit tussen de ouder en kindertafels.

Een opmerking over de terminologie

Als je net als de auteur bent deze cursus omdat je graag antwoorden zoekt op een vraag die je volledig interesseert, in verschillende werken van verschillende auteurs, dan kun je niet anders dan enige verwarring in de definities opmerken hoofd (meester) -> ondergeschikt (detail) tafels. Bedenk dat de hoofdtabel vaak de bovenliggende tabel wordt genoemd, en de ondergeschikte tabel vaak de onderliggende tabel.

Dit komt waarschijnlijk door de manier waarop deze definities worden geïnterpreteerd in DBMS'en op lokale en SQL-servers.

In lokale DBMS'en is de hoofdtabel degene die de hoofdgegevens bevat, en bevat de ondergeschikte tabel aanvullende gegevens. Laten we bijvoorbeeld drie gerelateerde tabellen nemen. De eerste bevat gegevens over de verkoop, de tweede over producten en de derde over klanten:


Rijst. 18.1.

Hier wordt de hoofdinformatie opgeslagen in de verkooptabel en is dit dus de hoofdtabel (bovenliggende tabel). Aanvullende informatie wordt opgeslagen in de product- en klantentabellen, wat betekent dat het onderliggende tabellen zijn. Dit is begrijpelijk: één dochter kan geen twee biologische moeders hebben, maar één moeder is heel goed in staat twee dochters ter wereld te brengen.

Maar op SQL-databaseservers is er een andere definitie van relaties: wanneer een veld in een tabel verwijst naar een veld in een andere tabel, heet dit vreemde sleutel. En het veld waarnaar het verwijst heet ouder of primaire sleutel. Een tabel die een refererende sleutel heeft (een link naar een record in een andere tabel) wordt vaak een kind genoemd, en een tabel met oudersleutel- ouderlijk. Ook bij de definitie van relaties zeggen ze dat een ouder slechts één uniek record kan hebben, waarnaar door meerdere records kan worden verwezen kindertafel.

In het bovenstaande voorbeeld heeft de verkooptabel dus twee externe sleutels: de product-ID en de klant-ID. En beide tabellen aan de rechterkant van de figuur hebben dat ook oudersleutel"Identificatie". Omdat dezelfde klant of hetzelfde product herhaaldelijk in de verkooptabel kan voorkomen, blijkt dat beide tabellen aan de rechterkant van de figuur ouders zijn en de tabel aan de linkerkant een kind. Omdat we nu studeren InterBase-SQL databaseserver, zullen we ons in volgende lezingen door deze definities laten leiden. Om onze hersenen niet nog verder te pijnigen over deze verwarring, moeten we het meteen eens worden: kindertafel heeft een externe sleutel (FOREIGN KEY) naar een andere tafel.

PRIMAIRE SLEUTEL

PRIMAIRE SLEUTEL- primaire sleutel is een van de belangrijkste soorten beperkingen in een database. De primaire sleutel is ontworpen om een ​​record in een tabel op unieke wijze te identificeren en moet uniek zijn. Primaire sleutels PRIMARY KEY bevinden zich in tabellen, die gewoonlijk parent (Parent) worden genoemd. Verwar de primaire sleutel niet met primaire indexen lokale databases gegevens, is de primaire sleutel geen index, maar een beperking. Bij het maken van een primaire sleutel InterBase automatisch voor hem aangemaakt unieke index. Als we echter creëren unieke index, dit zal niet creëren primaire sleutelbeperkingen. Een tabel kan slechts één primaire sleutel hebben: PRIMARY KEY.

Stel dat u een tabel heeft met een lijst met werknemers. Het veld Achternaam kan bevatten dezelfde waarden(naamgenoten), dus deze kan niet als primaire sleutel worden gebruikt. Het komt zelden voor, maar er zijn naamgenoten die bovendien dezelfde naam hebben. Nog zeldzamer zijn er volledige naamgenoten, dus zelfs alle drie de velden “Achternaam” + “Voornaam” + “Patroniem” kunnen de uniciteit van de record niet garanderen en kunnen ook niet de primaire sleutel zijn. IN in dit geval De oplossing is, net als voorheen, om een ​​identificatieveld toe te voegen dat bevat serienummer van deze persoon. Dergelijke velden worden meestal automatisch verhoogd (we zullen het in de volgende lezingen hebben over het organiseren van automatisch toenemende velden). Dus,

Primaire sleutel is een of meer velden in een tabel, waarvan de combinatie voor elk record uniek is.

Als de primaire sleutel één enkele kolom bevat (zoals meestal het geval is), wordt de PRIMARY KEY-specificatie gebruikt wanneer kolomdefinitie:

MAAK TABEL Prim_1(Stolbec1 INT NIET NULL PRIMAIRE SLEUTEL, Stolbec2 VARCHAR(50))

Als de primaire sleutel op meerdere kolommen is gebouwd, wordt de specificatie geplaatst nadat alle velden zijn gedefinieerd:

MAAK TABEL Prim_2(Stolbec1 INT NOT NULL, Stolbec2 VARCHAR(50) NOT NULL, PRIMAIRE SLEUTEL (Stolbec1, Stolbec2))

Zoals uit de voorbeelden blijkt, is dit de primaire sleutel moet een NOT NULL-kolom(men)beperking hebben.

UNIEK

UNIEK- unieke sleutel. De UNIEKE specificatie geeft aan dat alle waarden van dit veld moet uniek zijn, daarom kunnen dergelijke velden ook geen waarden bevatten NUL. We kunnen zeggen dat de unieke sleutel UNIEK is alternatieve optie primaire sleutel, maar er zijn verschillen. Het belangrijkste verschil is dat er slechts één primaire sleutel mag zijn, terwijl er meerdere unieke sleutels kunnen zijn. Bovendien kan een UNIEKE beperking niet worden gebouwd op dezelfde set kolommen die is gebruikt voor een PRIMARY KEY of een andere UNIEKE beperking. Unieke sleutels worden, net als primaire sleutels, aangetroffen in tabellen die bovenliggende tabellen zijn van andere tabellen.

Kolom gedeclareerd met UNIEKE beperking kan, net als een primaire sleutel, worden gebruikt om de referentiële integriteit tussen ouder- en kindertafels. In dit geval de externe sleutel kindertafel verwijst naar dit(e) veld(en). Net als bij een primaire sleutel geldt dat wanneer er een unieke sleutel wordt gemaakt, a unieke index. Maar niet andersom. Een voorbeeld van het maken van een tabel met één primaire en twee unieke sleutels:

MAAK TABEL Prim_3(Stolbec1 INT NOT NULL PRIMARY KEY, Stolbec2 VARCHAR(50) NOT NULL UNIQUE, Stolbec3 FLOAT NOT NULL UNIQUE)

BUITENLANDSE SLEUTEL

BUITENLANDSE SLEUTEL- vreemde sleutel. Dit is erg krachtig hulpmiddel om de referentiële integriteit tussen tabellen te garanderen, waardoor niet alleen de beschikbaarheid kan worden gecontroleerd juiste koppelingen, maar beheer ze ook automatisch. Externe sleutels bevinden zich in tabellen die onderliggende (onderliggende) tabellen zijn van andere tabellen. Referentiële integriteit wordt precies geleverd door een externe sleutel die verwijst naar de primaire of

Laatste update: 07/02/2017

Databases kunnen tabellen bevatten die met elkaar zijn verbonden door verschillende koppelingen. Een relatie vertegenwoordigt een associatie tussen entiteiten van verschillende typen.

Wanneer u een relatie selecteert, selecteert u de hoofd- of bovenliggende tabel (primaire sleuteltabel / hoofdtabel) en de afhankelijke onderliggende tabel ( vreemde sleutel tafel/kindertafel). De onderliggende tabel is afhankelijk van de bovenliggende tabel.

Externe sleutels worden gebruikt om de communicatie te organiseren. Een refererende sleutel vertegenwoordigt een of meer kolommen uit de ene tabel en is ook een potentiële sleutel uit een andere tabel. De refererende sleutel hoeft niet overeen te komen met de primaire sleutel uit de hoofdtabel. Hoewel een externe sleutel uit een afhankelijke tabel in de regel verwijst naar een primaire sleutel uit de hoofdtabel.

Relaties tussen tabellen zijn van de volgende typen:

    Eén op één

    Eén voor velen

    veel voor veel(Veel voor veel)

Eén op één communicatie

Dit type verbinding wordt niet vaak gevonden. In dit geval kan een object van de ene entiteit slechts aan één object van een andere entiteit worden gekoppeld. Op sommige sites kan een gebruiker bijvoorbeeld slechts één blog hebben. Dat wil zeggen, er ontstaat een relatie: één gebruiker - één blog.

Bij dit type verbinding moet er vaak een worden gesplitst grote tafel voor meerdere kleintjes. De primaire bovenliggende tabel blijft in dit geval veelgebruikte gegevens bevatten, terwijl de onderliggende afhankelijke tabel doorgaans gegevens opslaat die minder vaak worden gebruikt.

In dit opzicht is de primaire sleutel van de afhankelijke tabel tegelijkertijd een externe sleutel die verwijst naar de primaire sleutel van de hoofdtabel.

De tabel Gebruikers vertegenwoordigt bijvoorbeeld gebruikers en heeft de volgende kolommen:

    UserId(id, primaire sleutel)

    Naam (gebruikersnaam)

En de tabel Blogs vertegenwoordigt gebruikersblogs en heeft de volgende kolommen:

    BlogId (identifier, primaire en externe sleutel)

    Naam (blognaam)

In dit geval slaat de BlogId-kolom de waarde op uit de UserId-kolom uit de gebruikerstabel. Dat wil zeggen dat de BlogId-kolom zowel als primaire als als refererende sleutel zal fungeren.

Eén op veel relatie

Dit is het meest voorkomende type verbinding. Bij dit type relatie zijn meerdere rijen uit een onderliggende tabel afhankelijk van één rij in de bovenliggende tabel. Eén blog kan bijvoorbeeld meerdere artikelen bevatten. In dit geval is de tabel met blogs het bovenliggende item en de tabel met artikelen het onderliggende item. Dat wil zeggen, één blog - veel artikelen. Of nog een voorbeeld: meerdere voetballers kunnen in een voetbalteam spelen. En tegelijkertijd kan één voetballer maar in één team tegelijk spelen. Dat wil zeggen, één team - veel spelers.

Laten we bijvoorbeeld een tabel hebben met de naam Artikelen, die blogartikelen vertegenwoordigt en de volgende kolommen heeft:

    ArticleId(id, primaire sleutel)

    BlogId (vreemde sleutel)

    Titel (artikeltitel)

    Tekst (artikeltekst)

In dit geval slaat de BlogId-kolom uit de artikelentabel de waarde op uit de BlogId-kolom uit de blogs-tabel.

Veel-op-veel-relatie

Met dit type relatie kan één rij uit tabel A worden gekoppeld aan veel rijen uit tabel B. Op zijn beurt kan één rij uit tabel B worden gekoppeld aan veel rijen uit tabel A. Typisch voorbeeld- studenten en cursussen: één student kan meerdere cursussen volgen en dus kunnen meerdere studenten zich voor één cursus inschrijven.

Een ander voorbeeld zijn artikelen en tags: voor één artikel kunnen meerdere tags worden gedefinieerd, en voor meerdere artikelen kan één tag worden gedefinieerd.

Maar binnen SQL-server op databaseniveau kunnen we geen directe veel-op-veel-relatie tussen twee tabellen tot stand brengen. Dit gebeurt via een aanvullende stagingtabel. Soms vertegenwoordigen de gegevens uit deze faseringstabel een afzonderlijke entiteit.

Laat er bijvoorbeeld in het geval van artikelen en tags een tabel Tags zijn met twee kolommen:

    TagId(identificator, primaire sleutel)

    Tekst (tagtekst)

Laat er ook een tussentabel ArticleTags zijn met de volgende velden:

    TagId (identifier, primaire en externe sleutel)

    ArticleIdId (identifier, primaire en externe sleutel)

Technisch gezien krijgen we twee één-op-veel-relaties. De TagId-kolom uit de ArticleTags-tabel verwijst naar de TagId-kolom uit de Tags-tabel. En de ArticleId-kolom uit de ArticleTags-tabel verwijst naar de ArticleId-kolom uit de Articles-tabel. Dat wil zeggen dat de kolommen TagId en ArticleId in de tabel ArticleTags een samengestelde primaire sleutel vertegenwoordigen en ook externe sleutels zijn voor de relatie met de tabellen Articles en Tags.

Referentiële gegevensintegriteit

Bij het wijzigen van de primaire en vreemde sleutels het volgende aspect moet in acht worden genomen: referentiële gegevensintegriteit(referentiële integriteit). Het basisidee is om twee tabellen in een database te gebruiken waarin dezelfde gegevens worden opgeslagen om de consistentie te behouden. Gegevensintegriteit vertegenwoordigt correct opgebouwde relaties tussen tabellen met correcte koppelingen daartussen. In welke gevallen kan de gegevensintegriteit worden geschonden:

    Anomalie bij verwijderen(anomalie bij verwijderen). Treedt op wanneer een rij uit de hoofdtabel wordt verwijderd. In dit geval blijft de refererende sleutel uit de afhankelijke tabel verwijzen verwijderde lijn van de hoofdtabel

    Anomalie bij het inbrengen(insertie-anomalie). Treedt op wanneer een rij in een afhankelijke tabel wordt ingevoegd. In dit geval komt de refererende sleutel uit de afhankelijke tabel niet overeen met de primaire sleutel van een van de rijen uit de hoofdtabel.

    Afwijkingen bijwerken(update anomalie). Bij een dergelijke anomalie kunnen meerdere rijen van dezelfde tabel gegevens bevatten die tot hetzelfde object behoren. Wanneer u gegevens in één rij wijzigt, kan dit conflicteren met gegevens in een andere rij.

Anomalie bij verwijderen

Om een ​​verwijderingsafwijking op te lossen, moet u een van de volgende twee beperkingen instellen voor een externe sleutel:

    Als een rij uit een afhankelijke tabel noodzakelijkerwijs een rij uit de hoofdtabel vereist, wordt een trapsgewijze verwijdering ingesteld voor de refererende sleutel. Dat wil zeggen dat wanneer een rij uit de hoofdtabel wordt verwijderd, de verwijdering plaatsvindt gerelateerde tekenreeks(rijen) uit de afhankelijke tabel.

    Als een rij uit een afhankelijke tabel geen relatie toestaat met een rij uit de hoofdtabel (dat wil zeggen: een dergelijke relatie is optioneel), dan wordt de refererende sleutel ingesteld op NULL wanneer de gerelateerde rij uit de hoofdtabel wordt verwijderd. De kolom met externe sleutels moet nulwaarden hebben.

Anomalie bij het inbrengen

Om een ​​invoegafwijking op te lossen bij het toevoegen van gegevens aan een afhankelijke tabel, moet de kolom die de refererende sleutel vertegenwoordigt nulwaarden hebben. En dus, als het toegevoegde object geen verbinding heeft met de hoofdtabel, zal de kolom met externe sleutels een NULL-waarde bevatten.

Afwijkingen bijwerken

Om het probleem van update-anomalie op te lossen, wordt normalisatie gebruikt, wat later zal worden besproken.

Een primaire sleutel is een uniek kenmerk voor elk record binnen een tabel. Access ondersteunt twee soorten primaire sleutels: eenvoudig en samengesteld.

In de rol eenvoudige sleutel kan een van de bestaande velden van de tabel zijn, als dit veld geen lege of dubbele waarden bevat. Voorbeelden van dergelijke velden zijn voertuignummers, inventarisnummers en identificatiecodes. Een samengestelde sleutel is opgebouwd als een combinatie van twee of meer gegevenselementen. Voor de tabel Werknemers zou u bijvoorbeeld theoretisch een combinatie van twee velden, Achternaam en Voornaam, als primaire sleutel kunnen gebruiken. Het is echter goed mogelijk dat het bedrijf een andere medewerker heeft met dezelfde voor- en achternaam als iemand die al in dienst is.

Het is duidelijk dat de velden die claimen de primaire sleutel te zijn, onderworpen zijn aan vrij strenge eisen. Daarom is het gebruikelijk om een ​​speciaal identificatieveld aan te maken dat als sleutel fungeert (bijvoorbeeld Klantcode, Bestelcode). Met de toevoeging van elk nieuwe invoer In dit veld van de tabel wordt een speciale waarde (meestal numeriek) ingevoerd die de record uniek identificeert. IN Toegang tot applicatie Een dergelijke nummering kan worden georganiseerd met behulp van het gegevenstype Teller, dat aan elk nieuw record een eigen nummer toekent en een reeks getallen genereert in stappen van 1 (of willekeurig).

Er zijn basisregels die worden geaccepteerd voor sleutels in Access:

    Voor het gemak wordt het sleutelveld meestal als eerste vermeld in de tabelstructuur;

    Als een tabel een primaire sleutel heeft, Toegangsprogramma blokkeert automatisch dubbele vermeldingen in dit veld, of Nulwaarden(leeg);

    Access sorteert tabelrecords automatisch op primaire sleutel;

    Het primaire sleutelveld is een index die het sorteren en doorzoeken van records versnelt.

Volg deze stappen om de primaire sleutel voor een tabel in te stellen en het maken ervan in de ontwerpweergave te voltooien:

    Selecteer in de ontwerpmodus het veld dat als primaire sleutel zal fungeren;

    Klik op de knop Sleutelveld op de werkbalk Tabelontwerper of selecteer de opdracht Bewerken – Sleutelveld in het hoofdmenu (links verschijnt een sleutelsymbool naast de naam van het geselecteerde veld);

    Nadat u het sleutelveld hebt opgegeven, moet de tabel worden opgeslagen. Hiervoor klikt u op de knop Opslaan op de werkbalk van de tabelontwerper en voert u in het geopende venster de naam van de tabel in en klikt u op de knop OK.

Als er geen primaire sleutel is gedefinieerd, verschijnt er een waarschuwing wanneer u de ontwerpmodus afsluit, en wordt u in Access gevraagd een sleutelveld te maken voordat u de tabel sluit.

17. Soorten verbindingen en hun implementatie. Referentiële integriteit en de handhaving ervan.

In een relationele database vermijden relaties gegevensredundantie. Als u bijvoorbeeld een database maakt met informatie over boeken, krijgt u mogelijk een tabel met de naam 'Boeken' waarin parameters voor elk boek zijn opgeslagen, zoals de titel, publicatiedatum en uitgever. Daarnaast is er ook aanvullende informatie informatie over de uitgever die u mogelijk wilt opslaan, zoals telefoonnummer, adres en postcode. Bewaar je ze in een tabel met boeken, dan wordt het telefoonnummer van de uitgever herhaald voor elk door hem uitgegeven boek.

Een correctere optie is om informatie over uitgevers in een aparte tabel 'Uitgevers' te plaatsen. In dit geval bevat de tabel 'Boeken' koppelingen naar records in de tabel 'Uitgevers'.

Om de synchronisatie te behouden, moet u de gegevensintegriteit tussen de tabellen Boeken en Uitgevers garanderen. Met gegevensintegriteitsrelaties kunt u ervoor zorgen dat de gegevens in de ene tabel overeenkomen met de gegevens in een andere tabel. Elk boek in de tabel Boeken is bijvoorbeeld gekoppeld aan een specifieke uitgever in de tabel Uitgevers. Het is niet mogelijk om een ​​boek toe te voegen aan een tabel van een uitgever die niet in de database staat.

Soorten relaties tussen tabellen

Communicatie vindt plaats door gegevens te vergelijken belangrijkste kolommen; meestal zijn dit kolommen die in beide tabellen voorkomen dezelfde namen. In de meeste gevallen wordt de primaire sleutel van een tabel, die voor elke rij een unieke identificatie bevat, gekoppeld aan de externe sleutel van een andere tabel. U kunt bijvoorbeeld verkoopvolumes koppelen aan elke titel die u verkoopt door een kolom Titel_ID te maken in de tabel Boeken (primaire sleutel) en een kolom Titel_ID in de tabel Verkoop (externe sleutel).

Er zijn drie soorten relaties tussen tabellen. Het type relatie dat wordt gemaakt, is afhankelijk van de manier waarop de gerelateerde kolommen zijn gedefinieerd.

Eén-op-veel-relaties

Een-op-veel-relatie is het meest voorkomende type relatie. Met een dergelijke relatie kan elke rij van tabel A overeenkomen met veel rijen van tabel B, maar elke rij van tabel B kan slechts overeenkomen met één rij van tabel A. Er wordt bijvoorbeeld een één-op-veel-relatie tot stand gebracht tussen de tabellen. “Uitgevers” en “Boeken”: elk van de uitgevers kan veel boeken publiceren, maar elk boek wordt door slechts één uitgever uitgegeven.

Er wordt een één-op-veel-relatie gemaakt wanneer slechts één van de gekoppelde kolommen een unieke beperking heeft of een primaire sleutel is.

In Microsoft Access wordt de kant van een één-op-veel-relatie waarmee een primaire sleutel correspondeert, weergegeven door een sleutelsymbool. De kant van de relatie waarmee de refererende sleutel correspondeert, wordt aangegeven met een oneindigheidssymbool.

Veel-op-veel-relaties

Bij het tot stand brengen van een veel-op-veel-relatie kan elke rij in tabel A overeenkomen met veel rijen in tabel B en omgekeerd. Een dergelijke relatie wordt tot stand gebracht met behulp van een derde tabel, een zogenaamde verbindingstabel, waarvan de primaire sleutel bestaat uit externe sleutels die zijn gekoppeld aan tabellen A en B. Er wordt bijvoorbeeld een veel-op-veel-relatie tot stand gebracht tussen de tabellen 'Auteurs' en 'Boeken'. ”, gedefinieerd met behulp van het relatietype 'één op veel' tussen elk van deze tabellen en de tabel 'Auteurs van boeken'. De primaire sleutel van de tabel BookAuthors is een combinatie van de kolommen "Author_ID" (de primaire sleutel van de auteurstabel) en "Book_ID" (de primaire sleutel van de titeltabel).

Eén-op-één verbindingen

Bij het tot stand brengen van een één-op-één-relatie kan elke rij van tabel A slechts overeenkomen met één rij van tabel B en omgekeerd. Er wordt een één-op-één-relatie gemaakt wanneer beide gerelateerde kolommen primaire sleutels zijn of unieke beperkingen hebben.

Dit type relatie wordt zelden gebruikt omdat in deze situatie de gegevens die worden gekoppeld meestal in één tabel kunnen worden opgeslagen. In de volgende gevallen kunt u een één-op-één-relatie gebruiken:

Om een ​​tabel te splitsen die te veel kolommen bevat.

Om een ​​deel van een tabel te isoleren om veiligheidsredenen.

Om gebruiksgegevens voor de korte termijn op te slaan die het gemakkelijkst kunnen worden verwijderd door de tabel leeg te maken.

Om gegevens op te slaan die alleen relevant zijn voor een subset van de hoofdtabel.

In Microsoft Access wordt de kant van een één-op-één-relatie waarmee een primaire sleutel correspondeert, aangegeven met een sleutelsymbool. De partij waarmee de externe sleutel correspondeert, wordt tevens aangegeven met een sleutelsymbool.

Relaties tussen tabellen creëren

Bij het leggen van een relatie tussen tabellen hoeven de gerelateerde velden niet dezelfde naam te hebben. Ze moeten echter hetzelfde gegevenstype hebben, tenzij het veld dat de primaire sleutel is van het type Counter is. Een Count-veld kan alleen aan een Numeriek veld worden gekoppeld als de eigenschap FieldSize van elk veld op dezelfde waarde is ingesteld. U kunt bijvoorbeeld kolommen van het type Counter en Numeric koppelen als de eigenschap FieldSize van elk is ingesteld op Long Integer. Zelfs als beide kolommen die worden gekoppeld van het type Numeriek zijn, moet de waarde van de eigenschap FieldSize voor beide velden hetzelfde zijn.