[PGSQL] Foreign keys

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

RPA Developer - DUTCH

RPA Developer – DUTCH IN HET KORT Als Robotic Process Automation (RPA) Developer combineer je de rol van IT consultant met die van RPA developer. Je zet je technische expertise, platformkennis en ontwikkelervaring in om hoogwaardige RPA-oplossingen te implementeren en te beheren in een multidisciplinair project of DevOps-team. 2 – 5 jaar werkervaring als Robotic Process Automation (RPA) Developer. Nice to have: UiPath – Blue Prism – Microsoft Power Automate – Integration Architecture – Artificial Intelligence – Kofax – Microsoft .NET – Continuous Integration and Continuous Delivery (CI/CD) – HBO of Master Jaarlijks € 47.952 – € 60.264 + bonus

Bekijk vacature »

Senior Frontend developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Bij DPA GEOS werken onze consultants als Frontend Developer in Agile teams bij onze klanten en zijn ze verantwoordelijk voor de grotere webapplicaties. Wil jij dit ook, want we zijn op zoek naar enthousiaste Frontend Developers om ons development team te versterken. Je draagt positief bij aan de teamgeest binnen een projectteam je kijkt verder dan je eigen rol. Eventueel begeleid je ook andere ontwikkelaars in het softwareontwikkelproces. Je gaat webapplicaties maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit

Bekijk vacature »

Mendix Developer

Functie Wat ga je doen als Java developer? Wij zijn zowel naar junior, medior als senior developers op zoek. Het concept achter Mendix is duidelijk. De klant heeft een vraag/probleem. Dit kunnen we door middel van slimme software oplossen. In plaats van te werken met de nieuwste technieken en tools, wordt er gekozen voor het implementeren en maken van software dat op lang termijn ook door de klant zelf aan te passen is. Door het werken met Mendix ga je kijken waar de klant écht naar op zoek is. Wij zijn op zoek naar consultants die al enige ervaring hebben

Bekijk vacature »

Principal Low-Code Developer - DUTCH

Principal Low-Code Developer – DUTCH IN HET KORT Als Principal Low-code Developer combineer je de rol van IT-consultant met die van applicatie-ontwikkelaar. Je gebruikt je technische expertise, platformkennis en ontwikkelervaring in een multidisciplinair project of DevOps-team voor het implementeren en beheren van hoogwaardige IT-oplossingen 5+ jaar werkervaring als low-code specialist / applicatieontwikkelaar. Nice to have: Mendix – Microsoft Power Apps – DevOps – Scrum – Agile Project Management – Integration Architecture – HBO of Master Jaarlijks € 60.264 – € 75.168 + bonus + leaseregeling + pensioen + veel meer extra’s Hoofdkantoor in Utrecht / 1.400 medewerkers Bekende klanten: Alliander,

Bekijk vacature »

Principal Low-Code Developer - DUTCH

Principal Low-Code Developer – DUTCH IN HET KORT Als Principal Low-code Developer combineer je de rol van IT-consultant met die van applicatie-ontwikkelaar. Je gebruikt je technische expertise, platformkennis en ontwikkelervaring in een multidisciplinair project of DevOps-team voor het implementeren en beheren van hoogwaardige IT-oplossingen 5+ jaar werkervaring als low-code specialist / applicatieontwikkelaar. Nice to have: Mendix – Microsoft Power Apps – DevOps – Scrum – Agile Project Management – Integration Architecture – HBO of Master Jaarlijks € 60.264 – € 75.168 + bonus + leaseregeling + pensioen + veel meer extra’s Hoofdkantoor in Utrecht / 1.400 medewerkers Bekende klanten: Alliander,

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 »

Technisch Ontwikkelaar Chemie

Waar ga je aan de slag - Where will you work Onze opdrachtgever in Rotterdam levert onafhankelijke diensten die het leven van miljoenen mensen over de hele wereld beïnvloeden. Zij leveren toonaangevende controle-, analyse-, inspectie, en certificeringsdiensten – op globale schaal. Het bedrijf behoort wereldwijd tot één van de de grootste inspectie en certificeringsbedrijven en heeft verschillende vestingen in Nederland. Wat ga je doen - What will your job be Als Technisch Ontwikkelaar Chemie ga je aan de slag met het oplossen van vraagstukken en zet je zelf nieuwe analysemethoden op. Ben jij op zoek naar een leuke uitdagende functie

Bekijk vacature »

Medior Low-Code Developer - DUTCH

Medior Low-Code Developer – DUTCH IN HET KORT Als medior Low-code Developer combineer je de rol van IT-consultant met die van applicatie-ontwikkelaar. Je gebruikt je technische expertise, platformkennis en ontwikkelervaring in een multidisciplinair project of DevOps-team voor het implementeren en beheren van hoogwaardige IT-oplossingen 3+ jaar werkervaring als low-code specialist / applicatieontwikkelaar. Nice to have: Mendix – Microsoft Power Apps – DevOps – Scrum – Agile Project Management – Integration Architecture – HBO of Master Jaarlijks € 47.952 – € 60.264 + bonus + leaseregeling + pensioen + veel meer extra’s Hoofdkantoor in Utrecht / 1.400 medewerkers Bekende klanten: Alliander,

Bekijk vacature »

Web developer

