Datenbanktabellen für einen Convenience -Shop in den fünf normalen Formularen

Datenbanktabellen für einen Convenience -Shop in den fünf normalen Formularen
Dies ist der fünfte und letzte Teil der Serie, die fünf normalen Formen. In diesem Teil der Tutorial -Serie werden alle Tabellen mit einer Modifikation auf der Produkttabelle präsentiert. Wie der Gewinn oder Verlust aus der Datenbank berechnet wird.

Diese Tutorial -Serie folgt einer Geschichte, die wie folgt ist: Ein Vater ist gerade gestorben und hat etwas Geld für seinen Sohn hinterlassen. Der Sohn beschloss, das Geld in einen Convenience -Shop zu investieren. Der Laden ist bereits ausgestattet, und der Verkauf an Kunden hat bereits begonnen.

Zu Beginn des Geschäfts wusste sowohl der Sohn, der Eigentümer als auch seine Mitarbeiter, Angestellte in dieser Tutorial -Serie, nichts über normale Formen wusste.

Sie, der Leser, hat diese fünf Normalform -Tutorial -Serie abgeschlossen und Sie sind auch Datenbankentwickler. Der Besitzer ist dein Freund. Sie besuchten den Laden viermal, einmal am Tag, in den letzten vier Tagen. In den ersten drei Tagen haben Sie sowohl den Inhaber als auch seine Mitarbeiter über die 1nf, 2nf und 3NF unterrichtet.

Gestern haben Sie nur den Besitzer in seinem Büro besucht und ihn auf dem BCNF, 4NF und 5NF geschult. Heute haben Sie nur den Eigentümer besucht, um die Produkttabelle zu verbessern, alle Tabellen zu präsentieren und zu erklären, wie der Gewinn oder Verlust berechnet werden kann.

Zunächst werden die Regeln für alle normalen Formen zusammengefasst.

Regeln der normalen Form

Theoretisch kann eine Tabelle erstellt und in der fünften Normalform befindet. Eine Tabelle wird jedoch von der ersten, zweiten, dritten, boyce codd, vierten und der fünften Normalformen überprüft.

Eine Tabelle ist in 1NF, wenn keine der folgenden Regeln verletzt wird:

  1. Alle Spalten in einer Tabelle sollten eindeutige Header -Namen haben.
  2. Jede Zelle muss nur einen einzelnen Wert haben.
  3. Die in einer Spalte gespeicherten Werte sollten vom gleichen Typ sein.
  4. Die Zeilen sollten unterschiedlich sein.
  5. Die Reihenfolge der Spalten oder Reihenfolge der Zeilen spielt keine Rolle.

Eine Tabelle ist in 2nf, wenn keine der folgenden Regeln verletzt wird:

  1. Die Tabelle muss bereits in der ersten normalen Form vorliegen.
  2. Es darf keine teilweise Abhängigkeit geben.

Eine Tabelle ist in 3NF, wenn keine der folgenden Regeln verletzt wird:

  1. Es sollte bereits in der zweiten normalen Form sein.
  2. Es sollte keine transitive Abhängigkeit haben.

Eine Tabelle befindet sich in BCNF, wenn keine der folgenden Regeln verletzt wird:

  1. Die Tabelle sollte bereits in der dritten normalen Form vorliegen.
  2. Kein Nicht-Primat-Attribut (Spalte) sollte vom Teil des zusammengesetzten Primärschlüssels abhängen.

Eine Tabelle ist in 4NF, wenn keine der folgenden Regeln verletzt wird:

  1. Es ist bereits in boyce-codd normaler Form.
  2. Die Tabelle hat keine mehrwertige Abhängigkeit.

Eine Tabelle ist in 5NF, wenn keine der folgenden Regeln verletzt wird:

  1. Es befindet sich bereits in der vierten Normalform.
  2. Die Tabelle hat keine Join -Abhängigkeit.

Wenn die Tabelle nicht der normalen Form entspricht.

Die Tische

Produkttabelle

Der Produkttisch, den wir bisher ankamen, ist:

Produkte (ProductID, CategoryId, Lieferierer, Produktname, Unitprice, QuantityInstock, Reorderlevel)

CategoryId und Lieferierer sind Fremdschlüssel, die den Hauptschlüssel der Kategorientabelle bzw. der Tabelle der Lieferanten entsprechen.

