webForumDet fria alternativet

struktur för att hålla lagersaldo!

Databaser & SQL

6 svar · 1 288 visningar · startad av evilaid

Medlem sedan apr. 2009433 inlägg
Frågan#1

Rubriken kanske inte säger så mycket och detta kanske inte är rätt forum men jag gör ett försök.

Jag sitter och klurar på en databasstruktur för ett system som där jag vill ha ett lagersaldo.
Alltså: jag har en tabell med artiklar, sen har jag en tabell för alla ordrar som kräver en viss mängd av varje artikel. Frågan är hur jag hela tiden ska kunna ha ett uppdaterat saldo för varje artikel?
Funderar på om jag ska en tabell där alla inköp (som fyller på saldot) redovisas?
Ett alternativ kunde ju vara att i artikel tabellen ha en kolumn för lagersaldo och varje gång ett inköp görs eller en order läggs så ändras saldot i artikeltabellen..

Ett bättre alternativ hade varit om man haft ett saldo för varje ögonblick man tittar (även tillbaka i tiden). Så om man tittar på saldot för exempelvis 20 januari 2011 så summerar man alla ordrar fram tills det datum som belastat en specifik artikel och sen summerar man alla inköp och får ett saldo för det ögonblicket? Men antar att detta blir ganska tungrot om man skriver ut många artikelrader och samtidigt ska få med aktuellt saldo för den tidpunkten?

Någon med idéer om hur man ska lägga upp tänket??

Medlem sedan maj 20011 826 inlägg
#2

Ja, varför inte ha en tabell med alla inköp, justeringar och inventering. Sen har du en tabell med alla lagda ordrar (minskar lagerantalet).

Sen kan du köra en UNION-sats och summera antalet från de bägge tabellerna och får fram aktuellt lagersaldo.

Medlem sedan apr. 2009433 inlägg
#3

Jag har funderat lite i den linjen du är inne på..

Nu har jag en tabell för utlevererade: tbl_order_articles
id
article_id
amount

och artikeltabellen: tbl_articles
id
name

med en relation mellan tbl_order_articles och tbl_articles

men som du säger så skulle man ha följande

tbl_orders (försäljning)
Id | ArtId | date

tbl_purchases (inköp)
Id | ArtId | date

tbl_articles (artikelnamn)
Id | name

tbl_storage (tabell för lagerförändringar)
Id | ArtId | amount

där antalet bara anges i tbl_storage och med en relation till övriga tabeller.. Är detta fel tänkt? bir det för tungrott när man skapar för mycket relationer mellan tabellerna?

Vet inte riktigt vad UNION innebär men ska söka på det..

Medlem sedan maj 20011 826 inlägg
#4

Du kan ha som du hade tänkt från början:

tbl_order_articles
id | art_id | quantity

tbl_articles
id | name

Sen skapar du en tabell för övriga lagerförändringar:
tbl_inventory
id | event_id | art_id | quantity

där event_id kan vara 1 = Inköp, 2 = justering osv. Quantity kan var t.ex. 3 eller -5. Det är onödigt att skapa många olika tabeller med samma struktur som du hade tänkt där med tbl_purchases och tbl_orders

Medlem sedan apr. 2009433 inlägg
#5

Men frågan är om det inte blir lite krångligare att summera saldot för en viss tid då?

beroende på om jag kollar ordrar för vecka 3 2011 så vill jag ha det saldot som gällde då? och skriver jag ut en lista med artiklar så vill jag få med aktuellt saldo för varje artikel.
Hur skulle en sån fråga se ut isåfall om jag skriver ut artikel lista och samtidigt vill ha saldot?

tack för din hjälp

Medlem sedan maj 20011 826 inlägg
#6

Du får summera quantity med artikel-id som villkor för de två tabellerna och lägga med en tidsstämpel. Antingen summerar du tabellerna var för sig eller så kombinerar du dem i en enda fråga.

SELECT SUM(quantity) AS saldo FROM tbl_inventory WHERE art_id = <id> AND datum < <datum>

SELECT SUM(quantity) AS saldo FROM tbl_order_articles WHERE art_id = <id> AND datum < <datum>

eller nåt liknande

SELECT SUM(quantity) AS saldo FROM
(SELECT quantity FROM tbl_inventory WHERE art_id = <id> AND datum < <datum>
UNION SELECT 0-quantity AS quantity FROM tbl_order_articles WHERE art_id = <id> AND datum < <datum>

Medlem sedan apr. 2009433 inlägg
#7

Okey mitt upplägg som det är tänkt nu är att jag har en tabell för orderhuvud och en för alla orderrader. Saken är den att det blir i snitt 100 orderrader för varje order och kanske en 100 ordrar i veckan så i tabellen tbl_orders blir det ca 10 000 poster i veckan.. Här är min fundering lite vilket sätt som är bäst med så mycket poster??
Strukturen skulle alltså bli:

tbl_order_head (försäljning)
Id | ArtId | date

tbl_orders (försäljning)
Id | order_head | ArtId | date | quantity

tbl_articles (artikelnamn)
Id | name

tbl_inventory
id | event_id | art_id | quantity

Så ovan upplägg är enigt ditt förslag.. Men du tror inte det blir effektivare att lägga över även quantity från tbl_orders och registrera det i inventory. Vilket blir effektivast när man skapa frågorn?

Jag var itne riktigt med på din SQl frågar (beroende på okunskap).

Säg med ovan upplägg att jag vill lista alla artiklar från tbl_articles och få med aktuellt saldo, hur skulle en sån fråga se ut??

mvh

264 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)