Collega’s maken het verschil. Daarom is het leuker werken bij Bending The Rules. Want naast dat we serieuze software vraagstukken oplossen, zijn wij niet het typische IT bedrijf. Naast programmeurs zijn we ook bevlogen BBQ chefs, bierbrouwers, competitieve gewichtheffers en houden we van een festivalletje. Kortom, we zoeken een leuke collega die ook nog eens echt goed is in zijn werk. Ben jij die persoon? ANDERE VOORDELEN VAN WERKEN BIJ BENDING THE RULES We starten altijd met een contract van 7 maanden. Waren deze succesvol? Dan belonen wij jou met een vast contract én een loonsverhoging of een lease auto

Bekijk vacature »

Medior/senior PHP developer

Functie Als medior/senior PHP developer draag je bij aan het verbeteren van de bestaande applicaties, of werk je aan hele nieuwe. Samen met je team bedenk je nieuwe functionaliteiten en ga je deze ook daadwerkelijk bouwen. Je voorziet je teamleden voortdurend van feedback en coacht ze bij het verbeteren van hun technische kennis en vaardigheden. Een team meestal uit een aantal developers, UX/UI designer, wiskundigen en bijvoorbeeld consultants. Je prioriteert je werk met je team en de product owner. Er hierin is er (bijna) altijd ruimte voor goede ideeën, en budget. Momenteel werken ze aan applicaties gebaseerd op Symfony en

Bekijk vacature »

Principal Low-Code Developer - DUTCH

Principal Low-Code Developer – DUTCH IN HET KORT Als Principal Low-code Developer combineer je de rol van IT-consultant met die van applicatie-ontwikkelaar. Je gebruikt je technische expertise, platformkennis en ontwikkelervaring in een multidisciplinair project of DevOps-team voor het implementeren en beheren van hoogwaardige IT-oplossingen 5+ jaar werkervaring als low-code specialist / applicatieontwikkelaar. Nice to have: Mendix – Microsoft Power Apps – DevOps – Scrum – Agile Project Management – Integration Architecture – HBO of Master Jaarlijks € 60.264 – € 75.168 + bonus + leaseregeling + pensioen + veel meer extra’s Hoofdkantoor in Utrecht / 1.400 medewerkers Bekende klanten: Alliander,

Bekijk vacature »

Junior .NET developer

Functie Wij hebben drie scrumteams. Het eerste team focust zich op het stukje hardware wat wij in huis doen. Zij maken als team o.a. gebruik van C++. De andere twee scrumteams zijn allebei bezig met data verwerking en maken hierbij in de backend gebruik van C# .NET / .NET Core. Het verschil tussen deze teams is dat één team de data verwerking doet voor de mobiele applicatie. Zij werken hierbij dus ook met Xamarin. Het andere team focust zich op de webapplicaties en maakt hierbij ook gebruik van ASP.NET MVC. Op basis van jouw ambities en kwaliteiten kijken wij samen

Bekijk vacature »

Medior Low-Code Developer - DUTCH

Medior Low-Code Developer – DUTCH IN HET KORT Als medior Low-code Developer combineer je de rol van IT-consultant met die van applicatie-ontwikkelaar. Je gebruikt je technische expertise, platformkennis en ontwikkelervaring in een multidisciplinair project of DevOps-team voor het implementeren en beheren van hoogwaardige IT-oplossingen 3+ jaar werkervaring als low-code specialist / applicatieontwikkelaar. Nice to have: Mendix – Microsoft Power Apps – DevOps – Scrum – Agile Project Management – Integration Architecture – HBO of Master Jaarlijks € 47.952 – € 60.264 + bonus + leaseregeling + pensioen + veel meer extra’s Hoofdkantoor in Utrecht / 1.400 medewerkers Bekende klanten: Alliander,

Bekijk vacature »

Medior Low-Code Developer - DUTCH

Medior Low-Code Developer – DUTCH IN HET KORT Als medior Low-code Developer combineer je de rol van IT-consultant met die van applicatie-ontwikkelaar. Je gebruikt je technische expertise, platformkennis en ontwikkelervaring in een multidisciplinair project of DevOps-team voor het implementeren en beheren van hoogwaardige IT-oplossingen 3+ jaar werkervaring als low-code specialist / applicatieontwikkelaar. Nice to have: Mendix – Microsoft Power Apps – DevOps – Scrum – Agile Project Management – Integration Architecture – HBO of Master Jaarlijks € 47.952 – € 60.264 + bonus + leaseregeling + pensioen + veel meer extra’s Hoofdkantoor in Utrecht / 1.400 medewerkers Bekende klanten: Alliander,

Bekijk vacature »

Principal Front-end Developer - DUTCH

Principal Front-end Developer – DUTCH IN HET KORT Als Creative Front-end Developer werk je aan een multidisciplinair project of in een DevOps-team en zet je kennis in voor het ontwerpen en ontwikkelen van hoogwaardige digitale oplossingen met uiteenlopende technologieën, zoals Mendix, Pega of Appian. Je bent verantwoordelijk voor het volledige UX-traject van ontwerp tot implementatie. Minimaal 5 – 8 jaar werkervaring als Frond-end developer of UX Designer. Must have: User Experience (UX) – Nederlands – Engels Nice to have: Mendix – OutSystems – Microsoft Power Apps – Agile Project – Management – Scrum – DevOps – HBO of Master Jaarlijks

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

28/09/2022 15:35:23
 
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.