Skip to content

gardmikael/kaffebarApp

Repository files navigation

kaffebarApp for Digi Publishing

Database/SQL: Tabeller

items

  • id* - Auto inkrementell primærnøkkel
  • name – Påkrevd tekst
  • img_path – Valgfri path til bilde for varen, med default value til eksisterende bilde.
  • item_group – Påkrevd varegruppe. (Det finnes ingen tabell for varegrupper, så denne er hardkodet for å kunne skille på ulike type varer)
  • timestamps() – feltene created_at og updated_at oppdateres automatisk.

Items-tabellen inneholder alle (rå)varer. Alle varer som registreres i systemet ligger her.

sales_items

  • item_id* - Primærnøkkel og fremmednøkkel
  • price – Påkrevd tall med to desimaler

Dersom en vare også skal selges, vil den ligge i sales_item-tabellen.

orders

  • id* - Auto inkrementell primærnøkkel
  • total – Påkreved tall med to desimaler
  • timestamps() - Feltene created_at og updated_at oppdateres automatisk.

Orders holder orden på når en ordre ble opprettet og den totale sluttsummen.

order_items

  • order_id* - Primærnøkkel som peker på id i orders-tabellen
  • item_id* - Primærnøkkel som peker på id i items-tabellen
  • quantity - Positiv heltallsverdi som holder antallet av hver vare

I order_items ligger alle varene som er knyttet til en ordre. Primærnøkkelen er sammensatt av order_id og item_id.

Kommentarer

Denne oppgaven er utført på omlag 2 dager, noe som også setter føringer på hvordan man velger å implementere databasestrukturen. Men det er forsøkt å overholde de kravene som oppgaven stiller. Jeg diskuterer gjerne alternative strukturer for et mer skalerbart system. Jeg vil også utdype nærmere angående følgende punkter:

Slette varer
Det å slette tupler fra databasen kan være problematisk. Dette gjelder også i dette eksemplet. Ettersom en ordre inneholder fremmednøkler til varer, vil man potensielt få ordrer som peker til en ikke-eksisterende vare. Det står det skal være mulig å slette, men jeg har valgt å holde integriteten ved like. Alternativt kunne man hatt et felt (feks. active) i items-tabellen. Dette kunne vært en boolean. Man kunne så bare vist aktive varer i POS. Dette er ikke implementert.

Validering
En ordre som sendes blir på serversiden validert på følgende måte:

  • Man sjekker om item_id fins i items-tabellen.
  • Man sjekker om quantity er et heltall over 0.


Dette er fordi tabellen som inneholder varene i hver ordre (order_items) kun inneholder item_id, quantity og en fremmednøkkel, order_id, som peker på ordrenummeret. Et av problemene med dette er at man i teorien kan endre f. eks pris på klient-siden (endre Vue.js-modellen) ettersom valideringen kun sjekker om items-id'en er gyldig. Jeg har derfor valgt å returnere en ny liste hvor prisene er hentet fra varetabellen.

About

KaffebarApp for Digi Publishing

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published