[PGSQL] Foreign keys

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Webdeveloper .NET In de buurt van Arnhem

Bedrijfsomschrijving Deze werkgever biedt je een fantastische werkplek en echt hele gave projecten om aan te werken. Het ontbreekt je hier aan niks om het beste uit jezelf te halen en om de verwachtingen van klanten te overtreffen. Het bedrijf bestaat uit 40 collega's uit diverse disciplines waar je samen mee optrekt binnen projecten. De opdrachtgevers zijn divers, van scholen en ziekenhuizen tot retailers en logistieke bedrijven. Zeker het vermelden waard is dat enkele van de projecten award winning zijn op mondiaal niveau. Work Hard play hard! Want naast het harde werken is er natuurlijk ook tijd voor ontspanning. Dat

Bekijk vacature »

.Net developer

Functieomschrijving Werken in een innovatieve omgeving met gezellige collega’s? Team DataLeaf groeit en maakt graag plek voor jou! We zijn op zoek naar een ervaren full stack ontwikkelaar met .Net en Angular kennis. Samen stomen we onze klanten klaar voor de toekomst. Help jij ons hierbij? Meer dan alleen software Als developer ga je verder dan enkel uitvoering. Je bent communicatief vaardig en zoekt proactief het contact met de klant. In deze rol ben je de schakel tussen de klant en jouw team. Samen achterhaal je het doel van de gevraagde softwareoplossing. Met de input van alle stakeholders bouw je

Bekijk vacature »

Ontwikkelaar

Wij zoeken een capabele Magento developer, die mee willen werken aan het realiseren van mooie webshops. Wij zoeken een creatief, enthousiast, leergierig, gezellig en capabel persoon. Zelfstandig kunnen werken. Goed kunnen communiceren. De wil hebben om verder te groeien. Als Magento developer werk je samen met je team aan de allerbeste webshops voor onze opdrachtgevers. Wat ga je doen als Magento developer? Ontwikkelen van webshops in Magento Onderhoud plegen aan bestaande webshops Behalve kennis van Magento heb je ook kennis van Javascript, HTML, CSS Je bent in staat om zowel zelfstandig als in teamverband te werken Je bent in staat

Bekijk vacature »

Senior C developer met 5G en C en mobile network e

Bedrijfsomschrijving Ben jij een C-developer in hart en nieren en wil jij werken aan solutions die bedoeld zijn voor mobile core networks? Dan hebben wij een grote technische uitdaging voor je bij een Nederlandse organisatie die mee speelt met de grote jongens op de internationale mobiele telecom markt? Onze opdrachtgever is een jonge, snelgroeiende en gespecialiseerde organisatie. Ze zijn meerdere keren genomineerd voor de GSMA Best Mobile technology en zijn een internationale erkende leverancier van wereldwijde (mobiele) telecommunicatiesoftware-oplossingen. Ze zijn de toonaangevende expert in signalerings oplossingen voor mobiele netwerken en leveren de meest geavanceerde software ter wereld voor routering en

Bekijk vacature »

Senior Front-End Developer

As a Senior Front-end Developer you maintain the balance between creativity and functionality for our webshop, and you coach your fellow developers. How do I become a Senior Front-End Developer at Coolblue? As a Senior Front-end Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the Interaction Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present this within the team. You are also proud of your work and welcome all feedback. You share your knowledge with your team and other front-enders. "Want

Bekijk vacature »

Systeembeheerder Citrix

Senior Systeembeheerder Citrix Welkomstbonus van € 5.000,- Bij T2 zorgen we goed voor elkaar en doen wij leuke dingen met leuke mensen. We zorgen voor uitdagende opdrachten zodat jij jezelf onbeperkt kan blijven ontwikkelen. Ben jij een ervaren systeembeheerder Citrix en wil je het beste uit jezelf halen? Dan ben je van harte welkom bij T2 en ontvang je onze welkomstbonus ter waarde van € 5.000,-. Wat mag je nog meer verwachten? Als je met ons de uitdaging aangaat dan bieden we je het volgende: Dienstverband voor onbepaalde tijd Salaris tussen de € 4.000,- en € 4.500,- bruto per maand

