Explode? Kan het sneller?
Ik heb dus in een database een tekst staan gescheiden met komma's.
Op te kijken of een van die waarden bijv 'use-cvs' is, explode ik die tekst en kijk of het in de array zit.
Nu vroeg ik me af, kan dit sneller, in SQL zelf al bijv.?
Op te kijken of een van die waarden bijv 'use-cvs' is, explode ik die tekst en kijk of het in de array zit.
Nu vroeg ik me af, kan dit sneller, in SQL zelf al bijv.?
Je kan een WHERE clausule met LIKE erin gebruiken. Maar als je zulke velden gebruikt is je datamodel fout.
Hoe zouden jullie het doen dan?
In elk geval niet voor elke waarde in deze waslijst een veld aanmaken, toch?
In elk geval niet voor elke waarde in deze waslijst een veld aanmaken, toch?
Code (php)
1
use-admin, use-admin-all, use-admin-boards, use-admin-theme, use-admin-user, use-admin-settings, use-cvs, use-cvs-unread, use-cvs-delete, use-cvs-edit, use-cvs-new, use-cvs-profile, use-cvs-topics, use-cvs-boards, use-cvs-search, use-cvs-unreadtoyour, use-cvs-all, use-ep, use-pm, use-pm-all, use-pm-new, use-pm-inbox, use-pm-reply, use-pm-outbox
Thomas de Roo op 30/10/2010 16:25:33:
Hoe zouden jullie het doen dan?
In elk geval niet voor elke waarde in deze waslijst een veld aanmaken, toch?
In elk geval niet voor elke waarde in deze waslijst een veld aanmaken, toch?
Code (php)
1
use-admin, use-admin-all, use-admin-boards, use-admin-theme, use-admin-user, use-admin-settings, use-cvs, use-cvs-unread, use-cvs-delete, use-cvs-edit, use-cvs-new, use-cvs-profile, use-cvs-topics, use-cvs-boards, use-cvs-search, use-cvs-unreadtoyour, use-cvs-all, use-ep, use-pm, use-pm-all, use-pm-new, use-pm-inbox, use-pm-reply, use-pm-outbox
Ik heb geen idee wat voor data dat allemaal is. Mijn antwoord blijft dus bij databasenormalisatie.
Misschien moet er zelfs wel data weg!
Het zijn dus permissies en er wordt gecontroleerd of een user ze heeft of niet.
Ik zou niet weten hoe ik het anders dan dit moet opslaan, met een koppeltabel zou ik voor elke user en elke permissie een record moeten hebben.
Ik zou niet weten hoe ik het anders dan dit moet opslaan, met een koppeltabel zou ik voor elke user en elke permissie een record moeten hebben.
Ja, en zo moet het ook...
Een logische optimalisatie is natuurlijk om gebruikers in groepen in te delen.
Een logische optimalisatie is natuurlijk om gebruikers in groepen in te delen.
Oke, van wat je net zei snap ik niet echt iets...
Quote:
Ik zou niet weten hoe ik het anders dan dit moet opslaan, met een koppeltabel zou ik voor elke user en elke permissie een record moeten hebben.
Quote:
Ja, en zo moet het ook...
Als je users eerst in groepen indeelt en die groepen rechten geeft, beperkt je het aantal records in die koppeltabel flink.
Natuurlijk moet je weer nadat je genormaliseerd hebt kijken naar de preformance. Maar ik gok dat in dit geval die niet veel onderuit zal gaan.
Als de preformance onderuit gaat, dan is er de optie om te denormaliseren.
Als de preformance onderuit gaat, dan is er de optie om te denormaliseren.
Het vormen van groepen is toch niet denormalisatie?
Dan vorm ik groepen met rechten en maak ik een koppeltabel ;)
Toevoeging op 30/10/2010 16:50:40:
Komt de tabel er dan dus zo uit te zien?
permission | group
use-cvs | 1
use-cvs | 3
use-ep | 1
use-ep | 3
Toevoeging op 30/10/2010 16:50:40:
Komt de tabel er dan dus zo uit te zien?
permission | group
use-cvs | 1
use-cvs | 3
use-ep | 1
use-ep | 3
Ja, hoewel je permissions ook nog in een aparte tabel kan doen en in de koppeltabel naar het id verwijzen.
Pim - op 30/10/2010 16:45:46:
Het vormen van groepen is toch niet denormalisatie?
Als je de rechten per groep indeeld, dan is dat niet denormalisatie inderdaad. Dan lijkt het mij juist de bedoeling dat het gebeurd.
Ik bedoelde meer dat de rechten weer terug gaat in de user tabel.
Werk inderdaad met rollen (groepen) en ken vervolgen afzonderlijke rechten aan een rol toe. Een gebruiker krijgt vervolgs een rol waardoor hij de aan die rol gekoppelde rechten krijgt. Een simpele opzet:
roles
----
id
role
permissions
----------
id
permission
role_permission
-------------
role_id
permission_id
users
-----
id
username
role_id
Mocht een gebruiker meerdere rollen kunnen hebben, dan kun je daar nog een aparte tabel voor gebruiken. Deze basis kun je zelf uiteraard verder uitbreiden :-)
roles
----
id
role
permissions
----------
id
permission
role_permission
-------------
role_id
permission_id
users
-----
id
username
role_id
Mocht een gebruiker meerdere rollen kunnen hebben, dan kun je daar nog een aparte tabel voor gebruiken. Deze basis kun je zelf uiteraard verder uitbreiden :-)




