Datenbankdesign für die Überprüfung der Prognose

8

Ich versuche, mehr über relationale Datenbanken zu erfahren, und ich dachte, es gibt keinen besseren Weg zu lernen, als tatsächlich etwas zu tun. Ich beschloss, einen persönlichen Versuch zu unternehmen, um die persönliche Budgetbuchhaltung und -prognose zu untersuchen. Ich habe bisher einige Nachforschungen angestellt und möchte einen Einblick in mein aktuelles Datenbankdesign und meine Normalisierung erhalten.

Was sind Ihre Gedanken und Vorschläge zu meinem aktuellen Datenbankdesign? Ich habe unten einige Informationen aufgenommen, um Ihnen zu helfen, mir zu helfen :)

Offenlegung: Dies ist ein persönliches Projekt. Nicht für Hausaufgaben oder für die Arbeit.

Geschäftsdaten

  • Eine Bank ACCOUNTkann viele habenENTRIES

  • Ein ENTRYkann entweder ein CREDIToder seinDEBIT

  • An ENTRYhat ein Datum, an dem es gutgeschrieben oder belastet wurde
  • An ENTRYhat eine SinglePAYEE
  • Ein ENTRYkann einem zugeordnet werdenBUDGET CATEGORY

  • A CREDIThat einen Betrag vonENTRY

  • A CREDIThat eine Beschreibung derENTRY
  • A CREDITkann in Zukunft geplant werden
  • A CREDITkann in Häufigkeit und / oder Menge erneut auftreten

  • A DEBIThat einen Betrag vonENTRY

  • A DEBIThat eine Beschreibung derENTRY
  • A DEBITkann in Zukunft geplant werden
  • A DEBITkann in Häufigkeit und / oder Menge erneut auftreten

  • A PAYEEhat einen Namen

  • A BUDGEThat vieleBUDGET CATEGORIES

  • A BUDGETkann nur einem einzelnen Kalendermonat zugeordnet werden

  • A BUDGET CATEGORYkann viele enthaltenENTRIES

  • A BUDGET CATEGORYhat einen Namen
  • A BUDGET CATEGORYhat einen BUDGETBetrag

  • A FORECASThat ein Startdatum

  • A FORECASThat ein Enddatum
  • A FORECASThat ein Anfangsgleichgewicht
  • A FORECASThat vieleFORECASTED DAYS
  • A FORECASThat eine SingleFORECASTED BUDGET

  • A FORECASTED DAYhat ein einziges Datum

  • A FORECASTED DAYkann viele habenFORECASTED DEBITS
  • A FORECASTED DAYkann viele habenFORECASTED CREDITS

  • A FORECASTED DEBIThat einen Betrag

  • A FORECASTED DEBIThat eine Beschreibung
  • A FORECASTED DEBIThat aFORECASTED BUDGET CATEGORY
  • A FORECASTED DEBIThat eine SinglePAYEE
  • A FORECASTED DEBITkann wiederkehren

  • A FORECASTED CREDIThat einen Betrag

  • A FORECASTED CREDIThat eine Beschreibung
  • A FORECASTED CREDIThat aFORECASTED BUDGET CATEGORY
  • A FORECASTED CREDIThat eine SinglePAYEE
  • A FORECASTED CREDITkann wiederkehren

  • A FORECASTED BUDGEThat vieleFORECASTED BUDGET CATEGORIES

  • A FORECASTED BUDGET CATEGORYkann viele habenPAYEES

  • A PAYEEhat einen Namen

Beispieldaten

+----------------+----------+------------------+----------------+---------------+--------------+------------------+
| Account Number |   Date   |   Description    |   Payee Name   | Credit Amount | Debit Amount | Budget Category  |
+----------------+----------+------------------+----------------+---------------+--------------+------------------+
|          25178 | 10/01/18 | Payroll          | My Work        | $1000.00      |              | Income           |
|          25178 | 10/02/18 | McRibs for Lunch | McDonalds      |               | $13.12       | Fast Food        |
|          25178 | 10/03/18 | Electric Bill    | FPL            |               | $133.68      | Electric         |
|          25178 | 10/04/18 | Water Bill       | City Water Co. |               | $58.12       | Water and Sewage |
|          25178 | 10/05/18 | Clothes for Work | Target         |               | $65.02       | Clothes          |
|          99875 | 10/28/18 | Bonus Check      | My Work        | $1300.00      |              | Income           |
+----------------+----------+------------------+----------------+---------------+--------------+------------------+

+----------+-------------+--------------+---------------+-----------------+------------------+
| Due Date |    Payee    | Debit Amount | Credit Amount | Budget Category | Re-Occurs On Day |
+----------+-------------+--------------+---------------+-----------------+------------------+
| 10/28/18 | Mortgage Co | $1500.00     |               | Mortgage        |               28 |
| 10/01/18 | My Work     |              | $990.00       | Income          |                1 |
| 10/03/18 | FPL         | $110.00      |               | Electric        |                3 |
+----------+-------------+--------------+---------------+-----------------+------------------+

