Archief - [PROG][sql server] loop

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

schop aars

Legacy Member
schets van het probleem:

CategoryID Category Description
1 Hardware ...
2 Mouse ...
3 Ball ...

ChildCategoryID ParentCategoryID
2 1
1 2

probleem is dat je zo een loop kunt creëren

hardware-mouse-hardware-mouse-...

nu dit is makkelijk te corrigeren met een trigger door te controleren of de child die je toevoegt al ergens de parent is van de parent die je toevoegt.


maar probleem blijft want


ChildCategoryID ParentCategoryID
2 1
3 2
1 3

op deze manier kan je weer een loop creëren

hardware-mouse-ball-hardware-mouse-....

---------------------------------------------------------------------

nu is mijn vraag hoe je kunt voorkomen dat zo een loop gemaakt wordt bij het invoegen?

AsinuS

Legacy Member
Drop de 2de tabel en voeg een kolom (ParentCategoryId) toe aan je eerste tabel.

schop aars

Legacy Member
dan zit je nog steeds met hetzelfde probleem

vb

categoryID category description parentcategoryid

1 hardware ... 2
2 mouse .... 1


ok de tabel is duidelijker en dus minder kans op foute invoer maar het is nog steeds mogelijk om de loop te creeren.

maakt dus niet veel uit of je het nu zo doet of met 2 tabellen

nee heb denk ik meer iets nodig met triggers of constraints

Bavo aka Joske

Legacy Member
Conroleer het in business logica? Allez ja, bij het toevoegen kijk je gewoon na of iets geen twee keer voorkomt.

dJeez

Legacy Member
Inderdaad, je moet bij het toevoegen enkel controleren of het child-element zelf niet voorkomt als parent door heel de keten af te lopen tot aan je root element (ID 0 of NULL, al naargelang je keuze). Op die manier kan je nooit een oneindige relatie creëren.

killgore

Legacy Member
1) uw management app zo maken dat dit nooit kan. Het is nogal logisch dat dit bij een insert niet echt zou moeten kunnen. Bij updates filter je dan gewoon huidige kindjes uit de lijst vna mogelijke parents.

2) desnoods een extra controle aanmaken als je denkt dat er pipo's het gaan proberen omzeilen door rechtstreeks in db te gaan prutsen ofzo, dit kan met hulp van sql constraints (functies dan, geen fk's ofzo) of een cron job die je regelmatig eens laat lopen, of ... .

Zo een hele check (en zelfs punt 2) bij elke operatie lijkt mij onnodig als je systeem goed gebouwd is
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan