Databasetabeller for en bekvemmelighetsbutikk De fem normale formene

Databasetabeller for en bekvemmelighetsbutikk De fem normale formene
Dette er den femte og siste delen av serien, de fem normale formene. I denne delen av veiledningsserien blir alle tabellene presentert for en modifisering på produkttabellen. Hvordan overskuddet eller tapet beregnes fra databasen blir også forklart.

Denne veiledningsserien følger en historielinje som er som følger: en far har nettopp død og etterlatt litt penger til sønnen. Sønnen bestemte seg for å investere pengene i en nærbutikk. Butikken er allerede lagerført, og å selge til kunder har allerede begynt.

I begynnelsen av virksomheten visste både sønnen som er innehaver og hans ansatte, kalt Clerks i denne opplæringsserien, ingenting om normale former.

Du, leseren, har fullført denne fem normale formopplæringsserien, og du er også en databaseutvikler. Innehaveren er din venn. Du besøkte butikken fire ganger, en gang per dag, de siste fire dagene. På de tre første dagene lærte du både innehaver og hans ansatte om 1NF, 2NF og 3NF.

I går besøkte du bare innehaveren på kontoret hans og trente ham på BCNF, 4NF og 5NF. I dag besøkte du bare innehaveren for å forbedre produkttabellen, presentere alle tabellene og forklare hvordan du beregner overskuddet eller tapet.

Først oppsummerer du reglene for alle normale skjemaer.

Normale skjemaregler

I teorien kan det opprettes en tabell og tilfeldigvis være i den femte normale formen, siden hver normal form har regler som ikke bør krenkes i motsetning til reglene som bør implementeres. Imidlertid er en tabell sjekket fra den første, andre, tredje, Boyce Codd, fjerde og til den femte normale formene.

En tabell er i 1NF hvis ingen av følgende regler er krenket:

  1. Alle kolonnene i en tabell skal ha unike toppnavn.
  2. Hver celle må bare ha en enkelt verdi.
  3. Verdiene som er lagret i en kolonne skal være av samme type.
  4. Radene skal være forskjellige.
  5. Rekkefølgen på kolonnene eller rekkefølgen på rader spiller ingen rolle.

En tabell er i 2NF hvis ingen av følgende regler er krenket:

  1. Tabellen må allerede være i første normale form.
  2. Det må ikke være noen delvis avhengighet.

En tabell er i 3NF hvis ingen av følgende regler er krenket:

  1. Det skal allerede være i den andre normale form.
  2. Det skal ikke ha transitiv avhengighet.

En tabell er i BCNF hvis ingen av følgende regler er krenket:

  1. Bordet skal allerede være i tredje normalform.
  2. Ingen ikke-prime-attributt (kolonne) skal avhenge av en del av den sammensatte primære nøkkelen.

En tabell er i 4NF hvis ingen av følgende regler er krenket:

  1. Det er allerede i Boyce-Codd normal form.
  2. Tabellen har ingen multi-verdsatt avhengighet.

En tabell er i 5NF hvis ingen av følgende regler er krenket:

  1. Det er allerede i fjerde normale form.
  2. Tabellen har ikke sammenføyningsavhengighet.

På et hvilket som helst trinn, hvis tabellen ikke samsvarer med normal form, er tabellen delt for å samsvare.

Bordene

Produktbord

Produktbordet som vi ankom så langt er:

Produkter (ProductID, CategoryID, leverandørid, produktnavn, UnitPrice, QuantityInstock, ReorderLevel)

CategoryId og leverandøren er utenlandske nøkler som er de samme som henholdsvis de primære nøklene til kategoriene og leverandørens tabell.