Bekijk vacature »

Desktop Support Engineer

WHO WE ARE AND WHAT WE DO IMC is a leading global market maker, using algorithmic trading and advanced technology to buy and sell securities on multiple trading venues worldwide. We provide liquidity to the financial markets, driving efficiencies for buyers and sellers. Founded in 1989, we are an ambitious, innovative company and identified early on the importance technology would play in the fast-paced evolution of trading. This entrepreneurial spirit still drives us today and can be found in all of our offices around the world. IMC – Where Technology drives Trading Trading nowadays happens in a highly competitive technological

Bekijk vacature »

Full stack developer - Oil & Gas unit

Ben jij een allround ontwikkelaar die wil bijdragen aan de energietransitie? Lees dan verder! Wat ga je doen? Als Full Stack Java Ontwikkelaar draag je verantwoordelijkheid voor het gehele proces van het omzetten van wensen, problemen of vragen naar concrete oplossingen. Integratie, testen, vastleggen van kennis en beslissingen, problem management en automation zijn onderdeel van je takenpakket in zowel SAFE of DevOps gestuurde omgevingen als ook in omgevingen die nog werken volgens het traditionele waterval model. Als ontwikkelaar krijg je alle mogelijkheden om je technisch verder te ontwikkelen en samen te werken met gedreven collega's. Wat breng je mee? •

Bekijk vacature »

Google Cloud Engineer

As part of our Cloud service line, you will lead IT innovation for our clients through robust delivery of world-class solutions. There will never be a typical day and you will continuously experience and learn. The opportunities to make a difference within exciting client initiatives are unlimited in the ever-changing technology landscape. You will be part of a growing network of technology experts who are highly collaborative taking on today’s biggest, most complex business challenges. Google Cloud Engineer 32-40 hours per week Your job The Cloud Practice includes our deepest Google Cloud experts and supports Accenture’s more than 1,000+ practitioners

Bekijk vacature »

.NET Developer

Bedrijfsomschrijving De organisatie is werkzaam in de financiële dienstverlening met meer dan 200 medewerkers en meer dan 250.000 eindgebruikers is het een van de grotere binnen haar branche. Je komt te werken in een team waarmee je verantwoordelijk bent voor het ontwikkelen en onderhouden van de financiële applicaties binnen de organisatie, denk hierbij aan het bouwen en onderhouden van portalen. Als .net developer ga jij het development team ondersteunen met de transitie naar de Cloud. Het development team richt zich voornamelijk op stevige back-end vraagstukken. Hierbij zal jij je veel richten op het koppelen van het oude landschap met de

Bekijk vacature »

Ervaren C#/Azure developer werkt mee aan backend p

Voor een innovatieve bouwonderneming die al meer dan 113 jaar bestaat, zijn wij op zoek naar ervaren .Net/C#/Azure developers. Het bedrijf bouwt een (pre-fab) huizenfabriek die 4000 woningen per jaar kan produceren. Deze woningen worden dan modulair op de bouwplaats in elkaar gezet en worden met duurzame (recyclebare) materialen gemaakt en geplaatst. Dit zonder PFAS en zeer weinig NOX. Als .Net developer maak je deel uit van een multidisciplinair team met andere .net developers, BI consultant, systeem- en applicatiebeheerders. Je gaat meebouwen aan de middleware-laag waar 30+ applicaties (waaronder erp systemen) gekoppeld kunnen worden. Deze integraties komen samen op het

Bekijk vacature »

Full Stack Java Developer - Infrastructure

Ben jij een ontwikkelaar die wil bijdragen aan de applicatie ontwikkeling van klanten die zich primair bezig houden met de vitale onderdelen van Nederland, zoals transport, weg, water, spoor en gas, water en licht? Lees dan verder! Wat ga je doen? Als Full Stack Java Ontwikkelaar draag je verantwoordelijkheid voor het gehele proces van het omzetten van wensen, problemen of vragen naar concrete oplossingen. Integratie, testen, vastleggen van kennis en beslissingen, problem management en automation zijn onderdeel van je takenpakket in zowel SAFE of DevOps gestuurde omgevingen als ook in omgevingen die nog werken volgens het traditionele waterval model. Als

