Webshop database design 1.0

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

20/12/2014 18:55:36
Quote Anchor link
Hallo allemaal,

Ik ben bezig een webshop te bouwen in mijn CMS. Nu wil ik beginnen om de database voor webshop-users, orders en betalingen te ontwerpen.

Ik heb een aantal bedenkeningen voor de 1e stap, webshop-users.
Deze webshop-users kunnen inloggen op de website. Maar, het is ook gewenst door een andere klant van mij om een inlog te maken.
Wat stellen jullie voor? Alles 1 in DB gooien en op deze manier aangeven of de gebruiker dingen kan bestellen of gewoon elke user toegang hiertoe geven.

Je krijgt anders 3 soorten users in mijn database;
cms-users (hebben toegang tot het cms en hieraan zijn rollen gekoppeld e.d)
webshop-users (spreekt voor zich denk ik)
inlog-user (dit kan voor afgeschermde content zijn)

Ik denk persoonlijk dat het beter is om de laatste 2 soorten users te combineren in 1 tabel.



---

Dan mijn 2e vraag, adresgegevens. Hoe kan ik dit het beste opslaan? Factuur en afleveradres is vaak gewenst maar moet niet verplicht zijn omdat ingelogde gebruikers die niet gebruikmaken van het webshop gedeelte het nodig hebben.

Ik zelf denk dat het opgeslagen kan worden in een tabel met adresgegevens o.i.d en dan deze linken aan een user.

graag jullie adviezen en ervaringen hierbij.

Thanks :)
 
PHP hulp

PHP hulp

16/11/2024 17:26:13
 
- Ariën  -
Beheerder

- Ariën -

20/12/2014 19:02:31
Quote Anchor link
Je wilt dus drie soorten rollen meegeven aan de gebruikers, waarbij je bij cms-users dus ook rechtensets eraan koppelt?

Ikzelf zou gewoon voor alle typen users een geheel RBAC-rechtensysteem maken, waarmee je kan bepalen wat ze wel/niet mogen. Dan kan je de rechten defineren in rechtensets die dan je koppelt aan de gebruikers.
Gewijzigd op 20/12/2014 19:08:33 door - Ariën -
 

20/12/2014 19:29:57
Quote Anchor link
Aar, dit is niet wat ik wil.
Het is meer of ik 2 of 3 tabellen met users moet hebben.

webusers
cmsusers

Hiermee kan ik onderscheidt maken tussen 3 soorten gebruikers:
ingelogde gebruikers en webshop gebruikers
gebruikers voor het cms

Hopelijk begrijp je het nu een beetje.
 
- Ariën  -
Beheerder

- Ariën -

20/12/2014 19:36:23
Quote Anchor link
Onderscheid moet je niet met tabellen maken, maar via een veld.

Dus alle gebruikers in 1 tabel, en per gebruiker bepaald je wat voor gebruiker het is. Maar dan neig ik meer naar een RBAC-rechtensysteem om flexibeler erin te zijn.
Gewijzigd op 20/12/2014 19:42:39 door - Ariën -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

20/12/2014 20:00:50
Quote Anchor link
Persoonlijk zou ik er voor kiezen om 'klanten' in een aparte tabel op te slaan. Verder ga ik met Aar mee.
 
John D

John D

20/12/2014 20:24:53
Quote Anchor link
>>Persoonlijk zou ik er voor kiezen om 'klanten' in een aparte tabel op te slaan. Verder ga ik met Aar mee.
Een webshop user kan ook een klant zijn en/of omgekeerd. Verder ga ik helemaal met Aar mee, dus RBAC
Kwestie van datamodellering en 3e normaalvorm. (Chris Date, boek 1 les 1 pagina 1 uitgave 1987)
Gewijzigd op 20/12/2014 20:29:44 door John D
 

20/12/2014 20:54:16
Quote Anchor link
Ik maak al gebruik van het RBAC. Alleen voor webshop gebruikers en ingelogde wou ik het weten. Ik maak dan onderscheidt in 2 hoofdusers in 2 tabellen.
De webusers, wat valt onder webshop user of ingelogde gebruiker voor een bepaald gedeelte.
En de CMS user waarmee toegang kan worden verkregen om de website te bewerken e.d
Gewijzigd op 20/12/2014 20:55:29 door
 
Ozzie PHP

Ozzie PHP

20/12/2014 21:18:58
Quote Anchor link
Waarom zou je geen 2 tabellen mogen gebruiken voor cms-users en webshop-users?

Beiden hebben (als ik Rickerst goed begrijp) een totaal andere functie. Webshop-users zijn front-end gebruikers en cms-users zijn back-end gebruikers. Op het moment dat je via de admin-login url inlogt, lijkt het me nutteloos om de complete klanten-tabel te controleren op username en password. Daarnaast zou een cms-user andere functionaliteit (en een andere databasemodel) kunnen hebben dan een front-end gebruiker. Dat je niet voor iedere TYPE cms-user/admin een andere tabel maakt, lijkt me logisch. Maar een onderscheid tussen cms-users en webshop-users lijkt me niet verkeerd.
 