Denne tabellen er i 5NF hvis UnitPrice og kvantiteten ikke endrer seg med tiden. Selv leverandøren av et bestemt produkt kan endre seg. For enkelhets skyld vil imidlertid ikke endring av leverandør bli adressert i denne opplæringen. Enhetsprisen for ethvert produkt endres over tid, men sakte. Akkurat nå har enhetsprisen for mange produkter over hele verden økt på grunn av Russland-Ukraina-krigen. Siden individuelle kunder kjøper fra en butikk, endres mengden i lager (reduserer først før de blir etterfylt). Mengden av et bestemt produkt på lager er summen av hva som er på sokkelen og hva som er i butikken (sikkerhetskopi). For enkelhets skyld blir ikke denne separasjonen gjort i denne opplæringsserien.

Med disse skiftende kolonnene er denne tabellen nå i 1NF. Bordet må deles i to, med den skiftende gruppen som går en vei mens resten av bordet gjenstår.

Barnebordene blir:

Produkter (ProductID, CategoryID, leverandørid, produktnavn, ReorderLevel)

og

Produktstater (UnitPrice, QuantityInstock)

Den nye tabellen kalles produktstater. Den trenger sin egen ID så vel som produkt -ID. Bordet skal faktisk være:

Produktstater (ProductStateID, ProductID, Dato, UnitPrice, QuantityInstock)

Produktstateidet er auto-incremented, som begynner fra 1. En datakolonne legges til for å indikere når endringen skjedde. Den primære nøkkelen for ProductStates -tabellen er en sammensatt nøkkel som består av ProductStateID og ProductID. De to tabellene er koblet sammen med ProductID -kolonnen. Produktstatetabellen er i 2NF siden det ikke er noen delvis avhengighet. I hver av radene bestemmer enten verdiene for dato, UnitPrice eller QuantityInstock begge tastene. Faktisk er begge tabellene nå i 5NF, ettersom ingen bryter noen av de normale skjemaets regler.

Hvis de to foregående tabellene ikke holdes i en datamaskin med sikkerhetskopi, bør de holdes i en hovedbok. Den første halvdelen av hovedboken kan ha produktbordet, og andre omgang kan ha produktstatbordet. Produktstatbordet vokser med tiden.

En avbrutt kolonne av boolsk type kan legges til høyre ende av produkttabellen for å indikere om produktet er avviklet; det vil si at butikken ikke lenger handler med det aktuelle produktet.

Produkttabellene og resten av tabellene i databasen er nå i den femte normale formen.

Leverandørbord

Tabellnotasjonen for leverandørens tabell er:

Leverandører (leverandørid, navn, telefon, adresse, by, region, postnummer, land)

Hvis denne tabellen ikke holdes i en datamaskin med sikkerhetskopi, bør den oppbevares i en hovedbok. En datakolonne kan legges til for å indikere den første dagen som leverandøren ble engasjert i nærbutikken. Utgitt kolonne kan også legges til.

Kundebord

Tabellnotasjonen for kundens tabell er:

Kunder (CustomerId, CustomerName, Phone, Address, City, Region, postnummer, land)

Hvis denne tabellen ikke holdes i en datamaskin med sikkerhetskopi, bør den oppbevares i en hovedbok. En datakolonne kan legges til for å indikere den første dagen som kunden ble engasjert i nærbutikken.

One CustomerId kan være for forbipasserende: Folk som besøkte byen og bor på hotell, ferierende, turister osv.

Selgende bord

De tre salgsbordene er:

Salg (SaleID, Datesold, CustomerId, EmployeeId)
Saledetails (SaleID, ProductID, UnitsellingPrice, Mengde, utlån, rabatt)
Kategori levering (kategorier, CustomerId, kategori, transport)

En utlånskolonne av boolsk type introduseres i Saledetails -tabellen, i tilfelle kunden kan stole på. Bare innehaveren skal autorisere utlån. I kategorien leveringstabellen blir en kolonne for kostnadene for transport til og -fro for levering lagt til.

Hvis disse tabellene ikke holdes i en datamaskin med sikkerhetskopi, bør de holdes i en hovedbok som heter Sales Ledger. Den venstre halvdelen av hovedboken kan brukes til salgs- og saledet -tabellene (se nedenfor). Høyre halvdel av hovedboken kan brukes til kategorien leveringstabell.

Hvis bordene holdes i en hovedbok, ville Saledetails -bordet være:

Saledetails (SaleID, ProductID, UnitsellingPrice, mengde, utlån, rabatt, totalsold, totallent)

Med kolonnene med totalsold og totallent lagt til. Disse kolonnene skal fylles daglig på slutten av dagen eller ukentlig på slutten av uken av deg, innehaveren.

Hvis tabellene holdes i en datamaskin med sikkerhetskopi, ville databaseprogramvaren (programmet) beregne totalen.

Saledetails -radene som tilsvarer salgsraden er vanligvis mer enn en. Så for venstre halvdel av salgsboken har venstre side av den åpne hovedboken salgsdataene mens høyre side har salgsdetals-data, som følger:

Salg/Saledetails -bord

Hvis en kunde kom og betalte for visse produkter og lånte de andre, bør de være to Saledetails. total_sold = u.S.P x Mengde. En lignende beregning gjøres for total_lent. De store totalene for totasold og total, for bunnen av bordet kan beregnes på slutten av dagen eller på slutten av uken eller slutten av måneden, avhengig av salgsfrekvensen. Alle totaler skal beregnes av deg, innehaveren, som fungerer som manager.

Bestiller bord

Bestillingstabellene er:

Bestillinger (OrderId, Datesold, LevererID, EmployeeId)
OrderDetails (OrderId, ProductID, UnitCostPrice, mengde, rabatt)

Hvis disse tabellene ikke holdes i en datamaskin med sikkerhetskopi, bør de oppbevares i en hovedbok som kalles innkjøpsboken. I dette tilfellet skal OrderDetails -tabellen være:

OrderDetails (OrderId, ProductID, UnitCostPrice, mengde, lån, rabatt, totalkjøp, totalfjærnet)
Med lån, totalkjøp og totalbrutte kolonner lagt til.

Hvis en butikk betalte for noen bestillinger og lånte noen, bør de være to ordreDetails.

Det er ingen tilsvarende leveringstabell her. Registreringene for bestillinger og ordreDetails skal gjøres i kjøpsboken på en lignende måte som salget og Saledetails er laget i salgsboken.

Alle bord i 5NF

Produkter hovedbok

Produkter (ProductID, CategoryID, leverandørid, produktnavn, ReorderLevel)
Produktstater (ProductStateID, ProductID, Dato, UnitPrice, QuantityInstock)

Leverandørens hovedbok

Leverandører (leverandørid, navn, telefon, adresse, by, region, postnummer, land)

Kundens hovedbok

Kunder (CustomerId, CustomerName, Phone, Address, City, Region, postnummer, land)

Salgsbok

Salg (SaleID, Datesold, CustomerId, EmployeeId)
Saledetails (SaleID, ProductID, UnitsellingPrice, mengde, utlån, rabatt, totalsold, totallent)
Kategori levering (kategorier, CustomerId, kategori, transport)

Bestiller hovedbok

Bestillinger (OrderId, Datesold, LevererID, EmployeeId)
OrderDetails (OrderId, ProductID, UnitCostPrice, mengde, lån, rabatt, totalkjøp, totalfjærnet)

Resultatregnskap

En resultatregnskap er en regnskap som viser firmaets inntekt og utgifter. Det viser også om firmaet tjener på overskudd i en gitt periode. En resultatregnskap for gevinst blir gjort månedlig eller kvartalsvis. Kvartalsvis betyr hver tredje måned: mars, juni, september, desember. Denne uttalelsen bør holdes i sin egen hovedbok.

Viktige komponenter for overskudd og tapsuttalelse

Disse komponentene er beskrevet her med henvisning til nærbutikken.

Inntekter

Et annet navn for inntekter er salg. Dette er den første delen av resultatregnskapet. Det er mengden av alt det som ble solgt for den perioden (total totalt for totalsold -kolonnen).

Kostnad for solgte produkter

