[pgSQL] Foreign key probleempje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior/senior PHP ontwikkelaar E-commerce

Functie Het software development team bestaat momenteel 5 scrum teams . Ieder team heeft een eigen SCRUM Master en eigen tester. Zij werken voornamelijk in PHP en met hun eigen geschreven framework wat Symfony based is . Jij bent samen met je collega’s verantwoordelijk voor het interne softwaresysteem en alle projecten die daar omheen lopen. Alles wat jij ontwikkelt, wordt direct toegepast en uitgerold (wereldwijd). Dit maakt jouw werk tastbaar en uitdagend! Een greep uit jouw werkzaamheden: Toevoegen en ontwikkelen van nieuwe functionaliteiten Logistieke software ontwikkelen voor intern gebruik Tientallen gigabytes aan data inzichtelijk maken Altijd op zoek gaan naar

Bekijk vacature »

SQL beheerder / ontwikkelaar

Functie omschrijving Voor een klant in omgeving Tiel zijn wij op zoek naar een SQL beheerder met affiniteit met technisch applicatiebeheer. Je krijgt een fijne in-house werkplek waar je gaat werken aan diverse projecten. Dit bedrijf doet het beheer van databases voor een aantal bancaire klanten. Op dit momenten hebben zij ruim 1500 databases in beheer. Jouw werkzaamheden gaan er als volgt uit zien: Je gaat de development afdeling ondersteunen bij het ontwikkelen van MS SQL Scripts. Je zal zowel zelfstandig als in teamverband MS SQL databases installeren & beheren. Je monitort en onderzoekt incidenten en de achterliggende oorzaken. Je

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 »

Back-end developer (Magento2)

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Senior Java developer

Dit ga je doen Jouw taken als Senior Java Developer zijn: Het maken van strategische keuzes omtrent de nieuwbouw van applicaties; Het maken van technische ontwerpen; Hands-on mee ontwikkelen met het team (met o.a. Java FX, JDBC, SQL, REST, Jax-RS, JSON, Maven, JUnit en Spring (boot)); Reviewen van code en feedback geven op collega developers; Analyseren en oplossen van bugs/incidenten door het onderlinge verband te kunnen leggen van verschillende losstaande systemen. Hier ga je werken Het bedrijf waar je als Senior Java Developer komt te werken staat internationaal bekend om het testen van bodemstructuren door middel van echotechnieken en beeldherkenning.

Bekijk vacature »

Medior Java developer (fullstack)

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 »

Backend developer

Functie omschrijving Ben jij graag bezig met de back-end van applicaties? Zou je dit graag willen doen voor een kleine werkgever waar ook tijd is voor een drankje op zijn tijd? Je taken hierbij zullen bestaan uit: Gebruik maken van de volgende technieken: .NET (core), C#, SQL, XML, MVC, JSON, REST & SOAP API. Gebruik maken van de volgende tools: Visual Studio, GIT, Jira, Jenkins. Bovengenoemde technieken en tools ga je gebruiken om: Nieuwe functionaliteiten te ontwikkelen. Wijzigingsverzoeken van klanten uitvoeren. Verzorgen van koppelingen tussen data. Bedrijfsprofiel Jouw nieuwe werkgever bevindt zich in regio Raamdonksveer en bieden oplossingen op gebied

Bekijk vacature »

Software ontwikkelaar ASP .Net / C#

Functie omschrijving Gezocht! Software ontwikkelaar. Ben jij bekend met termen als ASP .Net, C# en SQL? Ben jij op zoek naar een afwisselende en uitdagende IT-functie binnen de agrarische sector? En omschrijf jij jezelf als zelfstandig, enthousiast en proactief? Dan hebben wij de perfecte functie voor jou! Als Software ontwikkelaar binnen deze organisatie ben je samen met één andere collega verantwoordelijk voor de ontwikkeling en modificatie van het support en controle programma dat binnen dit bedrijf gebruikt wordt. Je gaat hierbij bijdragen aan de vertaling van klantwensen naar effectieve softwareoplossingen. Verder bestaan je werkzaamheden uit: Technische uitwerking van de business

Bekijk vacature »

Functioneel applicatiebeheerder - SOP-SYS-SAM

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Functioneel Applicatiebeheerder op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je gaat samenwerken in een team van circa 15 functioneel applicatiebeheerders en gaat onderdeel uitmaken van een DevOps team. Met dit team ga je applicaties (laten) ontwikkelen en beheren. Hierbij concentreer je je vooral op de functionele aspecten, zodat

