Jump to content
  • 0

Relatieprobleem


Nobifkie

Question

Posted

Wie legt mij uit waar ik mis ga:

 

Ik heb een tabel 'boeken', met daarin een veld 'auteur'.

 

Auteur is gerelateerd aan het veld 'naam' uit een andere tabel, namelijk 'schrijvers'.

 

Ik heb de relatie de mogelijkheid gegeven om vanuit 'boeken' een nieuw record in de tabel 'schrijvers' te maken.

 

Als ik dus een nieuw boek invoer in 'boeken' kan ik daar de naam van een auteur intypen, die naam komt automatisch in de tabel 'schijvers' te staan, waar ik dan tzt de geboorte-datum etc. maar één keer hoef in te vullen voor alle boeken die zo'n kerel produceert.

 

Tot zover gaat het goed. Maar... als ik bij het invoeren van een nieuw boek een auteur intyp die reeds aangemaakt is in die tabel wil hij tóch een nieuw record aanmaken in 'schrijver' met dus als gevolg een melding dat hij deze waarde niet toe kan kennen (het veld naam wil natuurlijk unieke waarden). Terwijl het juist de bedoeling is dat verschillende boeken naar hetzelfde record in schrijvers verwijzen.

 

Kortom: dit gaat zo niet werken. Iemand een beter idee?

11 answers to this question

Recommended Posts

  • 0
Posted

Geen betere ideeën blijkbaar, want hier heb ik naar een gelijkaardig vernuftige oplossing gevraagd:

www.clarify.net/viewtopic.php?t=4105

 

Hoe ik het nu doe is door met 2 velden boven elkaar te werken. Het bovenste is een berekend veld dat de gerelateerde schrijver toont indien ik via een uitrolmenu het (onzichtbare) ID + zichtbare naam van een schrijver heb gekozen in een 3e veld boeken::ID_auteur

 

Wil ik zonder nadenken een naam invullen of weet ik op voorhand dat de schrijver niet in de database zit, dan typ ik gewoon de naam in het veld (dat onderaan zit en als enige van de twee betreedbaar is). Bovendien heb ik daarnaast een knop die desgewenst op een wip die schrijver in de auteurdatabase steekt (maar vooraf eerst controleert of ie er al niet inzit), dan het onderliggende veld terug wist en het nieuwe schrijver-ID in boeken::ID_auteur zet, zodat die in het berekend veld verschijnt.

 

Ik blijf het ook niet onmogelijk achten dat met een vernuftig relatiesysteem iets mogelijk is zoals ik in vermelde link vroeg.

 

Je kan ook een Event-plugin het een en ander laten controleren/doen wanneer je een auteur hebt ingetikt, maar dat ging bij mij regelmatig op ongewenste tijdstippen triggeren, dus terug vanaf gestapt.

 

Het voordeel met het 3-veldensysteem (2 op elkaar + ID-veld) is dat het zowel "door dummies domweg in te vullen" is (of voor auteurs die je niet per se in de database wil), als voor genormaliseerd gebruik kan benut worden.

 

Klinkt wat ingewikkeld misschien hé? :)

  • 0
Posted

Het meest eenvoudige antwoord lijkt mij: doe het andersom. Selecteer eerst een auteur in de tabel schrijvers, en voeg dan een titel en al het andere toe in een portal.

 

Als je per se nieuwe titels in de tabel boeken in wilt vullen, is het ook een optie om een invoerveld te definiëren bijv. naam_temp, een portal te laten zien met alle schrijvers die dezelfde (achter)naam hebben, en vervolgens een button 'nieuwe schrijver' te maken dat het nieuwe gerelateerde record indien nodig alsnog aanmaakt.

 

Eventueel kun je onder de portal nog een melding maken met de tekst "Deze auteur komt nog niet in de collectie voor" op basis van de calculatie if(count(schrijvers::naam)=0)

 

De regels in het portal zijn uiteraard een button 'voeg toe' die de auteurID aan het huidige record toevoegt.

 