Diese Tabelle ist in 5NF, wenn sich der Unitprice und die QuantityInstock nicht mit der Zeit ändern. Sogar der Lieferant eines bestimmten Produkts kann sich ändern. Der Einfachheit halber wird jedoch in diesem Tutorial die Änderung des Lieferanten nicht behandelt. Der Einheitspreis für alle Produkte ändert sich im Laufe der Zeit, wenn auch langsam. Derzeit hat der Einheitspreis für viele Produkte auf der ganzen Welt aufgrund des Russland-Ukraine-Krieges zugenommen. Da einzelne Kunden in einem Geschäft kaufen, ändert sich die Menge in den Lagerbeständen (reduziert sich zuerst, bevor sie aufgefüllt werden). Die Menge eines bestimmten Produkts auf Lager ist die Summe des Regals und was im Laden ist (Backup). Der Einfachheit halber wird diese Trennung in dieser Tutorial -Serie nicht durchgeführt.

Mit diesen sich ändernden Spalten befindet sich diese Tabelle jetzt in 1NF. Die Tabelle muss in zwei Teile aufgeteilt werden, wobei sich die sich ändernde Gruppe in die eine Richtung geht, während der Rest der Tabelle bleibt.

Die Kindertische werden:

Produkte (ProductID, CategoryId, Lieferierer, Produktname, Reorderlevel)

Und

Produktstaaten (UnitPrice, QuantityInstock)

Die neue Tabelle heißt Produktstaaten. Es braucht eine eigene ID sowie die Produkt -ID. Die Tabelle sollte tatsächlich sein:

Produktstaaten (ProductStateid, ProductID, Datum, Unitprice, QuantityInstock)

Das ProductStateid ist automatisch inkrementiert und ab 1 ab 1. Eine Datumsspalte wird hinzugefügt, um anzuzeigen, wann die Änderung stattgefunden hat. Der Hauptschlüssel für die ProductStates -Tabelle ist ein zusammengesetzter Schlüssel, der aus ProductStateid und ProductID besteht. Die beiden Tabellen sind mit der Produktidspalte verknüpft. Die ProductStates -Tabelle befindet sich in 2NF, da es keine teilweise Abhängigkeit gibt. In jeder seiner Zeilen bestimmt entweder die Werte von Datum, Unitprice oder QuantityInstock beide Schlüssel. In der Tat sind beide Tabellen jetzt in 5NF vorhanden, da keiner der Regeln der normalen Form gegen die Normalform verletzt.

Wenn die beiden vorherigen Tabellen nicht mit einer Sicherung in einem Computer aufbewahrt werden, sollten sie in einem Hauptbuch aufbewahrt werden. Die erste Hälfte des Hauptbuchs kann die Produkttabelle haben und die zweite Hälfte kann die Produktstatentabelle haben. Die ProductStates -Tabelle wächst mit der Zeit.

Eine eingehende Spalte des Booleschen Typs kann zum rechten Ende der Produkttabelle hinzugefügt werden, um anzuzeigen, ob das Produkt eingestellt wurde. Das heißt, der Laden befasst sich nicht mehr mit diesem bestimmten Produkt.

Die Produkttabellen und der Rest der Tabellen in der Datenbank befinden sich jetzt in der fünften Normalform.

Lieferanten Tisch

Die Tabelle Notation für die Tabelle der Lieferanten lautet:

