Meerdere gebruikers laten werken in één CRUD applicatie
Momenteel ben ik bezig met een CRUD applicatie.
Hiermee wil ik gebruikers de mogelijkheid geven om enkele gegevens in te voeren. Het betreft meestal dezelfde info/data.
Voor één gebruiker is het geen probleem om info op te slaan in een DB, maar wanneer het twee of meer gebruikers zijn?
Hierover heb ik de volgende vragen en ik hoop dat iemand het e.e.e.a kan toelichten:
1. Is het mogelijk dat meerdere gebruikers hun (dezelfde)informatie kunnen invoegen in crud applicatie in dezelfde DB?
2. Moet elke gebruiker een eigen tabel krijgen of kunnen verschillende gebruikers dezelfde info in dezelfde tabel opslaan?
3. Voor mij is het van belang dat elke gebruiker zijn eigen data kan wijzigen/verwijderen en niet bij de data van één andere gebruiker kan komen.
4. Hoe zorg ik ervoor dat hun data gescheiden blijft in de DB?
5. Of moet ik voor elke gebruiker een aparte DB aanmaken?
6. Wanneer het mogelijk is dat twee of meerdere gebruikers dezelfde informatie kunnen invoeren in dezelfde db, moet ik dan denken aan een concept als een forum/gastenboek?
7. gebruikersrechten moeten ingesteld worden in PhpMyAdmin of juist via PHP zelf?
Alvast bedankt!
Gewijzigd op 19/06/2016 23:39:56 door Mohamed nvt
Databasenormalisatie?
Misschien wordt de opzet van een database een stuk helderder dan. Een hoofdregel is dat je nooit velden, tabellen of databases voor aantallen gaat gebruiken.
Heb je al ervaring met Misschien wordt de opzet van een database een stuk helderder dan. Een hoofdregel is dat je nooit velden, tabellen of databases voor aantallen gaat gebruiken.
Gewijzigd op 19/06/2016 23:49:01 door - Ariën -
2. 1 tabel voor ieder 'ding'. Bijvoorbeeld users, artiesten, liedjes.
3. De beveiliging hiervoor moet je in PHP regelen.
4. Door aan ieder record het id van de gebruiker (of iets anders) toe te voegen. Je kunt dan later gewoon "WHERE user_id=?" toepassen in je query.
5. Neeeeeeeeeeeeee
6. Dezelfde data voor verschillende gebruikers is gewoon mogelijk.
7. Deze rechten regel je binnen je PHP applicatie
Toevoeging op 20/06/2016 00:00:32:
Voorbeeld punt 2:
users:
artiesten:
Liedjes:
Code (php)
1
2
3
4
2
3
4
id | artiest_id | titel
-----------------------
1 | 2 | Work
2 | 1 | Livin' on a Prayer
-----------------------
1 | 2 | Work
2 | 1 | Livin' on a Prayer
Playlist:
1. bedoel je hiermee dubbele informatie, of eenzelfde soort informatie? er bestaat natuurlijk altijd een zeker gevaar voor het invoeren van dubbele informatie; zo/ook zou je bijvoorbeeld een typefout kunnen maken in de invoer (Rihana); dit zul je moeten zien te voorkomen door onderlinge afstemming, moderatie of een ander controlemechanisme
2. eenzelfde soort informatie staat idealiter op dezelfde plek; dit maakt het ook makkelijker om alle informatie in 1x bij elkaar te rapen; stel je voor dat dezelfde soort informatie verspreid zou zijn over verschillende tabellen (of databases), dan wordt het veel lastiger om te zoeken, te sorteren en te filteren
3. in dat geval is de data dus persoonlijk en dient dan ook als zodanig gemarkeerd te worden, bijvoorbeeld door (inderdaad) het opslaan van een user id bij de "resource" in kwestie
4. door het markeren als zijnde van persoon X (zie punt 3) en hier dan ook op te controleren "is de eigenaar van deze informatie persoon X (= het user id uit je sessie of wat dan ook)"?
5. zie punt 2
6. dit hangt helemaal af van wat je applicatie doet; hier is geen generieke opzet voor; indien meerdere gebruikers eenzelfde soort informatie kunnen invoeren en informatie van elkaar kunnen inzien zou ik eerder denken aan een soort van rechtensysteem die vastlegt wat gebruikers mogen, "CRUD" is hier zelf ook een voorbeeld van; uiteraard markeer je in geval van een forum/gastenboek nog steeds van wie de informatie afkomstig is, maar gebruikersrechten bepalen dan wat je allemaal mag zien, in plaats van de controle of de informatie echt van jou is, het zou nogal saai zijn als je alleen je eigen topics en reacties zou kunnen lezen
7. dit lijkt mij per applicatie specifiek, dus dit zal ook in de applicatie zelf (PHP + database) geregeld moeten worden; hierbij zou ik wel waken voor "hardcoding" van je rechtenmanagement. Dit hoeft trouwens niet per se een bezwaar te zijn, maar als je de volgende code hebt:
Code (php)
Dan is dit een hardcoded check, in die zin dat als je de benodigde rechten voor deze actie wilt wijzigen, je hiervoor de broncode moet aanpassen. Er is iets voor te zeggen -als dit gewenst/nodig is is- om dit soort rechtenchecks generiek te houden.
Voor een tiental waardes maximaal zou een select-box een mogelijkheid zijn. Anders zou ik me vasthouden aan een auto-completesysteem die aan de hand van de eerste ingevoerde beginletters de juiste namen erbij pakt.
Puntje 7:
De rechtencontrole kan je prima laten baseren op het recht wat iemand heeft. Ik weet niet wat Thomas precies bedoeld met 3 in hasRights. Maar ik zou dan bijv. eerder dit doen:
Bedankt voor jullie reacties tot nu toe en voor het meedenken.
De reden van mijn bovenstaande vragen hebben te maken met het doel van de CRUD applicatie.
Hieronder zal ik toelichten wat de applicatie in eerste instantie moet kunnen:
Ik wil een basic inventory systeem bouwen dat winkels/of andere kleine ondernemingen in staat staat om hun voorraad bij te houden. Maandelijks zal men per product invoeren wat bijv zijn productiedatum en over datum is.
En, wanneer meerdere winkeliers gebruik willen maken van deze inventory systeem, dan zullen zij dezelfde data invoeren. Vandaar ook mijn vraag of het mogelijk is dat gebruikers dezelfde data kunnen opslaan in dezelfde tabel "bijv. produten_tabel", maar dat de data toch gescheiden blijft.
Daarnaast wil ik dat de applicatie de winkeliers in staat stelt om maandelijks te kunnen zien hoeveel producten zijn ingevoerd. En dat winkeliers zelf een datum kunnen kiezen om vervolgens te kunnen zien welke producten bijv over 2 a 3 maanden over datum zijn.
Ik ben reeds begonnen met een aantal basic PHP cursussen, want ik wil het stap voor stap doen en heel belangrijk voor mij om het proces te kunnen begrijpen.
Je kunt in een database-tabel meerdere dezelfde records hebben. zoiets:
Code (php)
1
2
3
4
2
3
4
Magere yoghurt | 12-8-2016
Magere yoghurt | 12-8-2016
Magere yoghurt | 12-8-2016
Magere yoghurt | 12-8-2016
Magere yoghurt | 12-8-2016
Magere yoghurt | 12-8-2016
Magere yoghurt | 12-8-2016
Dit is alleen wel een super bad practice omdat je niet meer slechts één van de vier dezelfde records kunt aanwijzen.
Om dit te voorkomen wordt er vaak van het autoincrement primary key (id) gebruik gemaakt waardoor je tabel er zo uit komt te zien:
Code (php)
1
2
3
4
2
3
4
1 | Magere yoghurt | 12-8-2016
2 | Magere yoghurt | 12-8-2016
3 | Magere yoghurt | 12-8-2016
4 | Magere yoghurt | 12-8-2016
2 | Magere yoghurt | 12-8-2016
3 | Magere yoghurt | 12-8-2016
4 | Magere yoghurt | 12-8-2016
Nu heb je een good practice omdat je altijd nog WHERE id=2 kunt gebruiken om een record aan te wijzen. Je hebt nu vier dezelfde pakken yoghurt in je database maar wel met een eigen id voor ieder pak.
Nu kun je ook nog een user_id aan ieder artikel toevoegen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
id| user_id |
----------------------------------------
1 | 1 | Magere yoghurt | 12-8-2016
2 | 1 | Magere yoghurt | 12-8-2016
3 | 4 | Magere yoghurt | 12-8-2016
4 | 15 | Magere yoghurt | 12-8-2016
----------------------------------------
1 | 1 | Magere yoghurt | 12-8-2016
2 | 1 | Magere yoghurt | 12-8-2016
3 | 4 | Magere yoghurt | 12-8-2016
4 | 15 | Magere yoghurt | 12-8-2016
User 1 heeft nu twee identieke pakken Yoghurt maar nog steeds wel ieder met een eigen id (dus niet uniek :p)
Ik hoop dat het zo een beetje duidelijk wordt
Toevoeging op 20/06/2016 23:10:16:
p.s De meeste applicaties tonen het id niet in het overzicht dat voor de eindgebruiker bedoeld is maar gebruiken het wel in de URL's:
Bedankt voor je uitleg tot zover.
Het is nu wel duidelijk voor me.
Ik wil nu eerste nog het e.e.a. toevoegen aan de test_crud, voordat ik aan de database design ga werken.
En wanneer het klaar is, zal ik het hier posten voor feedback :)
Gewijzigd op 22/06/2016 22:59:57 door Mohamed nvt