Zo heb je geen event plugin nodig.

  • 0
Posted

Prachtig, kom je als Newbie met een beginnersvraag, is er meteen geen simpel antwoord op.

Ik snap niet dat het zo ingewikkeld moet zijn: alles werkt in de relation, alleen er moet geen nieuw record gemaakt worden als er al een record van die naam is. Daar is toch onder andere het related-gebeuren voor bedoeld zou je denken: het voorkomen van dubbele informatie.

 

Ik zit er al een tijd op te piekeren maar het moet toch eenvoudig zijn: ik selecteer iets uit een keuzelijst en als het er niet bijstaat tiep ik het terplekke in waardoor mede de brontabel wordt aangevuld.

 

Het idee van Haddock om het om te draaien is logisch maar in dit geval niet werkbaar: de hele interface is gericht op het bijhouden van de 'boeken', die tabel van schrijvers een bijkomstigheid. Daarbij is bij sommige boeken alleen de titel voorhanden, dus dan zou je één of andere A. Nonymus moeten introduceren om die titels onder te hangen... het middel wordt erger dan de kwaal.

  • 0
Posted (edited)

Ik heb mijn eigen methode voor mezelf ook juist nog even wat verfijnd.

 

Ik heb dit techniekje toegevoegd om een probleem op te lossen dat ik nog had.

http://edoshin.skeletonkey.com/2006/06/linked_fields.html#more

 

Zonder deze oplossing kan je dubbele veldbezetting krijgen.

Bv: Je hebt mbv het uitrolmenu een auteur gekozen, maar vervolgens tik je alsnog een andere/losse auteur in. Zonder dit techniekje zou boek::ID_auteur ingevuld blijven.

 

En omgekeerd: je had een losse auteur ingevuld, maar kiest vervolgens een auteur uit het uitrolmenu; zonder dit techniekje had de ingetikte auteur ingevuld gebleven (ook al was hij niet zichtbaar vanwege het bovenopliggende cAuteur-veld).

 

---> "Cool" 8):wink:

 

Met het + knopje naast auteur kan je je ingetikte auteur bijvoegen in de Auteur database (in dit vb zit geen controle ingebouwd of deze auteur er reeds inzit; iets wat ook automatisch zou kunnen met een Event-plugin op dat veld).

 

Je kan ook het boek::auteur veld valideren op een waardenlijst gebaseerd op alle auteurs, maar ik dacht niet dat je van daaruit een Event-plugin kan starten(?) (dan zou mijn oorspronkelijke vraag opgelost zijn).

 

Deze validatie + gevolgen kan ik natuurlijk ook met een Event-plugin op het veld doen.

 

Voor mijzelf is deze techniek te prefereren omdat ik niet elke auteur in de database auteurs wil zetten en tevens wens dat "dummies" het systeem kunnen gebruiken door gewoon in te tikken ipv te moeten begrijpen wat een gerelateerde auteursdatabase is en hoe ze daarmee moeten werken.

boeken.fp7

Edited by Guest
  • 0
Posted
Daar is toch onder andere het related-gebeuren voor bedoeld zou je denken

 

wonderen dienen door onszelf bedacht te worden.

 

Er valt heel wat te weten over het related gebeuren!

De oplossing door het omdraaien is echt wel de manier om dit soort problemen te benaderen.

  • 0
Posted
De oplossing door het omdraaien is echt wel de manier om dit soort problemen te benaderen.

In mijn vb komt dat overeen met eerst op de uitrolmenu te klikken, waarin zich enkel auteurs bevinden die reeds in de database Auteurs zitten.

 

Is dat niet het geval: tik auteur ter plekke in en

- laat zo staan, of...

- voeg toe in database Auteurs met knopje

 

Nog terzijde: cAuthors mag ipv een Calculatie ook een gestorede auto-enter calc zijn, wat gunstiger is als je op cAuthors wil gaan sorteren, begrijp ik.

  • 0