Aktuelles Datenbankdesign

Ich dachte, es wäre hilfreich zu wissen, WARUM ich etwas getan habe, damit Sie meine Logik und Argumentation verstehen können.

Revision4-Prognose

  • Jedes Budget kann mehr als 1 Budgetkategorie enthalten. Ich habe eine isActiveSpalte zu beiden hinzugefügt Budgetsund BudgetCategoriesfür den Fall, dass ich ein anderes Budget oder eine andere Budgetkategorie reaktivieren möchte.
  • Ich habe Transaktionen in zwei sehr ähnliche geteilte Tabellen aufgeteilt, Debitsund Creditswie ich sah, gab es zwei Arten von Transaktionen.
  • Um geplante oder wiederkehrende Transaktionen zuzulassen und zu verfolgen, habe ich eine ScheduledTransactionsTabelle erstellt, in der ich zwei verschiedene Beträge haben konnte, einen erwarteten Betrag in ScheduledTransactionsund einen tatsächlichen Betrag in entweder Debitsoder Credits.

Revision4-Main

  • Ich nahm an, dass jede Prognose ein Start- und Enddatum sowie eine Startbilanz benötigen würde.
  • Jeder Tag müsste prognostiziert werden, um die Summe der Belastungen und Gutschriften bestimmen zu können.
  • Ich denke, ich hätte die anderen Tabellen verwenden und ein paar isForecasted Columns hinzufügen können, und es hätte genauso funktioniert. Ich habe mich entschieden, diesen Weg nicht zu gehen, um die beiden zu entkoppeln, falls Änderungen vorgenommen werden müssten und wenn dies eine groß angelegte Anwendung wäre, die große Prognosen in dieselben Tabellen liest und schreibt wie tatsächliche Transaktionen, von denen ich denke, dass sie a verursachen würden Protokoll der Leistungsprobleme.
Jon H.
quelle
Nur ein Gedanke: Benötigen Sie Metadatenspalten in jeder Tabelle, z. B. wann die Zeile eingefügt wurde, wer sie eingefügt hat, wann sie zuletzt aktualisiert wurde, wer sie aktualisiert hat, welchen Prozess usw.?
Biju Jose
Da dies für die persönliche Entwicklung bestimmt ist, brauche ich nichts davon.
Jon H
1
Das Schema und die Normalisierungsregeln hängen davon ab, wie Sie das Problem modellieren. Traditionell haben Sie separate Tabellen für Istwerte, Budgets und Prognosen. Sie können sie jedoch alle in einer einzigen Tabelle mit einem Attribut oder Flag enthalten, um den Unterschied zu kennzeichnen. Gleiches gilt für DR / CR. Gleiche Tabelle, aber verwenden Sie +/- Werte, um E / A anzuzeigen. Sobald Sie in die doppelte Buchhaltung wechseln, benötigen Sie beide Seiten einer Gleichung, um Konten auszugleichen und zu erstellen. Gehst du so weit
Sir schwört viel
1
Ich denke, dies ist ein sehr ehrgeiziges Projekt, um etwas über Datenbanken zu lernen. Db Schema Design und Normalisierung ist eine Sache, genaue Aufzeichnungen sind eine andere, Buchhaltung und Prognose sind wieder noch komplexer. Welches ist Ihre Priorität?
Sir schwört viel
@ SirSwears-a-lot Ja, ich gehe nicht so weit. Denken Sie nur daran, Ihre persönlichen Finanzen in verschiedenen Budgetgruppen zu erfassen und einfache Projektionen wie ... Was wäre, wenn ich eine Neuwagenzahlung erhalten und 4 Monate in den Urlaub fahren würde? Wie würde mein Verhältnis von Einkommen zu Schulden in einer Häufigkeit von Woche zu Woche oder von Monat zu Monat aussehen? Oder was ist, wenn ich mein Lebensmittelbudget von 500 auf 600 geändert habe?
Jon H

Antworten:

2

Allgemeiner: Ich würde mit einer Liste von Fragen beginnen, die ich beantworten möchte. Mögen:

Wen bezahle ich am meisten? Habe ich diesen Monat die Abwasserrechnung bezahlt? Was sind meine Bargeldanforderungen für diesen Monat? Muss ich rausgehen und Sachen zum Essen töten?

Die Art dieser Fragen sollte das Design des Schemas bestimmen.

Das heißt, dieses Schema sieht ziemlich gut aus.

Ich stimme der Idee zu, dass die Belastungen und Gutschriften in einer einzigen Tabelle zusammengefasst sein könnten.

Hawkins Dale
quelle
1

Ich würde die Zahlungsempfänger in Bezug auf Budget und Kontotyp identifizieren. Angenommen, Sie müssen die Zahlungsempfänger auflisten oder konsultieren. Ich hätte auch eine aktive Spalte für Zahlungsempfänger. Es könnte schön sein zu wissen, welches Konto in Zukunft welches Budget zahlt.

Eurico
quelle