20/12/2014 21:31:02
Quote Anchor link
Dat is precies wat ik bedoelde.
Een cms user hoeft geen adres te hebben en is seperaat aan het frontend. We heb ik rollen en rechten toegekend aan de cms user.
 
Ozzie PHP

Ozzie PHP

20/12/2014 23:22:27
Quote Anchor link
Lijkt me prima Rickert. Soms zijn er goede redenen om af te wijken van de "regels" en dit lijkt me zo'n geval. Je moet vooral naar de functionaliteit van de gebruikers in het algemeen kijken. Het zijn weliswaar allemaal gebruikers, maar hun onderlinge "rol" in het plaatje verschilt enorm. Cms-users zorgen dat de site onderhouden wordt, en webshop-users zijn de klanten. Trekken we dat plaatje voor de grap even door, dan zou je het kunnen vergelijken met de medewerkers van een supermarkt (die de supermarkt onderhouden) en de gergistreerde (met een klantenkaart) supermarkt-gebruikers, ofwel de klanten. Alle medewerkers en geregistreerde klanten die stop je ook niet in 1 tabel. Het zijn weliswaar allemaal mensen die in de supermarkt rondlopen, maar hun rol is totaal verschillend.
 

20/12/2014 23:29:26
Quote Anchor link
Ja wellicht is het niet echt afwijken maar onderscheidt maken.
Je kan daarna bij beide users van de rolverdeling uitgaan.

Maar wat is nu de beste manier om adressen te linken aan de webusers? Niet elke webuser heeft er 1 en sommige hebben er 2 vanwege het factuur en verzendadres.
 
Victor -

Victor -

21/12/2014 00:19:29
Quote Anchor link
Als je toch al gebruikt maakt van het RBAC waarom zou je dit dan niet doortrekken naar naar je cmsuser en webshopuser. Je user table moet niet meer bevatten dan een wachtwoord naam en andere vereiste criteria. Verdere adresgegevens koppel je hier aan door middel van andere tabellen.
 
John D

John D

21/12/2014 10:22:00
Quote Anchor link
Het is een kwestie van modelleren maar iedereen kleurt graag zelf de plaatjes zoals het supermarktmodel van Ozzie wat ik appels en peren vind. Een supermarkt heeft zijn personeelssysteem nooit op dezelfde applicatie als het klantensysteem en in het het geval van rickert gaat het kennelijk wel over dezelfde applicatie. Maar nogmaals, iedereen kleurt graag zelf de plaatjes en bouwt iets leuks.
 

21/12/2014 11:47:09
Quote Anchor link
Ik snap jullie allemaal. Alleen is het gemakkelijker om de 2 users te scheiden.
De rollen die de cms users hebben kunnen gemakkelijk of helemaal niet samenwerken met de webusers.
Technisch gezien is het CMS en de frontend een aparte applicatie.
Elke hebben eigen models en controllers. Ook is het CMS een grote module waarin andere modules geladen worden.

Het supermarkt voorbeeld was perfect in mijn situatie. Andere applicaties zou ik zeer zeker zo bouwen als jullie zeggen. Alleen dit is gemakkelijker omdat frontend- en backend-users 2 conpleet aparte groepen zijn.

Ik zal bij beide de rollen gebruiken waar ik bij het cms dit al gebruik.

Thanks voor de hulp u allen. Alleen weet ik nog niet hoe ik de adressen kan koppelen voor de frontend users.
Hebben jullie hier nog suggesties voor?
 
Ozzie PHP

Ozzie PHP

21/12/2014 14:17:52
Quote Anchor link
>> Een supermarkt heeft zijn personeelssysteem nooit op dezelfde applicatie als het klantensysteem

Nee, maar er zijn zat pakketten die het eigen personeel en de klanten wel onder 1 applicatie draaien. Maar het is inderdaad een kwestie van persoonlijke voorkeur/smaak en specifieke toepasbaarheid.

>> Alleen weet ik nog niet hoe ik de adressen kan koppelen voor de frontend users.
Hebben jullie hier nog suggesties voor?

