[pgSQL] Foreign key probleempje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Vacature Front-end Developer

Vacature Front-end Developer Van Ons, Amsterdam Vacature Front-end Developer ES6 kent geen geheimen voor je. Je voegt nog even een extra animatie toe om de website nóg vetter te maken. Korte laadtijden en goede UX zijn heilig. En je neemt geen genoegen met sites die niet geoptimaliseerd zijn voor mobiel. Samen met je gedreven, gezellige en knetterslimme collega’s werk je vanuit ons kantoor in Amsterdam aan de vetste cases voor de mooiste merken. Jouw focus ligt op front-end en je bent dus een belangrijke schakel in de projecten die we afleveren voor onze klanten. Jouw werk gaat de wereld over

Bekijk vacature »

Delphi Developer gezocht voor organisatie die Delp

Functieomschrijving Dankzij jouw software krijgen klanten meer inzicht in hun processen in kunnen deze processen bijvoorbeeld steeds verder geautomatiseerd worden. Je komt aan zeer uiteenlopende projecten te werken voor een grote diversiteit aan opdrachtgevers. Hierbij kun je bijvoorbeeld denken aan een applicatie die gebruikt wordt voor het plannen van werkzaamheden, maar bijvoorbeeld ook een website voor een klant. Één ding is zeker; Delphi is jouw kerntaak! Daarnaast werk je ook met SQL. Je opleidingsniveau is voor deze functie van ondergeschikt belang, het is belangrijk dat je ruime ervaring hebt op het gebied van Delphi. Samen met je collega's ben je

Bekijk vacature »

Back-end Python Developer

BACKEND DEVELOPER PYTHON For an international client near Utrecht I'm currently looking for a Back-end Python Developer that has affinity with Data Science. Do you want to work with the most talented people and at the same time work for a company that is engaged in reducing the environmental impact? Then this could be one of the most challenging opportunities. The Responsibilities As a Back-end Developer in this company, you build something that matters in various product development projects, focusing for example on data processing, data storage, data science or platform billing. Product development projects can be executed both on-site

Bekijk vacature »

Software Developer C#