Bekijk vacature »

Senior Front-end developer Consultancy

Functie Als front-end developer ga je aan de slag voor verschillende klanten, waarbij veel rekening wordt gehouden met waar je woont (dit is altijd binnen het uur), en word er gezocht naar een organisatie die past bij jou. Zowel qua persoonlijke ambities als de technische aansluiting. De opdrachten duren gemiddeld 1 à 2 jaar maar dit hangt ook af van je wensen. Je werkt in een teamverband voor een klant en zult nauw samenwerken met zowel eigen collega’s als die bij de klant werkzaam zijn. Ze zijn op zoek naar een technische front-end developer die ruime ervaring heeft in één

Bekijk vacature »

Web Developer

Bedrijfsomschrijving ENGIE Nederland is onderdeel van de beursgenoteerde ENGIE Groep. ENGIE is actief in 70 landen, met wereldwijd 150.000 medewerkers. Als groep is het de missie om bij te dragen aan de verduurzaming van de wereld. ENGIE Energie biedt energiediensten aan particulieren en grootzakelijk en gaat de uitdagingen van de energietransitie aan door het beschikbaar maken van duurzame energie, het streven de klimaatverandering tot een minimum te beperken, leveringszekerheid te bieden en zorg te dragen voor een verantwoord gebruik van de beschikbare resources. ENGIE Energie investeert daarom in hernieuwbare energiebronnen zoals zon, wind en bio-gas. Functieomschrijving Heb jij veel ervaring

Bekijk vacature »

Medior/senior Back-end developer wanted!

Functie Because of the growth within the company, we are looking for reinforcement in the devlopmenttean. As a back-end developer you build the company software that helps us with the primary processes. A fun (internal) project in which you continuously develop the software! You will work in a small team, we have daily stand-ups and a scrum session every fortnight, led by our Scrum Master. During these sessions, you get the opportunity to present your ideas and discuss them with your fellow developers and the Product Owner. Within the development teams, we use Trello, Gitlab, Jiira, Confluence and Boockstack. They

Bekijk vacature »

NodeJS developer

Functie Als Fullstack developer kom je te werken in het ontwikkelteam. Je bent samen met je collega’s continu bezig om de software uit te breiden, maar hiernaast doe je onderzoek naar de inzet van nieuwe technieken, tools of bijvoorbeeld Machine Learning. Ze willen met hun software echt voorlopen op andere en toegevoegde waarde leveren voor de eindgebruiker. Mede hierom zijn ze erg benieuwd naar iemand zijn persoonlijkheid, of hij graag nieuwe dingen uitzoekt (Google!), en initiatief neemt. Qua technische kennis zoeken ze iemand die goed op de hoogte is van de nieuwste ontwikkelingen, daar zij nu ontwikkelen op NodeJs back-end,

Bekijk vacature »

.NET developer

Functie Als .NET developer start jij in een development team met één Senior .NET developer en één junior .NET developer. Als team zijn jullie verantwoordelijk voor het schrijven van software voor onze toonaangevende Automatiseringssystemen. Jij gaat aan de slag met de onderhoud van de kernsoftware, ondersteund de software van derden door het gebruik van onze webservices en als team zijn jullie verantwoordelijk voor het ontwikkelen van onze backend oplossingen. Wij maken op dit moment veel gebruik van .NET met ASP.NET. Komend kwartaal gaan wij wel gedeeltelijk overstappen naar .NET Core. Verder werken wij ook met SOAP, REST, JSON, HTML5, CSS3

Bekijk vacature »

Outsystems Developer Junior

Dit ga je doen Bouwen aan nieuwe en innovatieve applicaties; Maken van koppelingen tussen Outsystems en het bestaande applicatielandschap; Troubleshooting op bestaande software. Hier ga je werken De organisatie is internationale speler binnen de bouwbranche en richt zich op de infrastructuur, zowel boven als onder de grond. Ze zijn ruim 1100 man groot en maken op IT vlak een mooie groei door. Als junior Outsystems Developer kom je te werken op een IT-afdeling van zo'n 25 man groot. Een aantal jaar geleden hebben ze de keuze gemaakt om zich meer te gaan richten op ontwikkeling en door de groei van

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

23/12/2024 18:39:55
 
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.