[PGSQL] Foreign keys

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-End Developer / JavaScript / Vue.JS / Financ

Functieomschrijving Are you an enthusiastic Front-End Developer? Do you have work experience with Vue.JS? Are you ready to set up a new architecture by developing a new front-end framework in Vue? If your answers are yes, then this might be your new job! The client designs and develops the next generation of applications. As a Front-End Developer you are, (together) with your team, responsible for setting up the new architecture that will be focused on cloud-ready applications. Your focus within the team will be on translating customer needs into excellent solutions. Developing the new front end framework using Vue.JS; Making

Bekijk vacature »

.NET Developer Zorg-ICT

Complexe software ontwikkelen: dat is jouw ding! Voor onze vestiging in Hoogeveen zoeken wij fanatieke junior en senior .NET Developers die met de laatste Microsoft-tools en -technieken willen werken. Jij bent gemotiveerd en draagt graag verantwoordelijkheid voor je 'eigen' software, die wordt ingezet in ziekenhuizen door heel Nederland. Jouw baan Je bent verantwoordelijk voor het ontwerpen, ontwikkelen, ondersteunen en onderhouden van jouw eigen module. Dit gaat om complexe ICT-producten die feilloos moeten functioneren binnen de complexe omgeving van een zorgorganisatie. Je werkt zelfstandig of in een klein team. ChipSoft maakt gebruik van een zelf ontwikkeld multi tier framework. Tijdens een

Bekijk vacature »

Senior Java Developer vacature

Senior Java Developer Jij volgt ontwikkelingen op de voet. Sterker nog: jij bent er onderdeel van. Jij loopt voorop. Jij denkt met klanten mee en helpt hen innoveren. Bijvoorbeeld met de ontwikkeling van de Rabobank-app, een verbetering van de beveiliging van treinen voor Pro-rail of geef je een boost aan de website van ING! 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

Bekijk vacature »

Lead Developer .NET

Functie­omschrijving "De vrijheid krijgen om onderzoek te plegen en te kunnen werken met de meest nieuwe en geavanceerde technieken heb ik nog nergens zo goed kunnen toepassen als binnen het .Net-team van het MCC. De verschillende Belastingdienst-onderdelen verwachten een ontwikkelplatform waar ze op kunnen vertrouwen. Een tevreden klant als ultiem doel." Pim Albers - Lead developer bij de Belastingdienst. Het mobile competence center van de Belastingdienst (IV-GBS-MCC) bestaat uit twee nauw samenwerkende onderdelen, namelijk het app-team en het .NET-team. Het app-team ontwikkelt mobiele oplossingen voor burgers en bedrijven, voor de medewerkers van de Belastingdienst en voor andere rijksdiensten. Jouw team,

Bekijk vacature »

SQL Developer met SSRS, interne functie+thuiswerke

Functieomschrijving Als SQL Developer binnen deze organisatie wordt je verantwoordelijk voor het developen en onderhouden van hun databases alsmede het bouwen van rapportages voor hun klanten. Je hebt dus een goede kennis van SQL (Stored Procedures, Triggers, Functions) en daarnaast SSRS. Ook kan je ETL processen maken middels SSIS en kubussen middels SSRS. In deze functie ben je voornamelijk technisch bezig, maar houdt je je ook regelmatig bezig met de operationele kant om hun producten en diensten te optimaliseren. Respectievelijk zo’n 70/30. Je zal werken vanuit hun kantoor in Veenendaal. Het gaat dus om een interne functie waarbij je zo

Bekijk vacature »

Medior Front-end Developer

As a medior Front-End Developer at Coolblue you improve the user-friendliness of our webshop for millions of customers. How do I become a Medior Front-end Developer at Coolblue? As a Medior Front-end Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX 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. "Want to become a Medior Front-end Developer at Coolblue? Else de Boer explains how to

Bekijk vacature »

Linked Data Engineer iAMLAB - Infrastructure

Linked Data Engineer iAMLAB - Infrastructure Categorie: Development/Engineering Woonplaats: Rotterdam, Zuid-Holland, Netherlands Vacaturenummer: J1119-1733 Type dienstverband: Full Time Functiebeschrijving: Heb jij ervaring met applicatie ontwikkeling, testen en onderhoud en ben jij toe aan een nieuwe uitdaging? Ga als Linked Data Engineer aan de slag bij ons infra Asset Management team dat zich bezighoudt met semantische asset data management applicaties! Wat ga je doen? Als ervaren Linked Data Engineer houd jij je bezig met het vertalen van stakeholder requirements (functionele en niet-functionele) naar functioneel/technisch ontwerp en naar testontwerp. Jij ontwikkelt applicatie en test software (ontwerp, bouw en test). Daarnaast automatiseer jij

Bekijk vacature »