Posted

Precies.

 

je hebt een record (schrijver) waar steeds meer gerelateerde records (boeken) bij komen. Als je vanuit de boeken wilt beginnen dan is het logisch dat je niet kiest voor automatisch een gerelateerd record aanmaken als je de schrijver invoert want die schrijver staat er misschien al. Er zal dan minimaal een check moeten komen of de schrijver al bestaat. (popup is goed idee) Pas als die er niet staat moet het gerelateerde record aangemaakt worden (is dus minimaal één handeling)

 

Auteur is gerelateerd aan het veld 'naam' uit een andere tabel, namelijk 'schrijvers'.

Ook een relatie maken op basis van de naam van de schrijver is geen goed idee, op het moment dat iemand iets veranderd aan de naam is de relatie weg. Beter is het gebruik van een ID zoals gido_ ook doet in zijn oplossing.

 

De oplossing van gido_ lijkt mijn voor Nobifkie overigens een goed uitgangspunt voor de oplossing aangezien hij vanuit de boektitels wil werken.

  • 0
Posted

Ziehier een voorbeeld met de EventScript plugin.

 

Elke auteur die niet letterlijk bij Auteurs zit wordt er nu automatisch ingestoken en gerelateerd. Zit hij/zij er wél al in, dan wordt ID_auteur ingevuld en het invoerveld gewist.

 

(Later wel eraan denken dat wanneer je een auteur wist, je zijn/haar ID achterlaat in de gerelateerde boekfiches.)

boeken.fp7

  • 0
Posted

Tja.

 

Ik ben niet zo'n plugin-man, om veel redenen. En die lijsten worden ook al gauw te lang. En wat als er twee verschillende schrijvers toch dezelfde naam hebben?

 

Zonder event-plugin kan het zoals hier.

Maar 't is niet alles. 'k Zou het zelf niet snel zo doen.

 

Ik blijf erbij dat de eenvoudigste én beste oplossing is: eerst de auteur selecteren (met een zoekopdracht, zodat je veel meer mogelijkheden hebt) en dan boeken eraan toevoegen. Ik kan me echt niet voorstellen hoe dat in Nobifkies bestaande ontwerp tot onoverkomelijke problemen kan leiden.

boeken.fp7

  • 0
Posted
Daar is toch onder andere het related-gebeuren voor bedoeld zou je denken: het voorkomen van dubbele informatie.

 

Inderdaad, maar zoals in deze draad al vermeld: de informatie moet ondubbelzinnig zijn, en dat is in het geval van schrijvers niet het geval. Het is namelijk niet onmogelijk dat 2 of meer schrijvers dezelfde naam hebben, en hoe moet een computersysteem dan beslissen of het al dan niet een record creëert. En hoe vermijd je dat voor één van mijn favoriete schrijvers 2 records worden aangemaakt: één voor Dostojewski en één voor Dostojevski :D

 

Je schets hier wel een typische situatie. Ik zou deze zonder al te veel technisch stuntwerk oplossen op 1 van volgende manieren:

1. Allereerst de auteur te laten selecteren, zoals hierboven al vaak vermeld.

2. Je maakt een popup venster met globale velden voor de noodzakelijk info voor het toevoegen van een nieuwe boek. Van het globaal veld gAuteursnaam, leg je een relatie naar het bestand Auteurs. Als je andere velden met info over de auteur, zoals geboortedatum, op de layout zet, maak daar dan Lookups van op basis van de relatie. Je maakt een 'Bewaar' knop en laat een script checken of de auteur al voorkomt in de tabel Auteurs en zo nodig een record aanmaken.

3. Je laat de auteur selecteren uit een uitrolmenuutje. Als de auteur niet in dit lijstje voorkomt, dan kan de gebruiker op een '+' knop drukken achter het veld Auteursnaam, en in bv. een popup venstertje naam + andere gegevens van de auteur invullen.

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...