ucntie: Software Developer (C#) Opleiding HBO/WO Locatie: Roermond/Sittard area Startdatum: 1 februari Contract: vast dienstverband Uren per week: Fulltime, 40 uur per week Bedrijf: Als innovatieve voorloper binnen de digitale informatiestromen in de medische sector hechten we belang aan het ontwikkelen en implementeren van nieuwe technologieën. We zijn op zoek naar creatieve geesten die energie halen uit het werken met een verscheidenheid aan technologieën, aan de hand van hun eigen ontwerpvrijheid en professionele ontwikkeling. De afdeling Research & Development is verantwoordelijk voor het onderhouden, vernieuwen en installeerbaar opleveren van de applicaties voor de professionele (eerstelijns) gezondheidszorg. Afdeling: Binnen de afdeling

Bekijk vacature »

Java Developer / Java 8 / Angular / Docker / Autom

Functieomschrijving Wil jij als Java Developer aan de slag bij een internationaal bedrijf die cutting edge applicaties ontwikkeld voor de automotive branche? Ga je graag aan de slag met technieken als Java 8, Java EE7, Docker, Angular en wil je graag direct een lease auto krijgen? Lees dan snel verder! Ontwikkelen van cutting edge applicaties met o.a. Java 8, Java EE7, Angular en Docker; Verantwoordelijk vanaf het in kaart brengen van requirements tot de daadwerkelijke technische oplossing; Meedenken over architectuur; Assisteren van technische implementaties bij klanten; Overleggen met analisten, testers, architecten en consultants. Functie-eisen Minstens 2 jaar ervaring als Java

Bekijk vacature »

Gezocht: ervaren PHP developer die next level wil!

Functieomschrijving Hier werken betekent dat jij je expertise op het gebied van PHP verder kan uitbouwen en een waardevolle bijdrage gaat leveren binnen deze kleine maar prettige organisatie. Voornamelijk zul je hier gaan werken op de Backend met Laravel, mocht je Symfony kennis hebben en je wil ook graag Laravel leren dan kan dat hier zeker! Binnen een team van experts ga jij in Scrumverband verder het succes uitbouwen van het bedrijf. Het is belangrijk dat je zowel een teamplayer bent als zelfstandig te werk gaan, want ze kunnen niet de hele dag je handje vasthouden om alles uit te

Bekijk vacature »

C# Developer /SaaS applicaties/MVC/ SQL/ 4.000 eur

Functieomschrijving Ben jij een .NET (C#) Developer wil werken in een IT-minded organisatie? Heb je kennis van MVC en SQL? Wil jij werken aan in-house ontwikkelde applicaties? Houd jij de nieuwste technieken in de gaten om het ontwikkelproces beter te laten verlopen? Lees dan snel verder! Nieuwbouw, onderhoud en bugfixing van de applicaties; Het produceren van code met een hoge kwaliteit; Hulp bieden aan jouw collega's met verschillende (complexe) technische kwesties; Kwaliteitsmonitoring van het gehele project, incl. de opgeleverde wijzigingen; Het waarnemen van verbetermogelijkheden en deze op de planning zetten. Functie-eisen Uitgebreide werkervaring met C#; Kennis van MVC en SQL;

Bekijk vacature »

Financiële grootmacht zoekt Senior .NET Devel

Functieomschrijving Als Senior .NET Developer kom je te werken aan zowel nieuwe als aan het onderhoud van bestaande applicaties. Dit doe je soms samen met collega's volgens de Scrum methode, maar soms ook alleen als het om kleinere projecten gaat. De software die je bouwt wordt gebruikt voor de interne bedrijfsvoering en voor het ondersteunen van klanten. Je kunt bijvoorbeeld denken aan software om kredietrisico's te analyseren. Het gaat hoe dan ook om complexe en zorgvuldig opgebouwde software. Je kunt hier dan ook rekenen op een goede inwerkperiode, waarin je goed begeleid wordt en waarin je je weg in de

Bekijk vacature »

.Net custom software developer

Jouw uitdaging als .Net developer Als .Net custom software developer creëer je maatwerkoplossingen. Denk aan een mobiele applicatie voor het stroomlijnen van logistieke processen, een platform voor een uitkeringsorganisatie of de passagiersbeleving van een vliegtuigmaatschappij. Hierbij gaat het vaak om complexe omgevingen met veel gebruikers, waarbij de lat dus hoog ligt. Wat jouw werkzaamheden zoal zijn? Je werkt mee aan het gehele ontwikkelproces, van ontwerp, design en ontwikkeling tot testen en beheren van Microsoft applicaties en PoC’s. Je gaat werken met o.a. de volgende technologie: Azure, C#, .Net core, Angular, React, Vue en soms AWS. Je neemt deel aan meetings

Bekijk vacature »

Full Stack Java Developer / Maven / Spring /Amster

Functieomschrijving Ben jij een Full Stack Java Developer die in het mooie Amsterdam wil werken, voor een bedrijf dat verantwoordelijk is voor verschillende soorten data en applicaties? Solliciteer dan nu! Ontwikkelen, uitbouwen en verbeteren van applicaties in Java 8; Sparren met de business en jouw SCRUM team aangaande functionaliteiten. Functie-eisen Je bent in het bezit van minimaal een MBO-diploma met HBO werk- en denk niveau; Je hebt ervaring met Java (8); Je hebt ervaring met Maven; Je hebt ervaring met Spring Framework; Je hebt bent bekent met Azure (PaaS/IaaS); Je hebt ervaring met JFS, Angular; Je hebt kennis van Messaging

Bekijk vacature »

Senior Front-end Developer vacature

Jij weet wat er nodig is. Jouw hart gaat sneller kloppen van techniek. Jij wil vooruit. Ben jij de Front-end Developer die we zoeken? Je bent creatief, thuis in gebruikersinteractie en een gedreven engineer in hart en nieren. Daarnaast heb jij een klantgerichte en proactieve houding. Precies de kwaliteiten die een Front-end Developer nodig heeft. Wat doe je als Developer? Als Front-end Developer werk je aan de technische realisatie van front-end (web)applicaties in de verschillende uitdagende opdrachten voor Sogeti’s klanten. Dit kan zowel op klantlocatie zijn, als binnen het Center of Excellence van Sogeti. Jij houdt van het uitdenken en

Bekijk vacature »

WO starter / Developer / Programmeur / Software De

Functieomschrijving WO starter / Developer / Programmeur / Software Developer / PHP / Full stack / SAAS / Laravel Ontwikkelen van nieuwe functionaliteiten; Ontwikkelen van reactieve front-end; Onderhoud en bug fixing van de bestaande software; Samenwerken met het team op basis van 4 wekelijkse release cyclus; Code review binnen het team; Testen van de gebouwde software. Functie-eisen WO diploma (richting informatica, beta, data) 1 jaar aantoonbare ervaring met programmeren; Ervaring met het bouwen van een webapplicatie; Kennis van een back-end taal en een front-end taal; Je bent communicatief, gedreven, denkt in oplossingen. Bedrijfsomschrijving Onze klant is een dynamisch bedrijf in

Bekijk vacature »

Noordoost Java Developer vacature

Java Developer Noordoost Word onderdeel van een topteam met ervaren Java Developers. Loop voorop in de ontwikkelingen en help mee innoveren. Focus op Java Wij bouwen State of the Art applicaties met de nieuwste Java technologie en frameworks. Dit doen we door ons te richten op de open source-oplossingen binnen de wereld van Java, alle nieuwe ontwikkelingen te volgen en onze kennis te delen binnen onze eigen Java Community. Dit betekent bijvoorbeeld dat we aanwezig zijn op veel conferenties; Oracle Code One, Devoxx en JFall. We organiseren ook onze eigen collegiale sessies en hackatons waar we kennis en plezier combineren.

Bekijk vacature »

Java Custom Software Developer

Jouw rol Als Java developer houd jij van uitdagende maatwerk oplossingen. Het liefste bouw je aan aan complexe en grootschalige oplossingen. Laatst zag je bijvoorbeeld nog een slimme oplossing voorbij komen die je graag zou willen uitwerken. Moet je daarvoor nieuwe technologie leren kennen, dan school jij jezelf bij. Soms moet je je collega's en de klant overtuigen om jouw idee te omarmen. Als jij dan het door jou aangebrachte idee ziet draaien dan kijk jij er alweer naar uit om de volgende oplossing te bouwen. Plaats in de organisatie Binnen onze Custom Software Development practice (CSD) werken we gezamenlijk

Bekijk vacature »

Business Intelligence Developer vacature

Jij ben niet bang om hard te werken. Uitdagingen zijn welkom. En problemen? Die zijn er om opgelost te worden of, nog beter, om voorkomen te worden! Voor jij aan de slag gaat met het ontwerpen van BI- en DWH-oplossingen, leg je eerst je oor te luister bij de klant. Zo weet jij wat de klant wil, en hoe jouw ontwerp eruit moet komen te zien. Simpel! Althans… met jouw Developer-kwaliteiten wel! Over deze BI vacature Als Business Intelligence Developer ga je zowel op locatie bij de klant aan de slag, als op een van de Sogeti-locaties. Je analyseert de

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

26/01/2020 10:05:12
 
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.