Bekijk vacature »

Opleidingstraject tot Low Code Developer Cross Bor

Opleidingstraject tot Low Code Developer Cross Border Solutions Den Haag HBO/WO IT Professional "Wij zetten Mendix en E-magiz in voor onze kritieke processen om de favoriete bezorger te zijn. We zoeken hiervoor Developers in spe die gaat leren ontwikkelen in Mendix en E-magiz voor het uitbreiden van onze Cloud IT-platformen en softwareoplossingen voor onze belangrijkste internationale klanten. Dit vraagt om analytisch vermogen, creativiteit, klantgerichtheid en uitstekende communicatie skills". Wat ga je doen? Als onze nieuwe Junior Developer word je onderdeel van de digitale transformatie van onze internationale business unit naar een e-commerce dienstverlener. PostNL’s cross border unit (CBS) groeit in snel tempo

Bekijk vacature »

Full Stack Java Developer

Functieomschrijving Wil jij zorgen voor de meest plezierige en efficiënte klant ervaring? Wil jij werken met state-of-the-art-systemen, onze business verbeteren en echt impact maken? Wat ga je doen als Full-stack Java Developer? Met jouw slimme en gave oplossingen breng je mensen en werk dichter bij elkaar. Samen met jouw team uiteraard. Binnenstromende functionele vragen vertalen naar technische creatieve oplossingen. Daar mag jij je in gaan vastbijten. Jouw focus bij ons zal liggen bij het 'self-service portaal' voor klanten, waar onze producten en diensten digitaal worden aangeboden aan onze klanten. Een portaal wat wij continue willen doorontwikkelen en dus ook onze

Bekijk vacature »

Python Developer / Data Engineer / data pipelines

Bedrijfsomschrijving Bij dit grote, innovatieve technische bedrijf wil men graag flink groeien dit jaar, namelijk van zo'n 100 naar 120 mensen. In de afgelopen jaren is er hard gewerkt om een nieuw software product op de markt te zetten ter ondersteuning van hun fysieke producten en omdat dit een groot succes is, wordt het nu uitgerold over het hele bedrijf en daarmee een groot deel van de wereld. Er is dus werk aan de winkel! Jij werkt in het back-end team dat ervoor zorgt dat grote hoeveelheden data van de bron naar de front-end worden gebracht in het juiste formaat.

Bekijk vacature »
Jurgen assaasas

Jurgen assaasas

13/03/2008 12:33:00
Quote Anchor link
PHPers,

Ik ben nog steeds met mn shoppingcart bezig maar ik snap nog steeds niet hoe ik nu foreign keys aanmaak. Ik snap wel hoe het moet maar niet het idee erachter ik heb bijvoorbeeld:

products:
product_id(serial)
product_name(varchar)
product_cat(int4)

categories:
cat_id(serial)
cat_name(varchar)
cat_parent(int4)

Deze hebben uiteraard een verband met elkaar alleen snap ik niet hoe ik nu precies deze keys aan maak. Ik wil dat als een categorie wordt verwijderd. dat ook alle producten hier worden verwijderd(cascade). Maar ik wil ook dat een categorie pas verwijderd kan worden als deze geen onderliggende meer heeft (dus een lege categorie). Hoe maak ik dus nu de foreign keys aan, ik heb de tuts van pgFrank gelezen (meerdere malen). Maar snap nog steeds niet op welke kolommen ik keys moet aanmaken.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
PHP hulp

PHP hulp

10/05/2021 21:33:32
 
Frank -

Frank -

13/03/2008 12:34:00
Quote Anchor link
En welke kolommen zijn aan elkaar gekoppeld? Dat is niet (helemaal) duidelijk.
 
Jurgen assaasas

Jurgen assaasas

13/03/2008 12:39:00
Quote Anchor link
Nu nog niets. Ik snap namelijk niet of ik nu een FK aan moet maken op product_cat(products) of op cat_id(categories).
 
Frank -

Frank -

13/03/2008 12:41:00
Quote Anchor link
Ga normaliseren, dan blijkt vanzelf hoe en waarom e.e.a. aan elkaar moet worden geknoopt. Jouw probleem heeft verder ook helemaal niets met PostgreSQL te maken, het draait om de relaties. En die kun je in iedere relationele database maken.

