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.
6 svar · 1 288 visningar · startad av evilaid
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??
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.
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..
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
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
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>
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