Avatar billede groyk Novice
13. august 2010 - 22:07 Der er 5 kommentarer og
1 løsning

Approach til rabat tabel

Hej

Jeg mangler lidt input til et nyt design af en rabat tabel.

I dag har jeg en varetabel med vejl. udsalgspris.

Derudover har jeg en tabel der indeholder rabat aftaler

Rabatter kan kodes efter kunde(r), kundegruppe(r) | vare(r), varegruppe(r) | antal, omsætning | assorteret | pris

Prisen er et funktions felt hvor der kan bruges to variabler $vejl og $kost.

I dag henter jeg relevant data og sortere efterfølgende i php.

Jeg kunne dog godt tænke mig en løsning hvor jeg kan hente og sortere priser direkte fra sql.

Måske det ikke giver meget mening, men lidt hjælp på vejen ville være fint.
15. august 2010 - 06:23 #1
Ok, lad mig proeve at forstaa.  Du har oprettet spoergsmaalet under MySQL, saa jeg gaar ud fra at du har dine data i MySQL tabeller, saa lad mig foerst proeve at forstaa disse tabeller. 

Jeg gaar ud fra at du har en Varetabel med (mindst) disse fire felter: vareid, varetype, varebetegnelse, vejl_pris. 

En rabat er vel en procentvis reduktion af vejl_pris.  Hvad afhaenger rabat-procenten af?  Spoergsmaalet antyder at rabatten afhaenger af varegruppe (hvor du maaske kun kan give lille rabat paa tekstiler paa grund af konkurrence fra Kina men stoerre rabat paa moebler) antal (for eksempel 5% for 100-199, 7% for 200-499, 10% for 500-999 o.s.v.).  Rabatten afhaenger ogsaa af antal (for eksempel paa moebler 5% for 10-19, 7% for 20-49, og 10% for 50 og over).  Og saa afhaenger rabatten af kundens omsaetning saa maaske kunder med mere end en million faar standardrabatterne plus 20% (12% hvis standardrabatten er 10%) og kunder med mere end ti millioner faar standardrabatterne plus 33%.

Hvis jeg, i princippet, er paa rette spor saa er spoergsmaalet hvor du bevarer disse rabatregler.  En mulighed er at du har en rabat_regel tabel med felterne rabat_regel_id, varetype, og antal, for eksempel med disse records:

id varetype antal1 antal2 rabat
1    textil  100    199    3
2    textil  200    499    4
3    textil  500    1000  6
4    moebler  10      9    5
5    moebler  20    49    7
6    moebler  50    1000  10

og saa en omsaetnings_rabat tabel som for eksempel
id omsaetning rabat_foroegelse
1  1,000,000  1,2
2  10,000,000  1,33

Og saa har du uden tvivl en Kundetabel med felter som id, kundenavn, og omsaetning.

Hvis du skal finde ud af hvad kunden med kundeid 25 skal betale for 225 stk af varen med vareid 512 skal du saa nok have fat i en query som denne - den er ikke testet men er blot et eksempel.

SELECT 225*vejl_pris*(100-rabat)*(SELECT rabat_foroegelse FROM Omsaetningrabat o WHERE omsaetning = (SELECT omsaetning FROM Kunder WHERE kundeid = 25)) AS pris FROM Varer v JOIN Rabatregler r ON v.varetype = r.varetype WHERE v.vareid = 512 AND 225 BETWEEN antal1 AND antal2.

Det var saa min forespoergsel/brainstorming.  Foerst og fremmest har jeg forstaaet din tabelstruktur korrekt?  Hvis ikke, hvor gik jeg galt.  Derefter har jeg gaettet rigtigt med hensyn til problemet?  Hvis ikke saa fortael mig.
Avatar billede groyk Novice
15. august 2010 - 21:04 #2
Inerestant. Som sagt er den "nye" rabat tabel(ler) ikke lavet endnu.

Systemet i dag har en tabel der indeholder mine varer, naturligvis med felter som vareid, varetekst, vejl_pris, varegruppe og kost_pris

Min rabat tabel ser i dag således ud. Men det er den der står til skrotning.


discount_id: Unikt ID til rabat reglen
discount_group: evt. hvis der skal gives assorteret rabat med andre varer
discount_item: varenr
discount_customer_area_type: Kundenr|Kundegruppe|Allekunder   
discount_customer_area: Gruppenavn|kundenr    
discount_value_type: Rabat I %|Fast prin|Kost+
discount_value: ex. 15%|244Kr.|kost+30%   
discount_volume: antal emner der skal gives rabat på


Mit problem i dag er at jeg er nød til at trække en del af rabat aftalerne ud og derefter beregne hvilken rabat der er bedst og dermed kundens pris.

Kunne godt tænke mig noget ala det eksempel du giver, men er dog i tvivl om ikke det bliver meget kompliceret når der blandt andet skal være mulighed for assorteret rabat.

Prøver lige endnu engang at se om jeg kan forklare hvad jeg præcist vil.

1. Definere hvilke vare og grupper rabat reglen gælder og IKKE gælder for.
ex.

groups: møbler/sofaer, møbler/stole
groups_deny: møbler/sofaer/puder
items: 2546587, 4685763, 4657643
items_deny: 5867635 (måske en speciel sofa)

2. Definere hvilke kunder og kundegrupper rabat reglen gælder og IKKE gælder for

customer_groups: engros
customer_groups_deny: engros/planter
customers: 4675437
customers_deny:


3. Sæt om rabatten er assorteret (true/false)
4. Beregn rabatten

1stk: $vejl_pris-15%
5stk: $vejl_pris-20%
oms-5000: $cost_pris+30%