Senior back end developer /Software engineer (Free

General Description: Philips Digital Cognitive Diagnostics is a new business within the Philips CTO-ventures organization. The venture is tasked with developing a new “software only” product called IntelliSpace Cognition. This new product, which is a class II medical device will help neurologists in assessing the cognitive performance of people with a neuro (degenerative) disease. The initial market for IntelliSpace Cognition is the US. A product video can be found here: https://youtu.be/U5KipcjPtz8 The venture is currently seeking for a Senior Software Engineer. The position is based in Eindhoven, the Netherlands. Requirements: • Design, test, develop, deploy, maintain and improve software assets

Bekijk vacature »

Medior iOS Developer

As an iOS Developer, you make sure our mobile app gives our users the best possible way to buy, browse and interact with Coolblue. How do I become an iOS Developer at Coolblue? You feel comfortable writing Swift code and working together with your colleagues to guarantee high quality. Besides that you think about technical decisions like architecture, tools and processes. You also keep an eye on the performance of the app and you analyse with your team how to improve it. Following scrum is second nature to you. In short, you get a lot of energy from building an

Bekijk vacature »

Scala Developer Security

Functieomschrijving Ben jij een ervaren programmeur? Heb je ervaring met functioneel programmeren en wil je voor een dynamische en snel groeiende organisatie werken waar domain driven design hoog in het vaandel staat? Neem dan snel contact met mij op! Het aandragen en ontwikkelen van technische oplossingen; Het verbeteren van de reeds bestaande functionaliteiten; Het maken van koppelingen met externe applicaties; Sparren met de front-end developers over de te ontwikkelen functionaliteiten; Sparren met mede developers en de business over de inrichting van het domein. Functie-eisen Je hebt HBO- werk en denkniveau; Je hebt enkele jaren ervaring als developer; Je kan programmeren

Bekijk vacature »

C#.NET Ontwikkelaar/consultant

Functieomschrijving Ben jij een C# Developer die binnen een innovatieve, logistieke organisatie wilt werken? Vind je het interessant om jouw ontwikkelde software en code te koppelen aan complexe systemen en daarnaast de implementatie te begeleiden? Laat je horen! Je wordt onderdeel van de developers' club, van circa vijftien collega's, ofwel in een team van software developer waar jullie projectmatig aan de slag gaan met het ontwikkelen van software oplossingen voor klanten. Alle functionele requirements komen via consultants bij het software team terecht. Deze worden in een projectteam van minimaal twee software developers opgepakt, waar je vervolgens zelfstandig of samen met

Bekijk vacature »

Fullstack .NET developer voor het onderwijs

Functieomschrijving Onze klant bouwt SAAS oplossingen voor het onderwijs en ze hebben inmiddels een aantal innoverende applicaties in de markt staan. Je gaat samen met je team op Scrum basis aan de slag om deze .NET applicaties verder te verbeteren en uit te bouwen. Je team bestaat uit een aantal .NET developers en frontenders en naast technisch uitdagend development werk, ga je ook meedenken met de architectuur en zorg je dat de kwaliteit van de applicaties hoog zijn want ze moeten altijd stabiel en snel werken! Functie-eisen - Je hebt een afgeronde HBO opleiding (IT) - Je hebt ervaring met

Bekijk vacature »

.NET Developer Medicatie / Apotheek

Jij krijgt een kick van het ontwikkelen van complexe software. Voor onze vestiging in Hoogeveen zoeken wij een .NET Developer Medicatie / Apotheek die graag met de laatste Microsoft-tools en -technieken wilt werken, interessant? Jouw baan Je bent verantwoordelijk voor het ontwerpen, ontwikkelen, ondersteunen en onderhouden van de module Medicatie / Logistiek & Apotheek. Je gaat nauw samen werken met zowel interne als externe klant om nieuwe functionaliteiten te ontwikkelen om onze klanten te ondersteunen in hun werkproces. Het gaat om complexe ICT-producten die feilloos moeten functioneren binnen de complexe omgeving van een zorgorganisatie. ChipSoft maakt gebruik van een zelf

Bekijk vacature »

Senior Java Developer vacature

Senior Java Developer Jij volgt ontwikkelingen op de voet. Sterker nog: jij bent er onderdeel van. Jij loopt voorop. Jij denkt met klanten mee en helpt hen innoveren. Bijvoorbeeld met de ontwikkeling van de Rabobank-app, een verbetering van de beveiliging van treinen voor Pro-rail of geef je een boost aan de website van ING! 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

Bekijk vacature »

Low Code Ontwikkelaar Veiligheid DevOps

Low Code Ontwikkelaar Veiligheid DevOps Functieomschrijving Ben jij een Low Code ontwikkelaar met OutSystems, Mendix of Betty Blocks ervaring én lijkt het jou uitdagend om te werken voor een organisatie in de omgeving van Houten waar honderden applicaties worden ontwikkeld die bijdragen aan de veiligheid van ons land? Is het voor jou een uitdaging om de organisatie continu naar een hoger niveau te tillen en te experimenteren met nieuwe werkwijzen, tools en technieken? Lees dan nu verder! Je werkzaamheden zullen onder andere bestaan uit: Low Code ontwikkelen en beheer van applicaties op een cloud native platform met Mendix, OutSystems of

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

12/08/2020 11:50:55
 
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.