[sql] Database voor shop, zo variabel mogelijk

Pagina: 1
Acties:

  • Stimp
  • Registratie: Februari 2002
  • Laatst online: 23-02-2022
Zoals al duidelijk is uit de titel ben ik bezig met een database te ontwerpen voor een shop die ik ga maken :). De bedoeling is dat als je bijvoorbeeld een artikel gaat toevoegen aan een categorie van de shop, je zelf kenmerken via een admin gedeelte kunt toevoegen.

Dus stel dat ik een t-shirt wil verkopen, dan moet ik in mijn admin een optie zoals kleur, maat kunnen opgeven. En aan die opties moet dan dus de keuzes ook zelf kunnen verzinnen..

Ook wordt het de bedoeling dat je meteen bij die optie een input mogelijkheid kunt geven. Dus of je een select field, of text field oid erbij wilt gebruiken. Ik heb hierbij deze database geschetst:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
+-------------------+
| Opt_Name Table    |
+----+--------------+
| id | naam         |
+----+--------------+
| 1  | maat         |
| 2  | kleur        |
| 3  | eigen tekst  |
+----+--------------+

+-----------+
| Opt Table |
+----+------+
| id | naam |
+----+------+
| 1  | xl   |
| 2  | l    |
| 3  | rood |
+----+------+

+-------------------+
| Input Type Table  |
+----+--------------+
| id | naam         |
+----+--------------+
| 1  | select       |
| 2  | box      |
| 3  | text         |
+----+--------------+


Dit zijn dus mijn 3 tables waarin alle opties inkomen. Dit kan in de admin worden toegevoegd.
code:
1
2
3
4
5
6
7
8
9
+-----------------------------------------------+
| Combi (table waar alles bijelkaar komt)       |
+----+--------+----------+--------+-------------+
| id | art_id |opt_nm_id | opt_id | inp_type_id | 
+----+--------+----------+--------+-------------+
| 1  | 1      | 1        | 2      | 1       |
| 2  | 1      | 1        | 3      | 1       |
| 3  | 1      | 2        | 1      | 2       |
+----+--------+----------+--------+-------------+

Dit is de table waar alles bij elkaar komt. art_id is het id van het product waar nog een aparte table van is.

Als jullie uit dit wazige verhaal komen wil ik graag jullie mening hierover :). Is dit wel efficient genoeg? (omdat ik van zoveel losse tables gebruik maak). En zoniet, wat kan ik eraan veranderen? :Y)

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

1)

Zou je de type niet aan de opt_name hangen ipv in de combi tabel?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

2) Als je een afwijkende prijs en ordernummer hebt voor een bepaalde maat / kleur, hoe sla je dat dan op?

Verwijderd

Bij voorbaat mijn excuses dat ik niet een volledige post kan schrijven, ik heb namelijk niet zoveel tijd op het moment. Maar het ging me vooral om deze opmerking: "Is dit wel efficient genoeg? (omdat ik van zoveel losse tables gebruik maak)". Een groot aantal tables is op zich niet erg, het hangt er vooral vanaf wat je met de database wilt doen, maar rond de 3 tabellen is zeker geen groot aantal, verder gaat het er ook om hoeveel er in die tabellen staat he... Ik denk dat efficientie qua rekentijd/disc access zeker niet je probleem is.

Je database kan qua ontwerp wel verbetering gebruiken... Lees er wat meer over, ik moet nu helaas weg.. sorry.

  • Stimp
  • Registratie: Februari 2002
  • Laatst online: 23-02-2022
dusty schreef op 19 mei 2003 @ 19:38:
1)

Zou je de type niet aan de opt_name hangen ipv in de combi tabel?
Dit leek me ook logischer.. maar ik hebt het expres niet gedaan, omdat nu dus ook bijvoorbeeld een optie maat kan gebruikt worden met een select field als input type. En een andere keer een maat met een checkbox. Misschien dat dit een beetje overdreven is :), maar het kan nu iig.
Verwijderd schreef op 19 mei 2003 @ 19:41:
2) Als je een afwijkende prijs en ordernummer hebt voor een bepaalde maat / kleur, hoe sla je dat dan op?
Um, dan heb ik nu een probleem inderdaad :), als ik hiervoor wil zorgen moet ik daarvoor dus ook aparte tables voor gaan maken.. :D
Verwijderd schreef op 19 mei 2003 @ 19:51:
.... Lees er wat meer over, ik moet nu helaas weg.. sorry...
Okee, uit alle replies kan ik dus concluderen dat het wel zo zal werken, en waarschijnlijk ook wel snel genoeg. Behalve dat als de tables een beetje redelijk gevuld worden het misschien op een andere manier sneller kan. Ik ga zelf nog even opzoek naar soortgelijke problemen hierover in de search ed.. Als iemand me ondertussen op weg kan helpen :Y)