Edit: Je moet dus weten wat de relaties tussen diverse soorten data zijn en hoeveel relaties er zijn. 1 product kan bij 1 categorie horen, maar het zouden er ook meerdere kunnen zijn. Dat zijn keuzes die jij moet maken. 1 categorie kan 1 parent hebben, maar dat zouden er ook meerdere kunnen zijn, nog meer keuzes die jij mag maken! Op basis van deze beslissingen ga je een datamodel opstellen en krijg je de foreign keys cadeau.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Joren de Wit

Joren de Wit

13/03/2008 12:43:00
Quote Anchor link
Ik gok dat products.product_cat in dit geval de FK is die refereert naar categories.cat_id, dus in SQL zou dat zo worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
ALTER TABLE products
ADD FOREIGN KEY (product_cat)
REFERENCES categories (cat_id)
ON UPDATE CASCADE
ON DELETE RESTRICT

Nu worden alle producten gewijzigd als een categorie gewijzigd wordt maar is het niet mogelijk een categorie te verwijderen zolang er nog producten aan gekoppeld zijn.
 
Jurgen assaasas

Jurgen assaasas

13/03/2008 12:43:00
Quote Anchor link
pgFrank schreef op 13.03.2008 12:41:
Ga normaliseren, dan blijkt vanzelf hoe en waarom e.e.a. aan elkaar moet worden geknoopt. Jouw probleem heeft verder ook helemaal niets met PostgreSQL te maken, het draait om de relaties. En die kun je in iedere relationele database maken.


Ja dat snap ik wel waarom het allemaal gekoppeld moet worden maar niet hoe. Moet ik product_cat(products) aan cat_id(categories) koppelen of juist net andersom.
 
Frank -

Frank -

13/03/2008 12:49:00
Quote Anchor link
Wie verwijst naar wie? Een child verwijst altijd naar de parent: X is mijn parent!

users:
id
naam

topics:
id
id_user
content

Ieder topic heeft nu een eigenaar, id_user, daarmee kun je de naam van de user uiteindelijk opvragen. id_user zal dus moeten verwijzen naar het id in de tabel 'users'. De foreign key komt in de tabel 'topics' te staan en verwijst naar de tabel 'users', de kolom 'id'. Dat is namelijk de parent.

Een parent weet niet welke childs er allemaal zijn, dat is nergens voor nodig. Er wordt tenslotte geen kinderbijslag verstrekt... ;)

Normaliseren, zie de derde normaalvorm.
 
Jurgen assaasas

Jurgen assaasas

