Jump to content
  • 0

Bidirectionele relatie in eenzelfde tabel


TheMisfit

Question

Via een selfjoin en een portaal geef ik op dat bepaalde records (dossiers) met elkaar te maken hebben.

Dit werkt echter maar in 1 richting.

dossier B wordt gekoppeld aan dossier A, maar ik zou graag hebben dat het omgekeerde dan ook automatisch waar was (en dat zonder te scripten).

Iemand een idee?

Link to comment

11 answers to this question

Recommended Posts

  • 0

Beste,

 

Hoe dat ik het doe is een aparte tabel aan te maken waarin de relaties worden bijgehouden tussen de records...

 

Natuurlijk is het bij mij via een scripte: je maakt dus per link 2 relaties aan A --- B ; B ---A

 

Indien je het echt wenst zonder script kan ik je niet echt verder helpen.

 

Mvg

Link to comment
  • 0

Zoiets kan met de DoSQL plug-in.

 

Het is niet al te simpel, daarom een voorbeeld bestandje.

 

In een notenschelp ( heerlijk toch, zo'n nederlandstalig forum ), het werkt als volgt:

 

- er zit een "validatie door calculatie" achter sleutel B van de tussentabel

- zodra het portaalrecord bewaard wordt, triggeren er een aantal sql statements die zorgen dat je referentiele integriteit in orde komt.

 

Hoe die sql statements werken, staat in de formule gedocumenteerd.

 

De DoSQL plug-in maakt gebruikt van de verborgen SQL engine in FileMaker zelf. FileMaker kan gestuurd worden door een eenvoudige versie van SQL, meer informatie in http://www.filemaker.com/downloads/documentation/fm8_odbc_jdbc_developer.pdf

 

Hiervan is ook ondertussen een 9-versie.

 

Ik geef toe dat dit geen oplossing voor beginners is. De DoSQL plug-in wordt vooral gesmaakt door developers.

De meer eenvoudige oplossing van dit probleem, is je portaal niet creëerend te maken, en via globals en een scriptje te werken. Dat scriptje kan dan aan de hand van die global 2 records aanmaken of aanpassen. Al bij al ook een pak werk. Maar dit kan even niet anders.

dosql commutatieve self-join.fp7

Link to comment
  • 0

Bedankt,

 

Ik kan natuurlijk ook nog altijd een script triggeren d.m.v. bijvoorbeeld zippScript (daar ben ik al vertrouwd mee) om dat tweede record aan te maken.

Ik probeer hier altijd even af te toetsen of ik wel de simpelste werkwijze heb toegepast.

Bedankt voor jullie inbreng.

 

:D

Link to comment
  • 0

Denk erom dat je het twin record ook moet updaten als de selectie gewijzigd wordt.

Denk er ook aan dat je script er niet vanuit mag gaan dat de occurrence waar je zit altijd de goeie is. Tenslotte trigger je het script met een event plug-in, en dat kan je misschien wel doen vanuit verschillende layout/occurrences van je applicatie.

Tenslotte niet vergeten om een cascading delete te maken tussen de twin records...

Link to comment
  • 0

Daar ik zie dat het een selfjoin is kan je het simple oplossen door gebruik te maken van auto enter calculations.Dossier A is A & B en dossier B is B & A... met deze methode heb je geen scripts nodig en zodra een key wijzigt wijzigt die ook in het andere veld

 

Grtz Ron

Link to comment
  • 0
Daar ik zie dat het een selfjoin is kan je het simple oplossen door gebruik te maken van auto enter calculations.Dossier A is A & B en dossier B is B & A... met deze methode heb je geen scripts nodig en zodra een key wijzigt wijzigt die ook in het andere veld

 

Grtz Ron

 

Misschien heb ik 'selfjoin' hier verkeerd gebruikt,

de uiteindelijke links liggen weliswaar tussen 2 records van eenzelfde tabel, maar er wordt wel gebruik gemaakt van een tussentabel om many-to-many relaties mogelijk te maken.

Ik neem aan dat auto enter calculations dan geen oplossing zijn omdat je ook nog eens records moet aanmaken in de hulptabel?

Link to comment
  • 0

RON7 bedoelt dat je in de tussentabel "multi-key" sleutels kunt maken. Da's inderdaad een methode die werkt, hoewel ik dacht dat ze ook nog wat nadelen had, wij gebruiken de multi-record methode in onze templates, dannydv weet misschien nog waarom we daarvoor gekozen hebben.

Danny maakte onze contacten module en hij koos bewust voor de multi-record oplossing.

 

Het systeem is dat er in de tussentabel - de portal dus - een auto-enter calculation ervoor zorgt dat sleutel A & ¶ & sleutel B gemaakt worden.

Gezien beide records dan naar die multi-key relateren, kan je met 1 record in de tussentabel de relatie toch bi-directioneel maken.

 

Misschien een voorbeeldje om deze simpele methode te illustreren?

Link to comment
  • 0
RON7 bedoelt dat je in de tussentabel "multi-key" sleutels kunt maken. Da's inderdaad een methode die werkt, hoewel ik dacht dat ze ook nog wat nadelen had, wij gebruiken de multi-record methode in onze templates, dannydv weet misschien nog waarom we daarvoor gekozen hebben.

Danny maakte onze contacten module en hij koos bewust voor de multi-record oplossing.

 

Het systeem is dat er in de tussentabel - de portal dus - een auto-enter calculation ervoor zorgt dat sleutel A & ¶ & sleutel B gemaakt worden.

Gezien beide records dan naar die multi-key relateren, kan je met 1 record in de tussentabel de relatie toch bi-directioneel maken.

 

Misschien een voorbeeldje om deze simpele methode te illustreren?

 

 

Dat ga ik zeker eens uitwerken.

Wat ik me daarbij nog afvroeg;

is er een specifieke reden waarom men (in de oplossingen die ik op dit forum terugvind) meestal een Auto-enter Calculation wordt gebruikt ipv een gewoon berekeningsveld.

Link to comment
  • 0

Een auto-enter calculatie wordt altijd opgeslagen en kan geindexeerd worden. Bij een calculatie kan dat niet altijd, zeker niet als er globals of gerelateerde gegevens gebruikt worden.

Dat kan belangrijk zijn als het veld in kwestie moet gebruikt worden als sleutel in een relatie. Weliswaar is dat niet erg aan de "van" kant, maar wel falicant aan de "naar" kant. Geen indexering -> relatie werkt niet.

Link to comment
  • 0

Uiteindelijk heb ik het nog anders opgelost:

 

Vanuit de hooftabel 'Dossiers' een relatie naar

de jointabel 'verbanden' en dan van daaruit nog een niveau verder

naar een tweede occurence van dezelfde jointabel 'omgekeerde verbanden'.

 

tussen de tweede en de derde tabel zijn de twee keyvelden (dossier A en dossier B) gekruist. Vanuit de hoofdtabel naar de resp. hulptabellen is het 'aanmaken van records' steeds toegestaan.

 

Uiteindelijk maak ik op de hoofdlayout (Dossiers) een portal aan voor de verst verwijderde occurence ('omgekeerde verbanden').

En wanneer ik in de portaalrij een veld invul wordt er automatisch (en noodgedwongen) ook een record aangemaakt in de middelste tabel ('verbanden').

 

Zonder scripts of events en een bidirectionele link tussen twee records van een eenzelfde tabel.

 

 

 

:lol:

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...