[ Voor 34% gewijzigd door Stimp op 19-05-2003 20:00 ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-08 18:29
Wat je misschien eens moet gaan doen is je computer uitzetten, weet ik doen tweakers niet vaak ;) en dan eens niet gaan denken in programmeren databases en weet-ik-veel-wat maar gewoon eens bedrijftechnisch gaan nadenken wat je allemaal voor mogelijkheden in je pakket wilt hebben. Bedenk ook alle processen, dus de manier waarop de gebruiker gaat werken en begin dan pas met je db.

  • Stimp
  • Registratie: Februari 2002
  • Laatst online: 23-02-2022
djluc schreef op 19 mei 2003 @ 20:01:
Wat je misschien eens moet gaan doen is je computer uitzetten, weet ik doen tweakers niet vaak ;) en dan eens niet gaan denken in programmeren databases en weet-ik-veel-wat maar gewoon eens bedrijftechnisch gaan nadenken wat je allemaal voor mogelijkheden in je pakket wilt hebben. Bedenk ook alle processen, dus de manier waarop de gebruiker gaat werken en begin dan pas met je db.
Geloof me.. ik heb behoorlijk wat schetsen gemaakt om precies uit te denken wat ik wilde in mijn database :D.. Ik hoop juist op deze manier wat meer tips te krijgen over het technische gedeelte van de database.. juist omdat daar waarschijnlijk nog heel wat in te verbeteren valt ;)

Verwijderd

Een eCommerce product waarmee ik gewerkt heb was het ongeveer als volgt opgelost.

VARIATION
-------------
ID
Naam (bijv. 'TShirtKleur' of 'Maat')

VARIATION_VALUES
-------------------------
ID
VariationID
Value (bijv. 'bruin' of 'Large')

BASE_PRODUCT
--------------------
ID
OrderNumber
Name (bijv. 'T-Shirt')
Price
Description
Image
Etc.

VARIATION_PART
----------------------
ID
BaseProductID
VariationProductID
VariationValueID

VARIATION_PRODUCT
---------------------------
ID
OrderNumber
Name (bijv. 'Bruin XXL T-Shirt')
Price
Description
Image
Etc.

Met VARIATION_PART kan je meerdere VariationsValues op 1 BASE_PRODUCT mappen, zoals bijv. 'Maat' en 'TShirtKleur' op 'TShirt', waardoor er meerdere VARIATION_PRODUCTs ontstaan, ieder met een verschillende combinatie van VARIATION_VALUEs. In de VARIATION_PRODUCT kunnen allemaal afwijkende attribuutwaarden (zoals prijs) gekozen worden.

Als een BASE_PRODUCT een VARIATION heeft, kan het BASE_PRODUCT niet meer besteld worden, maar alleen de VARIATION_PRODUCTs. Wellicht is het daarom handig om alle BASE_PRODUCTs die geen VARIATIONs hebben een dummy VARIATION te plaatsen, zodat je altijd alleen met VARIATION_ PRODUCTs werkt in bestellingen.

Overigens vind ik het opslaan van een weergavemethode in een database niet echt een goed idee, da's meer een beslissing voor in templates.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-08 18:29
Geloof me.. ik heb behoorlijk wat schetsen gemaakt om precies uit te denken wat ik wilde in mijn database .. Ik hoop juist op deze manier wat meer tips te krijgen over het technische gedeelte van de database.. juist omdat daar waarschijnlijk nog heel wat in te verbeteren valt
Um, dan heb ik nu een probleem inderdaad , als ik hiervoor wil zorgen moet ik daarvoor dus ook aparte tables voor gaan maken..
Spreekt elkaar een beetje tegen dan vind je niet?

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 08-07 11:19

Yo-han

nope.

djluc schreef op 19 mei 2003 @ 20:01:
Wat je misschien eens moet gaan doen is je computer uitzetten, weet ik doen tweakers niet vaak ;) en dan eens niet gaan denken in programmeren databases en weet-ik-veel-wat maar gewoon eens bedrijftechnisch gaan nadenken wat je allemaal voor mogelijkheden in je pakket wilt hebben. Bedenk ook alle processen, dus de manier waarop de gebruiker gaat werken en begin dan pas met je db.
zeer true.

Zet al de gegevens die je aan wilt bieden, nodig hebt en wil gebruiken eens onder elkaar. Ga daarna kijken in welke relatie ze tot elkaar staan en welke je kan clusteren. De geclusterde gegevens gooi je samen in tabellen en je maakt wat tabellen waarmee je de combinatie kan opslaan. Door dit uit te tekenen met lijntjes kan je van te voren al zien welke problemen er gaan komen in een later stadium in je productie... :)
Pagina: 1