[pgSQL] Foreign key probleempje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior PHP developer

Functie Momenteel zijn ze op zoek naar versterking in het development team. Het IT-team bestaat uit 6 ontwikkelaars waarvan 5 echt senior. Heel veel ervaring om je heen dus om van te leren! Als medior PHP developer ga jij je bezighouden met het ontwikkelen van integraties tussen hun platform en API’s van partners (bijvoorbeeld Indeed). Dit zijn veelal korte projecten, wat een leuke uitdaging met zich meebrengt om iedere keer weer tot de juiste oplossing te komen, en deze uit te werken. Het doel hierin is altijd om een integratie één keer heel goed op te zetten zodat deze een

Bekijk vacature »

Dynamics NAV / 365 BC Developer

Dit ga je doen Je dagelijkse werkzaamheden bestaan uit: Het (door)ontwikkelen van het Dynamics 365 Business Central platform; Het ontwikkelen van nieuwe functionaliteiten op basis van klant specifieke wensen; Het meedenken over architectuur vraagstukken; Het voortouw nemen in innovatieve projecten; Virtueel samenwerken met collega's uit andere landen. Hier ga je werken Als Dynamics Business Central Developer kom je te werken bij een organisatie in regio Ede die gespecialiseerd is in het ontwikkelen en implementeren van software. Zo hebben ze een eigen ontwikkelde applicatie in de markt gezet voor de agrarische sector die internationaal zeer succesvol is en waar grote vraag

Bekijk vacature »

Senior Python (Django) developer / Utrecht of Remo

Functie Momenteel zijn ze vanwege groei op zoek naar een nieuwe collega. Als Senior Python developer bij deze organisatie zul je samen met je team op een Agile-gebaseerde aanpak werken aan hun software. Binnen het development team is er veel zelfstandigheid, los van de stand-up (10:00 uur) en zo nu en dan pair-programming sessies. Je kunt hier samenwerken met één van de core contributors van het Django framework en zult naast het meewerken aan hun applicaties ook blijven bijdragen en deze communitiy. De focus ligt echt op Python webdevelopment (Django), maar hiernaast is ervaring met front-end/mobile development erg mooi meegenomen.

Bekijk vacature »

Senior Java developer (backend)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

.Net Developer

DO - Be passionate, work hard and make it happen! Als .NET Developer maak je deel uit van een enthousiast en gedreven development team, bestaande uit 4 personen. Jij bent de Developer met ervaring die daarbij ook de collega’s weet mee te nemen op een innovatieve reis van nieuwe technologie. De werkzaamheden waar we jouw kennis en ervaring graag voor inzetten zijn met name: Het begeleiden van de transitie naar een volledig Azure landschap met componenten zoals Function Apps, ServiceBus en CosmosDB en de projecten die hieruit voortvloeien Het vormgeven van de integratie architectuur binnen de Microservices omgeving Het bewaken

Bekijk vacature »

PHP functie bij uitstekende werkgever in de regio

Bedrijfsomschrijving Voor dit leuke en moderne bedrijf zoek ik een gemotiveerde PHP ontwikkelaar die toe is aan een nieuwe uitdaging. De organisatie heeft een eigen software systeem waarmee ze klanten die door heel het land zitten van informatie kunnen voorzien. Ze hebben ongeveer 1000 klanten die ze bedienen en die hebben zelf weer een zeer groot aantal dagelijkse gebruikers. Ze hebben hier dus te maken met grote hoeveelheden data die realtime beschikbaar moet zijn. Het systeem is goed schaalbaar vanwege de sterke groei die de organisatie al enkele jaren doormaakt. Ze werken er Agile en de collega's delen graag kennis

Bekijk vacature »

Full-stack Developer

Vacature .Net Full-stack Web Developer Voor onze opdrachtgever Eclipse zijn wij zoek naar een .Net developer. Eclipse is een jonge snelgroeiende en dynamische ICT-organisatie gevestigd in ’s-Hertogenbosch. Haar missie: het bieden van intelligente multimediale marketingcommunicatie op maat om bedrijven in de schijnwerpers te zetten. Klinkt leuk toch? Vinden wij ook! Kom jij het team van Eclipse versterken als .Net Full-stack Web Developer? Functieomschrijving Op dit moment werken er ongeveer 20 mensen heel hard samen aan het ontwikkelen van communicatieoplossingen voor hun klanten. In deze oplossingen staat het verrijken en verwerken van klantdata uit verschillende omgevingen via workflow gestuurde processen centraal.

