[pgSQL] Foreign key probleempje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Developer

Functieomschrijving Vanuit het hoofdkantoor in omgeving Roosendaal, ontwikkel je als PHP Developer niet alleen webapplicaties, maar ben je verder ook gefocust op het continu inspelen op nieuwe trends en ontwikkelingen m.b.t software development. Naast het bouwen van webapplicaties, ontwikkelen zij ook webshops en websites voor gave opdrachtgevers! Wat ga je doen? Het schrijven van schone en efficiënte codes volgens het Symfony framework; Het ontwerpen en implementeren van webapplicaties met het Symfony-framework; Onderhouden en updaten van bestaande applicaties die zijn gebouwd met het Symfony framework; Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de

Bekijk vacature »

Fullstack developer - medior

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en zou jij graag bij een platte maar informele organisatie willen werken? Voor een mooi softwarebedrijf in omgeving Dordrecht zijn wij op zoek naar versterking voor op de afdeling Software Development! Als Fullstack developer wordt je bij dit bedrijf onderdeel van de volledige ontwikkeling van requirement tot oplevering! Werkzaamheden Jouw focus ligt op de front end en alles wat daarbij komt kijken. Je gaat ontwerpen, ontwikkelen, testen en valideren. Je zult voornamelijk werken met React.js en Typescript. Maar ook Javascript, HTML en CSS komen aanbod. Daarnaast zal je ook regelmatig met

Bekijk vacature »

