2016-06-25 13 views
-1

Ich habe eine Situation, wo es eine Person und seine/ihre wöchentlichen Zahlungen gibt.
Jede Person soll eine bestimmte Menge bezahlt haben, sagen wir 100.000.
Wenn er 100.000 nicht erreicht, dann geht es weiter zur nächsten Woche.
Wenn (s) er 100.000 übergibt, reduziert es den Betrag der nächsten Woche um den übergebenen Saldo.
Woche Start am Samstag.

Ich dachte an ein Design wie dieses. Ich weiß, dass es falsch ist. so helfen Sie mir auf dieser

my rough designMysql Daten wöchentlich einfügen

aktualisieren
Auch muss ich kennzeichnen, wenn der Nutzer seine Gebühren für diese Woche bezahlt hat. Es gibt also eine Art Status, den man behalten muss.
Ich bin gekommen, vielleicht zu realisieren ich es mit dieser

SELECT ROUND(DATEDIFF(CURRENT_DATE, "2010-01-04")/7, 0) AS weeksout 

implementieren Das ist bedeutet, dass ich ein Startzählung Datum haben und verwenden können, dass mein Index in der Zahlungs Tabelle wie folgt.

Weeks

-->id 
-->week_no 
-->start_date 
-->end_date 

Zahlungen

-->id 
-->person_id 
-->week_no 
-->amount 
-->date 

payment_status

-->person_id 
-->week_no 
-->status 
-->balance 
-->carry 


Mit dem Status "Payment_status" kann ich den Status der Woche verfolgen (bezahlt, nicht bezahlt, teilweise bezahlt). Ich bin immer noch nicht damit zufrieden, ich weiß nicht warum.

+0

Setzen Sie nur Stmts ein. Keine Aktualisierungen. Diese Sache muss nach Sarbanes Oxley gefällig sein: p – Drew

+0

Ich verstehe nicht, was Sie sagen –

+0

Es ist eine gültige nth normalisierte Struktur. Sie können es ohne die Wochen-Tabelle tun, wenn Sie sich auf Datumsberechnungen verlassen. Meine Vermutung wäre, dass Sie eine Datumsdim- mension in Betracht ziehen sollten (viele Dokumente da draußen), weil Sie möglicherweise andere Verwendungen als nur eine Woche haben, wie zum Beispiel Quartals- oder Jahresbilanz usw. – Matt

Antwort

0

ich glaube, Sie mit folgenden Tabelle STRUKTUR

PERSON (ID,NAME,...,weekly_payment_amount) 
PAYMENT (YEAR,MONTH,WEEK,PERSON_ID,AMOUNT); 

für jede Woche gehen, können Sie ein Eintrag für alle PERSON IN ZAHLUNGEN TABELLE FÜR DIESE WOCHE ZEIT haben, wenn PERSON konnte seine TARGET COMPLETE HE haben 0 BETRAG FÜR DIESE WOCHE UND ABGESCHLOSSEN Betrag wird nächste Woche ADDED WENN ER ZUSATZBETRAG FÜR KOMMENDE WOCHE komplette IT-A-Eintrag mit zusätzlicher Teil hinzufügen, werden

WENN IHR EINFÜGEN NEUEINTRAG DO IN IT Weggefolgschaft Sie haben einige handhaben Logische Form Code-Ebene

$AMOUNT = WORKED AMOUNT FOR THIS WEEK 

CHECK IF ANY VALUE AVALABLE FOR THAT WEEK 

$AMOUNT_EXP= SELECT weekly_payment_amount FROM PERSON WHERE PERSON_ID =""; 
$AMOUNT_ADD= SELECT IFNULL(AMOUNT,0) AS FROM PAYMENT WHERE YEAR="" AND MONTH="" AND WEEK="" AND PERSON_ID =""; 

IF ($AMOUNT_ADD>0) THEN { 
    IF $AMOUNT_EXP> $AMOUNT_ADD+ $AMOUNT THEN { 

     UPDATE PAYMENT SET AMOUNT= 0 WHERE YEAR="", MONTH="", WEEK="", PERSON_ID =""; 
     INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR NEXT WEEK>,$AMOUNT_ADD+ $AMOUNT); 
    } 
    ELSE { 
     UPDATE PAYMENT SET AMOUNT=$AMOUNT_EXP WHERE YEAR="", MONTH="", WEEK="", PERSON_ID =""; 
     INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR NEXT WEEK>,($AMOUNT_ADD+ $AMOUNT)-$AMOUNT_EXP); 
    } 

} 
ELSE { 
    IF $AMOUNT_EXP> $AMOUNT_ADD+ $AMOUNT THEN { 

     INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR CURRENT WEEK>,0); 
     INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR NEXT WEEK>,$AMOUNT_ADD+ $AMOUNT); 
    } 
    ELSE { 
     UPDATE PAYMENT SET AMOUNT=$AMOUNT_EXP WHERE YEAR="", MONTH="", WEEK="", PERSON_ID =""; 
     INSERT INTO PAYMENT(YEAR,MONTH,WEEK,PERSON_ID,AMOUNT) VALUES (<YEAR,MONTH,WEEK FOR NEXT WEEK>,($AMOUNT_ADD+ $AMOUNT)-$AMOUNT_EXP); 
    } 
} 
+0

Können Sie einfügen und Abfragen Ihrer Lösungen auswählen? –

+0

Ich möchte nur MySQL, nicht mehr als das. –