Bekijk vacature »

Ontwikkelaar / Identity & Access Management

Dit ga je doen Als Identity & Access Management Ontwikkelaar zorg jij er voor dat studenten, medewerkers en docenten de juiste benodigdheden op het juiste moment kunnen gebruiken; Het juist opslaan van onderzoeksdata en het openbaar beschikbaar stellen van publicaties (Open Access); Studenten, collega's en wetenschappers ondersteunen; Agile en Scrum werken; Technisch Applicatiebeheer; Ontwikkelen in One Identity Manager en VB.NET. Hier ga je werken Als Ontwikkelaar kom je terecht in een hecht team die zich richt op wetenschappelijke informatie en ICT. Jij bent degene die er voor zorgt dat alle informatie, uit diverse onderzoeken, bij de juiste personen terecht komt.

Bekijk vacature »

Junior Developer GO

Functie Het development team is klein en compact. Dit is altijd zo geweest en zal ook altijd zo blijven. Dit betekent dat je heel nauw samenwerkt met je collega’s en de lijnen erg kort zijn. Er wordt voornamelijk geprogrammeerd in GO, PHP, Javascript en Node.js, maar ook zul je zo nu en dan gebruik maken van talen zoals; C en Python. Wij hebben met veel data te maken en dit is momenteel onze grootste uitdaging op de backend. We maken gebruik van ruim 800 servers, waarvan 600 servers gebruikt worden voor dataopslag. Er draaien meerdere microservices op deze servers, maar

Bekijk vacature »

Lead .NET Developer / Azure / Microservices

Dit ga je doen Als Lead .NET Developer zal je je bezig houden met: Het vertalen van bedrijfswensen naar een technische roadmap; Uitwerken van nieuwe architectuur / designs; Het team aansturen en motiveren; Toezien op de kwaliteit van de code; Mee ontwikkelen van nieuwe features en applicaties. Hier ga je werken Deze organisatie is op dit momenteel marktleider in het ontwikkelen van productielijnen voor de voedselindustrie en heeft een wereldwijd klantnetwerk. Binnen deze organisatie is het team van software developers dagelijks bezig met het ontwikkelen van maatwerk oplossingen om alle productiemachines aan te sturen, maar ook bedrijf kritische applicaties en

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Front-end developer / Magento 2

Functie Momenteel zijn ze op zoek naar een Front-end developer met ervaring in Magento die in staat is om samen met het team klanten volledig te ontzorgen door een product neer te zetten die nog beter is dan ze hadden gehoopt. Doordat ze vrijwel nooit op fixed price basis werken is er ook echt ruimte om de kwaliteit te leveren die je werk leuk maakt. Zo werk je aan reproduceerbare en schaalbare standaarden. Je werkt naast je eigen nieuwbouwprojecten ook aan het optimaliseren van bestaande projecten. Grofweg werk je 60% aan klantprojecten, ben je 20% bezig met innovatie en 20%

Bekijk vacature »

PHP developer gezocht voor bedrijf intern in Arnhe

Bedrijfsomschrijving Dit internetbedrijf uit Arnhem zoekt op korte termijn een medior of senior PHP ontwikkelaar. Ze bestaan al geruime tijd en hebben een vaste groep klanten waar ze applicaties voor ontwikkelen. Deze klanten komen met name uit de regio van Arnhem en dat zorgt dat 1op1 klantcontact vaak voorkomt en soms komen de klanten even binnen voor een kop koffie en om ideeën uit te wisselen. Er hangt bij dit bedrijf een professionele maar ook gemoedelijke sfeer wat zorgt dat het hier heel prettig werken is. Vanwege de groei van de eindklanten van dit bedrijf ontstaat er steeds meer vraag

Bekijk vacature »

Senior iOS developer

Als iOS Developer, zorg je ervoor dat onze mobiele apps onze gebruikers de beste mogelijke ervaring bieden, of ze nu onze producten online bekijken en kopen of onze interne activiteiten beheren. Wat doe je als Senior iOS developer bij Coolblue? Je specialiteit is iOS dus je bent succesvol in het schrijven van swift op een agile manier en doet aan pair programming met je collega's om hogere kwaliteit te garanderen. Daarnaast denk je mee over technische beslissingen zoals architectuur, tools en processen. Ook houd je de performance van de app in de gaten en analyseer je met je team hoe

Bekijk vacature »

Senior iOS developer

As an iOS Developer, you make sure our mobile apps give our users the best possible experience, whether they are browsing and buying our products online or managing our internal operations. How do I become a Senior iOS developer at Coolblue? Your specialty is iOS so you are successful in writing Swift code in an agile fashion and do some pair programming with your colleagues to guarantee higher quality. Besides that you think about technical decisions like architecture, tools and processes. You also keep an eye on the performance of the app and you analyse with your team how to

Bekijk vacature »
Jurgen assaasas

Jurgen assaasas

15/04/2008 12:43:00
Quote Anchor link
Ik ben met PGSQL bezig een voorbeeld te maken voor mijn medestudenten die helemaal geen ervaringen hebben met databases en nu stuit ik op een probleem. Ik heb een aantal tabellen die gekoppeld zijn dat werkt allemaal goed met RESTRICT maar nu heb ik een koppel tabel genaamd vakken_studenten deze tabel koppelt vakken aan leerlingen.

Nu wil ik op studenten een FK maken dat alle records uit vakken_studenten worden verwijderd als er een student wordt verwijderd. Nu krijg ik deze melding:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ERROR:  there is no unique constraint matching given keys for referenced table "vakken_studenten"


Ik snap zo niet wat deze error in houdt. mijn SQL:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ALTER TABLE pdotest.studenten ADD CONSTRAINT fk_vakken FOREIGN KEY (id) REFERENCES pdotest.vakken_studenten (student_id)    ON UPDATE CASCADE ON DELETE CASCADE;
 
PHP hulp

PHP hulp

01/10/2022 20:21:03
 
Joren de Wit

Joren de Wit

15/04/2008 12:51:00
Quote Anchor link
Je legt de relatie precies verkeerd om. De FK bevindt zich in de vakken_studenten tabel en refereert naar de studenten tabel. Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
ALTER TABLE pdotest.vakken_studenten
ADD CONSTRAINT fk_vakken
FOREIGN KEY (student_id)
REFERENCES pdotest.studenten (id)
ON UPDATE CASCADE
ON DELETE CASCADE
 
Frank -

Frank -

15/04/2008 12:53:00
Quote Anchor link
Een bestaande key van RESTRICT omzetten naar CASCADE zal nooit deze foutmelding opleveren, de melding heeft namelijk helemaal niets te maken met een unique-constraint.

Jouw FK staat precies verkeerdom, je wilt niet op studenten een FK maken, maar op vakken_studenten die verwijst naar de studenten. Vanuit vakken_studenten ga je verwijzen naar het id van de student en die is uniek. Probleem opgelost.

Heeft verder ook niks met PostgreSQL te maken, gaat in iedere database op deze manier.
 
Jurgen assaasas

Jurgen assaasas

15/04/2008 14:19:00
Quote Anchor link
Dus als ik het goed begrijp maak ik FK's aan op het child-object? Ik wil dus dat als er een student verwijderd wordt, dat dan alle relaties(in dit geval zijn vakken waar hij aan mee doet) worden verwijderd. Ik zal eens kijken, hartelijk dank alvast.
 
Frank -

Frank -

15/04/2008 14:23:00
Quote Anchor link
Ja, een child wijst naar de parent, de parent weet nergens van, ontkent in alle toonaarden dat het childs heeft. Een database keert dan ook geen kinderblijslag uit, er valt voor de parent dus niets te winnen. Alleen maar gezeik aan je kop, zit niemand op te wachten. Ontkennen dus.

;)
 
Jurgen assaasas

Jurgen assaasas

15/04/2008 14:24:00
Quote Anchor link
pgFrank schreef op 15.04.2008 14:23:
Ja, een child wijst naar de parent, de parent weet nergens van, ontkent in alle toonaarden dat het childs heeft. Een database keert dan ook geen kinderblijslag uit, er valt voor de parent dus niets te winnen. Alleen maar gezeik aan je kop, zit niemand op te wachten. Ontkennen dus.

;)


een parent doet dus alleen iets als een child er om zeurt:P
 
Joren de Wit

Joren de Wit

15/04/2008 14:25:00
Quote Anchor link
Quote:
Dus als ik het goed begrijp maak ik FK's aan op het child-object?
Jep, dat klopt. Als je ON DELETE CASCADE gebruikt en je verwijdert het records waar de FK's naar verwijzen, zullen alle records met die FK ook verwijderd worden. Andersom is dat natuurlijk niet het geval, als je een record met een FK verwijdert, zal het record waar de FK naar verwijst gewoon blijven bestaan...
 
Frank -

Frank -

15/04/2008 14:29:00
Quote Anchor link
Jurgen schreef op 15.04.2008 14:24:
een parent doet dus alleen iets als een child er om zeurt:P
Nee, zelfs dan niet. Een parent heeft geen enkele relatie met een child, een child heeft een relatie met de parent. Dat is dus enkelvoudig, van de child naar de parent. Nooit andersom.

Met CASCADE zorg je er voor dat de child zijn parent in de gaten houdt en daar zelf vervolgacties op neemt. Verwijder je de parent, zal de child zichzelf ook verwijderen. Met RESTRICT zal een child er voor zorgen dat je een parent niet kan verwijderen, maar dat wordt dus door de child afgedwongen en niet door de parent. Een parent heeft tenslotte geen childs, een child heeft een parent.

Raar maar waar.
 
Jurgen assaasas

Jurgen assaasas

15/04/2008 15:02:00
Quote Anchor link
Als ik de code van Blanche gebruik krijg ik deze melding:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
ERROR:  insert or update on table "vakken_studenten" violates foreign key constraint "fk_studenten"
DETAIL:  Key (student_id)=(1) is not present in table "studenten".


Hij violate zijn eigen CONSTRAINT? (ik heb de naam wel even veranderd, fk_vakken bestond nl. al).

SQL:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--Studenten

CREATE TABLE pdotest.studenten
(
  id serial NOT NULL,
  voornaam character varying,
  achternaam character varying,
  klas_id bigint,
  CONSTRAINT pk_studenten PRIMARY KEY (id),
  CONSTRAINT fk_studenten_klassen FOREIGN KEY (klas_id)
      REFERENCES pdotest.klassen (id) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE RESTRICT
)
WITH (OIDS=FALSE);
ALTER TABLE pdotest.studenten OWNER TO jurgen;

-- Koppel tabel studenten en vakken

CREATE TABLE pdotest.vakken_studenten
(
  id serial NOT NULL,
  vak_id bigint,
  student_id bigint,
  CONSTRAINT pk_vakken_studenten PRIMARY KEY (id),
  CONSTRAINT fk_vakken FOREIGN KEY (vak_id)
      REFERENCES pdotest.vakken (id) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE RESTRICT
)
WITH (OIDS=FALSE);
ALTER TABLE pdotest.vakken_studenten OWNER TO jurgen;
 
Frank -

Frank -

15/04/2008 15:05:00
Quote Anchor link
In de tabel studenten probeer je wederom een FK aan te maken naar de childs. Dat gaat ook nu niet lukken, zo snel verandert de wereld nu ook weer niet... ;)

De tabel vakken_studenten heeft 2 FK's nodig, eentje naar de studenten en eentje naar de vakken. Het id kun je in deze tabel weggooien, die heb je normaal gesproken niet nodig, een PK op de combinatie van student en vak lijkt mij voldoende.
 
Jurgen assaasas

Jurgen assaasas

15/04/2008 15:09:00
Quote Anchor link
Ja maar een PK is uniek, een student kan dus meerdere vakken hebben, dan heb je toch een unieke sleutel nodig om elk record te identificeren?
 
Frank -

Frank -

15/04/2008 15:11:00
Quote Anchor link
Ja, en? Maar 1 student zal 1 vak maar 1x volgen. De combinatie student-vak is dus uniek en dus een uitstekende kandidaat voor een PK.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Jurgen assaasas

Jurgen assaasas

15/04/2008 15:14:00
Quote Anchor link
Daar heb je wel gelijk in. Maar hoe wijzig ik dit dan?

het kan namelijk ook zo zijn:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
student_id | vak_id
1        | 2
1        | 3
2        | 2
3        | 1
1        | 1


Edit: Hoe maak ik dus een PK combinatie aan?
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Frank -

Frank -

15/04/2008 15:16:00
Quote Anchor link
Prachtig, wat wil je daar dan aan wijzigen? Ziet er goed uit.

Of wil jij stiekum een waarde toekennen aan de volkomen waardeloze waarde van id? nr. 1 is ouder dan nr. 2 en de volgorde is altijd 1 en dan pas 2! Zo ja, dan ben je fout bezig.
 
Jurgen assaasas

Jurgen assaasas

15/04/2008 15:20:00
Quote Anchor link
pgFrank schreef op 15.04.2008 15:16:
Prachtig, wat wil je daar dan aan wijzigen? Ziet er goed uit.

Of wil jij stiekum een waarde toekennen aan de volkomen waardeloze waarde van id? nr. 1 is ouder dan nr. 2 en de volgorde is altijd 1 en dan pas 2! Zo ja, dan ben je fout bezig.


Nee dat is niet nodig, maar in dit idee zit er geen PK op de tabel. Wordt er dan automatisch de combinatie gepakt van de 2 om ze scheiden van de andere records?
 
Frank -

Frank -

15/04/2008 15:23:00
Quote Anchor link
Je kunt toch een PK maken op basis van deze 2 kolommen?

CONSTRAINT pk_vakken_studenten PRIMARY KEY (vak_id, student_id),
 
Jurgen assaasas

Jurgen assaasas

15/04/2008 15:25:00
Quote Anchor link
pgFrank schreef op 15.04.2008 15:23:
Je kunt toch een PK maken op basis van deze 2 kolommen?

CONSTRAINT pk_vakken_studenten PRIMARY KEY (vak_id, student_id),


Dankje, dat wist ik namelijk niet!

Edit: Ik heb het gewijzigd zoals je zei, alleen werkt het constraint nog steeds niet, wat ik heb gedaan (ik werk met PGadmin3).

1. Wijzig de tabel vakken_studenten.
2. Voeg constraint toe(secundaire sleutel).
3. naam: fk_studenten_vakken.
4. lokale kolom: student_id.
5. reffereert: studenten.id
6. selecteer bij DELETE en UPDATE beide CASCADE

En vervolgens krijg ik weer de error dat hij zijn eigen constraint overschrijdt.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Frank -

Frank -

15/04/2008 15:56:00
Quote Anchor link
Doe je ergens iets fout of heb je foute data in de tabellen staan. Dit werkt hier prima:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
CREATE TABLE studenten
(
  id serial NOT NULL,
  voornaam character varying,
  achternaam character varying,
  klas_id bigint,
  CONSTRAINT pk_studenten PRIMARY KEY (id)
)
WITH (OIDS=FALSE);

CREATE TABLE vakken
(
  id serial NOT NULL,
  naam TEXT,
  CONSTRAINT pk_vakken PRIMARY KEY (id)
)
WITH (OIDS=FALSE);


-- Koppel tabel studenten en vakken

CREATE TABLE vakken_studenten
(
  vak_id bigint,
  student_id bigint,
  CONSTRAINT pk_vakken_studenten PRIMARY KEY (vak_id, student_id),
  CONSTRAINT fk_vakken FOREIGN KEY (vak_id)
      REFERENCES vakken (id) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE RESTRICT,
   CONSTRAINT fk_studenten FOREIGN KEY (student_id)
      REFERENCES studenten (id) MATCH SIMPLE
      ON UPDATE RESTRICT ON DELETE CASCADE
)
WITH (OIDS=FALSE);

De schemanaam mag je er zelf weer even inzetten.
 
Jurgen assaasas

Jurgen assaasas

15/04/2008 16:07:00
Quote Anchor link
Dank je Frank, ik had de database al gevuld met wat testresultaten, wellicht dat het daarom fout ging, dank! Ik vrijwel alle mogelijkheden getest en het ziet er naar uit dat hij precies doet wat ik wil.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Frank -

Frank -

15/04/2008 16:16:00
Quote Anchor link
Offtopic: Wanneer je geen beperking wilt opleggen aan de lengte van een string, kun je gewoon het datatype TEXT gebruiken. Dat heeft verder geen negatieve invloed op bv. geheugengebruik. Zie verder de handleiding. Er past maximaal 1 GB aan data in 1 veld, je hebt dus de nodige ruimte tot je beschikking.

Ben wel benieuwd wat voor voor- of achternaam je hebt wanneer dit 1 GB aan data oplevert... ;)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.