Fullstack JavaScript developer (ReactJS, NodeJS, T

Functie Het team bestaat momenteel uit ruim 15 collega’s, waarvan ruim de helft in het ontwikkelteam werkzaam is. Er zijn gave plannen om het platform ook te gaan toepassen op bijv. vliegvelden, maar ook internationale groei zit in het verschiet en daarom zijn ze op zoek naar versterking. Als Fullstack JavaScript developer werk je nauw samen met 9 fullstack (Python en .NET) developers. Binnen het team ga jij je toespitsen op het creeren van de optimale toegankelijkheid en user experience. Om dit voor elkaar te krijgen zul je ontwerpen, programmeren, testen en implementeren. Het hele proces dus! Maar ook bijvoorbeeld

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Voor een opdrachtgever in omgeving Zoetermeer zijn wij op zoek naar een ontwikkelaar ter versterking van het huidige developers team. Heb jij altijd al willen werken voor een bedrijf, dat veilige netwerkverbindingen levert, door middel van veilige oplossingen, die door middel van de nieuwste technologieën ontwikkelt zijn? Stop dan nu met zoeken! Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten

Bekijk vacature »

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 »

Software Developer

Bij een bedrijf in de machinebouw, regio Roosendaal, zijn we op zoek naar een: Software Developer Waar ga je werken? Onze opdrachtgever is gespecialiseerd in de grondverzetmachines. Al meer dan 50 jaar leveren ze zowel nationaal als internationaal diverse machines. Het is een familiebedrijf met een informele werksfeer. Wat ga je doen? Als Software Developer je verantwoordelijk voor: - Je werkt voortdurend aan oplossingen voor het op afstand bewaken en besturen van oogstmachines; - Het visualiseren van gegevens in rapporten, apps of andere formaten; - Voorspellend machineonderhoud; - Taakplanning; - Je schrijft aangepaste plug-ins om gegevens te importeren of exporteren

Bekijk vacature »

Ervaren C#.NET developer

Functieomschrijving We zijn op zoek naar een ervaren C#.NET programmeur voor een moderne werkgever in de regio Prinsenbeek. Als programmeur zal je bezig zijn met het ontwikkelen van op maat gemaakte webapplicaties voor verschillende klanten, waarbij je ervoor zorgt dat complexe processen zo goed mogelijk worden ondersteund. Je takenpakket omvat onder andere: Werken met databases en dataopslagoplossingen, implementeren van beveiligingsoplossingen en het waarborgen van de beveiliging van applicaties en gegevens, evenals het schrijven van technische documentatie en gebruikershandleidingen. Het ontwikkelen en onderhouden van C#.NET-applicaties. Bijdragen aan het ontwerp en de architectuur van softwaretoepassingen. Het schrijven van hoogwaardige en herbruikbare codes.

Bekijk vacature »

Software developer (Python)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »

C# Developer

Dit ga je doen Je gaat aan de slag in het websites team of portals team waarin je je bezighoudt met concept & design, implementatie en ook een stukje bugfixing en onderhoud; Je werkt met je team volgens de Scrum werkwijze; Zo adviseer je ook de PO & Scrum Master over de technische architectuur, koppelingen en integratie met externe systemen en API’s; Je blijft op de hoogte van de laatste ontwikkelingen en trends op het gebied van C# / .NET en deelt deze kennis binnen de organisatie. Hier ga je werken Onze klant is een internationale organisatie gevestigd in de

Bekijk vacature »

.NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Software Developer C# .NET

Functie omschrijving Zoek jij een nieuwe uitdaging binnen development waar je komt te werken binnen een flexibel, jong en ondernemend bedrijf? Wij zijn voor deze functie op zoek naar een C# .NET Developer die enthousiast wordt van het aansluiten en begeleiden van (complexe) nieuwe klanten. Verder begeleid je complexe projecten, ben jij iemand die altijd kansen ziet? Dan zoeken wij jou! Verder ga jij je bezighouden met: Het verbeteren van functionaliteiten binnen het dataplatform; Meedenken in oplossingsrichtingen; Werken aan de architectuur; Ontwikkelen van nieuwe technologieën. Bedrijfsprofiel Waar ga je werken? De organisatie waar je voor gaat werken heeft een onafhankelijk

Bekijk vacature »

Front-end (Angular) developer - remote werken

Functie Als Front-end (Angular) developer ga je aan de slag met het uitbouwen van hun webapplicatie, als één van de front-end experts ga je samen met collega’s in een devops team werken aan een nieuw front-end voor hun calculatie oplossing. Binnen de calculatiesoftware kunnen meerdere professionals tegelijk samenwerken, 3D calculaties uitvoeren en ook inzien met de benodigde specifieke details. Deze software wordt veel ingezet om projectbeschrijvingen en kosten in kaart te brengen, en tijdens de uitvoering te bewaken. Maar hiernaast liggen er in de toekomst veel meer plannen op het gebied van front-end in de andere applicaties. Genoeg te doen

Bekijk vacature »

Senior Product Developer

Functieomschrijving Als senior Product Developer ben je verantwoordelijk voor bestaande mobiliteitsproducten en de ontwikkeling van nieuwe mobiliteitsconcepten. Met behulp van diverse klantonderzoeken, klantsessies en salesmeetings zorg je ervoor dat je de veranderende mobiliteitsbehoeften in de markt kent. Hier speel je op in door innovatieve, flexibele, efficiënte en duurzame vervoersoplossingen te bedenken, te ontwikkelen, te implementeren en uiteindelijk samen met Sales en Marketing collega’s in de markt te zetten. Je initieert en neemt deel aan (internationale en afdeling overschrijdende) projecten, vaak in de rol van projectleider. In die rol bewaak je de voortgang, coördineer je de activiteiten en zorg je voor

Bekijk vacature »

PHP Web Developer

Functie omschrijving Voor een klein softwarebedrijf in de omgeving Roosendaal, zijn wij op zoek naar een PHP web developer met een aantal jaar werkervaring. Wil jij graag werken aan in-house software projecten voor diverse klanten? Voel jij je prettige in een klein team developers, waar jouw inbreng enorm gewaardeerd wordt? Lees dan snel verder! Jouw werkzaamheden zien er als volgt uit: Je wordt verantwoordelijk voor de ontwikkeling van diverse applicaties. Dit kan de ene keer een online platform voor aanbiedingen zijn, en de andere keer een software pakket dat gebruikt wordt om interne processen te automatiseren. Het zijn stuk voor

Bekijk vacature »

C# Ontwikkelaar

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

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/11/2024 12:10:28
 
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.