Lieferanten (Lieferierer, Name, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Wenn dieser Tisch nicht mit Backup in einem Computer aufbewahrt wird, sollte er in einem Hauptbuch aufbewahrt werden. Eine Datumsspalte kann hinzugefügt werden, um den ersten Tag anzugeben, an dem der Lieferant mit dem Convenience Shop beschäftigt wurde. Eine abgesetzte Spalte kann auch hinzugefügt werden.

Kunden Tabelle

Die Tabellenbekämpfung für die Tischkundenstelle lautet:

Kunden (Customerid, Customername, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Wenn dieser Tisch nicht mit Backup in einem Computer aufbewahrt wird, sollte er in einem Hauptbuch aufbewahrt werden. Eine Datumsspalte kann hinzugefügt werden, um den ersten Tag anzugeben, an dem sich der Kunde mit dem Convenience Shop beschäftigt.

Ein Customerid kann für Passanten sein: Menschen, die die Stadt besucht haben und in Hotels, Feiertagemachern, Touristen usw. bleiben.

Verkaufstische

Die drei Verkaufstische sind:

Umsatz (SaleId, Datesold, CustomerId, EmployeeID)
Saledetails (SaleId, ProductID, EinheitenPrice, Menge, Kreditvergabe, Rabatt)
CategoryDelivery (CategoryID, CustomerID, Kategorie, Transport)

In der Saledetails -Tabelle wird eine Kreditsäule des Booleschen Typs eingeführt, falls dem Kunden vertraut werden können. Nur der Eigentümer sollte die Kreditvergabe genehmigen. In der CategoryDelivery-Tabelle wird eine Spalte für die Kosten des Transports zur Lieferung hinzugefügt.

Wenn diese Tabellen nicht mit Backup in einem Computer aufbewahrt werden, sollten sie in einem Hauptbuch namens Sales Ledger aufbewahrt werden. Die linke Hälfte des Hauptbuchs kann für den Verkauf und die Saledetails -Tabellen verwendet werden (siehe unten). Die rechte Hälfte des Hauptbuchs kann für die CategoryDelivery -Tabelle verwendet werden.

Wenn die Tische in einem Hauptbuch aufbewahrt werden, wäre der Saledetails -Tisch:

Saledetails (SaleId, ProductID, EinheitenPrice, Menge, Kreditvergabe, Rabatt, Totalsold, Totallent)

Mit den Spalten von Totalsold und Totallent hinzugefügt. Diese Säulen sollten am Ende des Tages oder wöchentlich am Ende der Woche von Ihnen, dem Inhaber.

Wenn die Tabellen mit Backup in einem Computer aufbewahrt werden, würde die Datenbanksoftware (Programm) die Summen berechnen.

Die Saledetails -Zeilen, die der Verkaufszeile entsprechen. Für die linke Hälfte des Verkaufsbuchs verfügt die linke Seite des geöffneten Hauptbuchs über die Verkaufsdaten, während die rechte Seite die Daten für Verkaufsdetails wie folgt enthält:

Verkaufs-/Saledetail -Tabelle

Wenn ein Kunde kam und für bestimmte Produkte bezahlte und die anderen ausgeliehen hat, sollten dies zwei Saledetails sein. Total_Sold = u.S.P x Menge. Eine ähnliche Berechnung erfolgt für Total_Lent. Die Grandsummen für Totasold und Totalent für den Ende der Tabelle können am Ende des Tages oder am Ende der Woche oder am Ende des Monats abhängig von der Häufigkeit des Umsatzes berechnet werden. Alle Summen sollten von Ihnen, dem Inhaber, der als Manager fungiert, berechnet werden.

Bestellungstische

Die Bestellentische sind:

Bestellungen (Orderid, Datesold, Lieferierer, Mitarbeiter)
OrderDetails (orderid, productId, unitcostprice, Menge, Rabatt)

Wenn diese Tische nicht mit Backup in einem Computer aufbewahrt werden, sollten sie in einem Hauptbuch namens Kaufbuch aufbewahrt werden. In diesem Fall sollte die Bestelldetail -Tabelle sein:

OrderDetails (orderid, productId, unitcostprice, Menge, Kreditaufnahme, Rabatt, Total -korbled, Totalborreed)
Mit den Ausleihen, Total -korble -und Totalborded -Säulen hinzugefügt.

Wenn ein Geschäft einige Bestellungen bezahlt und einige ausgeliehen hat, sollten dies zwei Auftragsdetails sein.

Hier gibt es keine entsprechende Lieferungstabelle. Die Aufzeichnungen für die Bestellungen und Auftragsdetails sollten im Kaufbuch auf ähnliche Weise vorgenommen werden.

Alle Tische in 5nf

Products Ledger

Produkte (ProductID, CategoryId, Lieferierer, Produktname, Reorderlevel)
Produktstaaten (ProductStateid, ProductID, Datum, Unitprice, QuantityInstock)

Lieferanten Ledger

Lieferanten (Lieferierer, Name, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Kundenbuch

Kunden (Customerid, Customername, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Verkaufsledger

Umsatz (SaleId, Datesold, CustomerId, EmployeeID)
Saledetails (SaleId, ProductID, EinheitenPrice, Menge, Kreditvergabe, Rabatt, Totalsold, Totallent)
CategoryDelivery (CategoryID, CustomerID, Kategorie, Transport)

Bestellledger

Bestellungen (Orderid, Datesold, Lieferierer, Mitarbeiter)
OrderDetails (orderid, productId, unitcostprice, Menge, Kreditaufnahme, Rabatt, Total -korbled, Totalborreed)

Gewinn-und Verlustrechnung

Eine Gewinn- und Verlustrechnung ist ein Jahresabschluss, der das Einkommen und die Ausgaben des Unternehmens zeigt. Es zeigt auch, ob das Unternehmen für einen bestimmten Zeitraum Gewinn oder Verlust erzielt. Eine Gewinn- und Verlustrechnung wird monatlich oder vierteljährlich gemacht. Vierteljährliche Mittel alle drei Monate: März, Juni, September, Dezember. Diese Aussage sollte in einem eigenen Hauptbuch aufbewahrt werden.

Hauptkomponenten für Gewinn- und Verlustrechnung

Diese Komponenten werden hier unter Bezugnahme auf den Convenience Shop beschrieben.

Einnahmen

Ein anderer Name für den Umsatz ist der Umsatz. Dies ist der erste Abschnitt der Gewinn- und Verlustrechnung. Es ist die Menge aller, was für diesen Zeitraum verkauft wurde (Gesamtsumme für die TotalSold -Spalte).

Kosten für verkaufte Produkte

Dies sollte der zweite Abschnitt der Gewinn- und Verlustrechnung sein. Es ist die Menge der Kosten aller für den Zeitraum verkauften Produkte (Gesamtsumme für die gesamte Säule des gesamten Kaufs).

Bruttogewinn

Das ist:

Bruttogewinn = Umsatz - cost_of_products

für den Zeitraum.

Gewinne

Wenn ein nicht verwendetes Fahrzeug verkauft wird, ist dies ein Gewinn (siehe Abschreibung in der folgenden Abbildung). Der Gewinn eines unvorhergesehenen Vertrags durch Bestellung und Versorgung von Getränken und Keksen an eine Partei ist ein Gewinn. Die Geschäftsaktivitäten eines solchen Vertrags werden in den vorherigen Ledgers nicht erfasst.

Kosten

Die Kommission, die Sie einem Mitarbeiter für den Verkauf geben, ist ein Beispiel für Ausgaben. Pensionsbeitrag für einen Mitarbeiter ist ein Beispiel für Kosten. Die Schulden, die die Kunden schulden, können Sie hier gehen. Die Schulden, die Sie den Lieferanten schulden, können auch hierher gehen.

Werbekosten

Das Geld, das für die Werbung für den Convenience -Shop für lokale Radio- und Fernsehsender, soziale Medien usw. gezahlt wurde, usw.

Verwaltungsaufwendungen

Die Mieten für die Ladenwohnung, die Gehälter der Mitarbeiter, einschließlich Ihrer, der Inhaber (Manager), Bürovorräte (Computer, Telefone, Ledger, Stifte usw.), Liefertransport und andere Reisekosten usw.

Abschreibungen

Ein Computer kann gekauft werden, ein Regal wurde gekauft, ein Tisch gekauft usw. Abschreibungen bedeutet, dass Sie die Kosten jeder solchen Ausrüstung über die Lebensdauer der Geräte teilen (bis Sie den Vermögenswert nicht mehr benötigen).

Verliert

Die Beilegung einer Kundenklage ist ein Beispiel für Lose.

Verdienste vor Steuern

Einnahmen_Before_taxes = All_incomes - All_expense

Steuern

Jede Steuer, die in der Zeit gezahlt wird.

Nettoergebnis

Net_income = (Umsatz + Gewinne) - (Ausgaben + Verluste)

Um das Geschäft auszubauen, sollten Einsparungen von hier aus kommen.

Beispiel für Gewinn- und Verlusterklärung

Das Nettoeinkommen in dieser hypothetischen Tabelle beträgt 1000 USD, was sehr gut ist!

Abschluss

Die minimale Anzahl von Tabellen mit minimaler Anzahl von Spalten in 5NF ist im Beispiel für den Convenience Shop angegeben. Wie Sie den Gewinn oder den Verlust bestimmen können, wird auch gegeben.

Sie, der Datenbankentwickler, sagt: „Wir sind am Ende des Trainingsprogramms gekommen. Wir beide sind 30 Jahre alt. Wir haben immer noch unser Leben (Erwachsener) vor uns. Während des Urlaubs habe ich dich und deine Jungs trainiert. Ich sparte Geld, um in etwa zehn Jahren maximal in etwa zehn Jahren ein eigenes Softwareunternehmen zu gründen. Ich kann auch Installation und Netzwerk von Computern durchführen.”

Der Besitzer, der Sohn des verstorbenen Mannes, reagiert: „Gott will, ich werde mein Geschäft in sechs Monaten computerisieren. Wenn ein Gewinn von 1000 USD pro Monat nach dem Entfernen meines Gehalts fortgesetzt wird, werde ich sparen. In maximal zehn Monaten werde ich einen Supermarkt im Handelszentrum besitzen. Hoffentlich in ungefähr sechs Monaten werde ich Ihnen den Vertrag zum Kauf und Installieren der Computer geben, das Netzwerk einfügen und die Programmierung durchführen.”

Der Eigentümer fährt fort: „Du kennst mich. Ich reservierte einen Teil des Geldes, das mein Vater mir verließ, um den Laden zu computerieren. Jetzt sagen die Briten: "Arbeit ohne Spiel macht Jack zu einem langweiligen Jungen". Also habe ich auch etwas Geld für Unterhaltung reserviert. An diesem Samstagabend lade ich Sie in das teuerste Restaurant der Stadt ein, um das teuerste Essen zu essen und das teuerste Getränk zu trinken, um unsere Freundschaft und unsere aktuelle Leistung zu feiern (Training).”

Abends gehen sie ins Restaurant. Nach dem Abflug machten sie zumindest ein High-Five, um über E-Mails zu kommunizieren.