Dit vind ik ook wel lastig hoor. Ik denk dat je het beste met een koppeltabel kunt werken (hoewel ik ook geen database-expert ben, dus wellicht kan Ger van Steenderen hier z'n licht over laten schijnen).

Maar wat je dan krijgt is 1 tabel met de frontend users, 1 koppeltabel en 1 adres-tabel.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
frontend_users:

id voornaam achternaam
1  Rickert  Bombaklats

front_end_users_adresses (koppeltabel):

id frontend_user_id type address_id
1         1           1       1

addresses:

id street      number place      zip_code
1  Grotestraat    1   Amsterdam   1234AB

Bij de koppeltabel kun je dan bijv. type 1 gebruiken als factuuradres en type 2 als verzendadres. Het mooie van een koppeltabel is dat je oneindig veel adressen per gebruiker kunt toevoegen.

Wellicht zijn er nog betere mogelijkheden, dan horen we het graag uiteraard ...
Gewijzigd op 21/12/2014 14:19:59 door Ozzie PHP
 

21/12/2014 15:36:58
Quote Anchor link
Is het misschien makkelijker om dit te doen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
frontend_users:

id voornaam achternaam postadres afleveradres
1  Rickert  Bombaklats
        1           1       1             2

addresses:

id street      number place      zip_code
1  Grotestraat    1   Amsterdam   1234AB
2  Kleinestraat    2   Rotterdam   4321BA


Het is namelijk ook zo dat niet elke website die ik maak dezelfde velden hebben.
Het is misschien ook gewenst door een klant om andere velden te hanteren. Mijn oude werkgever heeft die opgelost door dynamische velden te gebruiken waardoor je on-the-fly velden per klant kon opgeven die aan de users werden gekoppeld.

Bijvoorbeeld;

webuser_detail_fields

field_name
field_type
field_required
field_title
field_values
field_class
description

Dit komt letterlijk uit hun DB, geen idee waar name en title voor zijn. Ik nam aan label in het formulier en veldnaam.
Alleen is het dan weer zo dat de veldnamen niet multilanguage zijn en ik dit wel hanteer in mijn CMS.

Maar zo krijgen jullie een beetje een indruk hoe het in elkaar zit.
Gewijzigd op 21/12/2014 15:40:02 door
 
Ozzie PHP

Ozzie PHP

21/12/2014 15:54:24
Quote Anchor link
>> Is het misschien makkelijker om dit te doen?

Dat is een persoonlijke keuze, maar besef je dan wel dat 1 persoon dus maar 1 postadres en 1 afleveradres kan hebben. Bij consumenten kom je daar meestal wel mee weg, maar bij bedrijven soms niet. Die hebben soms verschillende financiële afdelingen en verschillende panden (afleverlocaties). In jouw voorbeeld kom je dan dus in de knoop. Met een koppeltabel heb je dat probleem niet. Stel dat een bedrijf 6 afleverlocaties heeft, dan kun je die mooi in een drop-down menu tonen en op die manier kan het bedrijf snel de juiste locatie selecteren.
 

21/12/2014 16:06:26
Quote Anchor link
Klopt, daar zat ik ook al overna te denken. Maaaaaarr...
Hoe kan je dan meteen onderscheid maken tussen de verschillende adressen?

Het gaat me er nu vooral om dat de klanten gemakkelijk een alternatief adres kunnen opgeven, of kiezen bij het bestellen in de webshop.

Of is het dan gewoon zoals je zegt, een keuze of je het naar alternatief adres wilt sturen en dan 1 kiezen dmv een dropdown of invullen in het formulier.
En je kan dan zelf instellen bij een profiel wat je standaardadres is?

Is dat een optie die wellicht gemakkelijk kan werken. Ik houdt dan de structuur aan die jij aangaf Ozzie.
 
Ozzie PHP

Ozzie PHP

21/12/2014 16:14:14
Quote Anchor link
>> Hoe kan je dan meteen onderscheid maken tussen de verschillende adressen?

Met een select query waarbij je selecteert op "type", bijv. WHERE type=1. Waarbij 1 dan bijv. een factuuradres is en 2 een afleveradres.

Je moet even goed over nadenken wat voor een bedrijf makkelijk is. Stel ze typen de eerste keer een adres in, dan sla je dat op. De volgende keer toon je dat adres, maar zet je er ook een knop "nieuw adres toevoegen" bij. Zijn er meer dan 1 adressen ingevoerd, dan toon je bijv. het laatst gekozen adres, en toon je ook een drop-down menu waar dan dat andere adres in zit. Je kunt ook inderdaad een optie maken om een bepaald adres als standaard in te stellen. Je moet vooral zelf nagaan wat "handig" is in gebruik. Bedenk in je hoofd hoe jij het zelf handig zou vinden, of zet dat op papier. Vraag vervolgens aan een paar anderen of zij dat ook handig zouden vinden (misschien levert het tips op) en als dat zo is, dan ga je het zo maken :)
 

24/12/2014 17:37:15
Quote Anchor link
@ozzie (en anderen)
Het opslaan van het standaard adres, waar zou jij dat neerzetten. Een adres moet via de koppeltabel aangegeven worden bij de user toch? Is het dan handig om het daarbij te zetten? Of bij de user tabel zelf.
 
Eddy E

Eddy E

24/12/2014 18:42:30
Quote Anchor link
Ik zou het in een koppeltabel zetten.

Een bedrijf als bijvoorbeeld Philips heeft wel tig vestigingen. Als die iets kopen/bestellen/doen moet het niet afgeleverd worden op het hoofdkantoor. Daar moet de rekening (vaak) wel heen.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.