Dette skal være den andre delen av resultatregnskapet. Det er mengden kostnad for alle produktene som selges for perioden (total for totalkjøpskolonne).

Brutto fortjeneste

Dette er:

Brutto fortjeneste = Inntekter - Cost_OF_Products

for perioden.

Gevinst

Hvis et ubrukt kjøretøy selges, er det en gevinst (se avskrivninger i følgende illustrasjon). Overskuddet til en uforutsett kontrakt gjort ved å bestille og levere drikke og kjeks til en fest er en gevinst. Forretningsaktivitetene til en slik kontrakt blir ikke registrert i de tidligere hovedbøker.

Utgifter

Kommisjonen som du gir til en ansatt for å selge mer er et eksempel på utgifter. Pensjonsbidrag for en ansatt er et eksempel på utgifter. Gjeldene som kundene skylder, kan du gå hit. Gjeldene du skylder leverandørene kan også gå hit.

Annonseringsutgifter

Pengene som er betalt for å annonsere bekvemmelighetsbutikken til lokale radio- og TV -stasjoner, sosiale medier osv.

Administrative kostnader

Leieprisene for butikkleiligheten, lønnslønn inkludert din, innehaveren (manager), kontorrekvisita (datamaskiner, telefoner, hovedbøker, penner osv.), leveringstransport og andre reiseutgifter osv.

Avskrivninger

En datamaskin kan kjøpes, en hylle ble kjøpt, et bord ble kjøpt osv. Avskrivning betyr at du deler kostnadene for hvert av slikt utstyr i løpet av utstyrets levetid (inntil du ikke lenger trenger eiendelen).

Taper

Oppgjøret av et kundesøksmål er et eksempel på tap.

Opptjening (er) før skatt

Inntjening_before_taxes = all_incomes - all_expenses

Skatter

Enhver skatt som er betalt i perioden.

Netto inntekt

Net_income = (inntekter + gevinster) - (utgifter + tap)

For å utvide virksomheten, bør besparelser komme herfra.

Eksempel på uttalelse om fortjeneste og tap

Nettoinntekten i denne hypotetiske tabellen er $ 1000, noe som er veldig bra!

Konklusjon

Minimum antall tabeller med minimum antall kolonner i 5NF er gitt i eksemplet for nærbutikken. Hvordan bestemme overskuddet eller tapet er også gitt.

Du, databaseutvikleren sier: "Vi har kommet til slutten av treningsprogrammet. Begge av oss er 30 år gamle. Vi har fortsatt livene våre (voksne) foran oss. Mens jeg var på ferie, trente jeg deg og gutta dine. Jeg sparer penger for å starte mitt eget programvareselskap om omtrent ti år fra nå maksimalt. Jeg kan også gjøre installasjon og nettverk av datamaskiner.”

Innehaveren, sønnen til den avdøde mannen, reagerer, “Gud villig, jeg vil datalisere virksomheten min om seks måneder fra nå. Hvis et overskudd på $ 1000 per måned fortsetter etter å ha fjernet lønnen min, vil jeg spare. Om maksimalt ti måneder fra nå vil jeg eie et supermarked i kommersielt senter. Forhåpentligvis om seks måneder fra nå, vil jeg gi deg kontrakten til å kjøpe og installere datamaskinene, sette nettverket og gjøre programmeringen.”

Innehaveren fortsetter, “Du kjenner meg. Jeg reserverte noen av pengene som faren min etterlot meg å datere butikken. Nå sier britene: "Arbeid uten lek gjør Jack til en kjedelig gutt". Så jeg reserverte også litt penger til underholdning. Denne lørdag kveld inviterer jeg deg til den dyreste restauranten i byen for å spise den dyreste maten og for å drikke den dyreste drikken for å feire vennskapet vårt og vår nåværende prestasjon (trening).”

Om kvelden drar de til restauranten. Ved avgang gjorde de en high-five for å kommunisere gjennom e-postmeldinger, i det minste.