13/03/2008 12:52:00
Quote Anchor link
Ok, daar ben ik wat wijzer van geworden, ik heb nu dit:

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
CREATE TABLE shoppingcart.products
(
  product_id serial NOT NULL,
  product_name varchar NOT NULL,
  cat_id int4 NOT NULL,
  CONSTRAINT pk_products PRIMARY KEY (product_id),
  CONSTRAINT fk_products_cats FOREIGN KEY (cat_id)
      REFERENCES shoppingcart.categories (cat_id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT un_product_name UNIQUE (product_name)
)
WITHOUT OIDS;
ALTER TABLE shoppingcart.products OWNER TO jurgen;

CREATE TABLE shoppingcart.categories
(
  cat_id serial NOT NULL,
  cat_name varchar NOT NULL,
  cat_parent int4,
  CONSTRAINT pk_categories PRIMARY KEY (cat_id),
  CONSTRAINT fk_categories FOREIGN KEY (cat_parent)
      REFERENCES shoppingcart.categories (cat_id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ub_categories UNIQUE (cat_name)
)
WITHOUT OIDS;
ALTER TABLE shoppingcart.categories OWNER TO jurgen;

Zit ik een beetje in de goede richting?
 
Frank -

Frank -

13/03/2008 13:03:00
Quote Anchor link
Ziet er goed uit:
1 product heeft nu 1 categorie.
1 categorie kan 1 parent hebben.

Ga er eens mee testen, vooral het updaten en verwijderen van data is interessant, maar ook de selects mag je niet vergeten. Krijg je nu echt die resultaten die je verwacht? That's the question!
 
Jurgen assaasas

Jurgen assaasas

13/03/2008 13:36:00
Quote Anchor link
Ik heb even het een en ander gewijzigd in mijn table en nu wil ik een foreign key aanmaken op categories met de gedachten als er een categorie wordt verwijderd (waar al een FK op zit die controleert of hij geen childs heeft). Dat alle producten bij die categorie ook worden verwijderd. maar nu krijg ik een dikke vette foutmelding!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
ALTER TABLE shoppingcart.categories ADD CONSTRAINT fk_categories_products FOREIGN KEY (cat_id) REFERENCES shoppingcart.products (cat_id)
   ON UPDATE CASCADE ON DELETE CASCADE;
CREATE INDEX fki_categories_products ON shoppingcart.categories(cat_id);


en de foutmelding

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
Een fout is opgetreden:

ERROR:  there is no unique constraint matching given keys for referenced table "products"


Hoe kan ik dit verhelpen, mijn huidige opstelling ziet er zo uit:

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
CREATE TABLE shoppingcart.products
(
  product_id serial NOT NULL,
  product_name varchar NOT NULL,
  cat_id int4 NOT NULL,
  CONSTRAINT pk_products PRIMARY KEY (product_id),
  CONSTRAINT un_product_name UNIQUE (product_name)
)
WITHOUT OIDS;
ALTER TABLE shoppingcart.products OWNER TO jurgen;

CREATE TABLE shoppingcart.categories
(
  cat_id serial NOT NULL,
  cat_name varchar NOT NULL,
  cat_parent int4,
  CONSTRAINT pk_categories PRIMARY KEY (cat_id),
  CONSTRAINT fk_categories FOREIGN KEY (cat_parent)
      REFERENCES shoppingcart.categories (cat_id) MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT ub_categories UNIQUE (cat_name)
)
WITHOUT OIDS;
ALTER TABLE shoppingcart.categories OWNER TO jurgen;
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Bo az

Bo az

13/03/2008 13:38:00
Quote Anchor link
Een foreign key werkt precies anders om, een foreign key wijst altijd naar de volledige primary key van een tabel.
 
Frank -

Frank -

13/03/2008 13:42:00
Quote Anchor link
Jurgen schreef op 13.03.2008 13:36:
waar al een FK op zit die controleert of hij geen childs heeft
Wat zeg ik net? Een parent heeft geen flauw idee of deze childs heeft, dat is ook nergens voor nodig. Dat kun je dus ook niet met een FK vaststellen, een FK geeft aan welke child bij welke parent hoort. De parent weet echt helemaal nergens vanaf!

Verander je echter iets aan de parent, dan zal de child dit signaleren dankzij de FK. Afhankelijk van de instellingen van de FK zullen er dan bepaalde acties op de child worden uitgevoerd, bv. ook verwijderen, of wordt de wijziging van de parent onmogelijk gemaakt: RESTRICT.
 
Jurgen assaasas

Jurgen assaasas

13/03/2008 14:03:00
Quote Anchor link
Ik snap het even niet Frank, zoals ik het nu heb, kan er geen categorie verwijderd worden als deze nog childs hebben dit is toch goed? Dan krijg je dus nooit ongekoppelde data.
 
Frank -

Frank -

13/03/2008 14:07:00
Quote Anchor link
Jurgen schreef op 13.03.2008 14:03:
Ik snap het even niet Frank, zoals ik het nu heb, kan er geen categorie verwijderd worden als deze nog childs hebben dit is toch goed? Dan krijg je dus nooit ongekoppelde data.
Dat klopt, maar het zijn de childs die hier voor zorgen! Die houden het verwijderen van de parent tegen, de FK van de child op de parent houdt dit tegen.

De parent weet nergens van, die ontkent alles, heeft volgens hem geen childs. Waarom niet? Omdat dit nergens is vastgelegd. De childs houden bij wie hun parent is. Wil je weten welke childs bij een parent horen, zul je dus alle childs moeten opvragen en dan controleren of zij toevallig parent X hebben.
 



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.