Ud fra ovenstående "Form" vil jeg gerne kunne lave mine inserts til min(e) rabat tabelle(r).

Tanken med både punkt 1 og 2 er at vælge dem ud i ex. en træstruktur der viser grupper og varer|kunder.
15. august 2010 - 22:46 #3
Vi kommunikerer ikke!  Jeg kan ikke bidrage til loesning hvis jeg ikke forstaar problemstillingen knivskarpt, og jeg er ikke intelligent nok til at gennemskue den forklaring du giver.  Din forklaring forekommer mig vag og taaget, uden tvivl fordi det er min hjerne der er vag og taaget.  Maaske burde vi stoppe med det samme saa jeg ikke spilder mere af din tid.  Men forinden proever jeg lige en gang mere at demonstrere mit niveau som du er noed til at tale ned til.

Et problem er at jeg ikke kender udtrykket assorteret rabat.  Du maa forklare mig hvad det indebaerer.

Jeg er heller ikke klar paa hvad hovedreglen er.  Er hovedreglen at en kunde betaler de vejledende priser med mindre der er betingelser/rabatregler der giver mulighed for rabatter?  Saaledes at kunden skal kvalificere og varen skal kvalificere?  (Hvis sofaer kvalificere og engros kunder kvalifierer saa skal begge betingelser vaere opfyldt (sofaer og engroskunder) foer der gives rabat?)

For hver af de to betingelser (kunder og varer) har du saa regler baseret paa hovedgrupper, undergrupper, og individuelle kunder/varer.  Varer faar ingen rabat med mindre de er i en "groups" saasom moebler/sofaer og moebler/stole.  Saaledes faar (for eksempel) porcelaenshunde ingen rabat.  Hvis en vare-hovedgruppe faar rabat saa kan der goeres undtagelser for undergrupper, saasom moebler/sofaer/puder eller for individuelle sofaer for eksempel item 2546587.  Og kunder faar ingen rabat med mindre de falder i en hovedgruppe med rabat, for eksempel engros.  Saa for eksempel detail kunder faar ingen rabat.  Og i en rabatgruppe kan der goeres undtagelser for undergrupper saasom engros/planter (jeg gaar ud fra at "planter" er en kunde der planter noget, ikke blomster og buske, for saa hoerer det hjemme under varer, ikke kunder.)

Saa hvis enten varen eller kunden ikke kvalificerer saa er der ingen rabat og det er de vejledende priser der gaelder (gaar jeg ud fra.)  Hvis baade kunden og varen kvalificerer saa maa stoerrelsen af rabatten fastsaettes.  Stoerrelsen af rabatten afhaenger af to faktorer, "antal" og "omsaetning". Omsaetning, er det den paagaeldende kundes totalomsaetning aaret foer (eller maaneden/kvartalet foer) eller er det stoerrelsen af den enkelte ordre?  Hvis omsaetning er stoerrelsen af den enkelte ordre saa kunne kriteriet antal maaske skrottes?

Og saa synes du at have to metoder at beregne netto prisen, vejledende pris minus en procentsats (som afhaenger af en kombination af varer, kunder, og antal) og kostpris plus en procentsats.  Hvornaar bruger du den ene og hvornaar (og hvorfor) bruger du den anden?
Avatar billede groyk Novice
16. august 2010 - 20:46 #4
Tror nu ikke det er dit niveau der fejler noget. Måske nærmere mig der ikke er vant til at opsætte en ordenlig kravspecifikation.

1. Assorteret rabat er hvis en kunde ex. køber 1 stk. af 5 forskellige varer der er i samme rabat regel. Hvis assorteret er sat til true, skal rabatten beregnes ud fra 5 Stk. / samlet omsætning

2. Hoved reglen er at kunden betaler vejl. udsalgspris med mindre kunden er kvalificeret til andet gennem rabat reglerne.

3. kundegrupper og varegrupper kan være i ubegrænsede antal niveauer. der kan gives rabat efter gruppe eller varenummer. Der kan ekskluderes efter samme fremgangsmåde. (Forestil dig en træstruktur som i stifinder hvor du kan markere hele mapper, enkelte filer. Eller evt. markere en mappe, og derefter fravælge en enkelt fil i den markerede mappe)

4. Ja. Hvis både varen og kunden kvalificere sig, skal rabatten beregnes. Hver linie repræsentere en rabat enten ud fra antal emner i kurven. eller samlet omsætning af varen i kurven. (Det er kun et eksempel at begge løsninger er sat op. - normalt vis vil kun stk. eller oms. blive brugt i en regel.)

5. Ja, rabatter kan beregnes efter 2 metoder. 1. Beregnes ud fra salgspris (Kan dog være både være - antal %, - antal kr.) eller beregnes efter kost pris.
Priskalkulationen skal ses som et regne stykke hvor, $kost og $vejl kan bruges som variabler. Kunne egentlig være følgende selvom det måske ikke giver mening: $vejl-(2*$kost)/0.5

Tror umiddelbart det er den bedste forklaring jeg kan komme med. Hvis det stadig virker lidt tåget, skal jeg ikke bruge mere af din tid. Uanset må du gerne smide et svar som tak for forsøget. Dialog bidrager altid med noget.
17. august 2010 - 05:32 #5
Jamen saa tror jeg at jeg skal lade det blive ved dialogen.  Jeg kan se at spoergsmaalet gaar videre end et simpelt mysql problem.
Avatar billede groyk Novice
17. august 2010 - 16:49 #6
Hej igen Christian

Det er helt OK. Takker for forsøget.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester