\newenvironment{tietuetaulu}
{\begin{tabular}{p{0.22\textwidth}
p{0.14\textwidth} p{0.1\textwidth} >{\raggedright\arraybackslash} p{0.42\textwidth}}
\hline
\textbf{Attribuutti} & \textbf{Tyyppi} & \textbf{Pituus} & \textbf{Selite}\\
\hline
}{
\hline
\end{tabular}}

\chapter{Tiedot ja tietokannat}
\section{Tietosisältö}
\label{tietosisalto}
\begin{figure}[!h]
\includegraphics{luokkakaavio.pdf}
\caption{Luokkakaavio huoltotietojärjestelmän tietosisällöstä. Kuvassa on
esitetty tietueet, joihin järjestelmän tiedot tallennetaan, sekä näiden
väliset yhteydet ja yhteyksien lukumääräsuhteet.}
\label{kuva_luokkakaavio}
\end{figure}

Järjestelmän tietosisältö on esitetty luokkakaaviona kuvassa \ref{kuva_luokkakaavio}.
Tietosisältö voidaan jakaa kolmeen ryhmään:
\begin{reunaotsikot}
\kohta{Hitaasti muuttuvat tiedot,}
eli \luokka{Asiakas}-, \luokka{Tuote}-, \luokka{Työlaji}- ja \luokka{Työntekijä}-tietueet,
liittyvät useisiin huoltopyyntöihin ja pysyvät järjestelmässä kunnes ne erikseen poistetaan.
Ne nopeuttavat huoltopyyntöjen käsittelyä kun samoja tietoja ei tarvitse syöttää aina
uudestaan.
\kohta{Huoltopyynnöt} sisältävät asiakkaan yhteydenotot ja kytkevät yhteen muut tiedot.
Huoltopyyntöjä tulee jatkuvasti uusia ja vanhat pyynnöt poistetaan vuoden
kuluttua (\ref{kapasiteetti}).

\kohta{Huoltopyyntöön liittyvät tiedot,} eli \luokka{Huoltotehtävä}-,
\luokka{Lasku}-, \luokka{Laskunlähetys}-, \luokka{Maksusuoritus}- ja \luokka{Osto}-tietueet
sisältävät enemmän tietoa yksittäiseen huoltopyyntöön liittyen. Ne luodaan
eri vaiheissa huoltopyynnön elinkaarta ja poistuvat aikanaan huoltopyynnön
mukana.
\end{reunaotsikot}

\subsection{Tietosisällön kuvaustapa}
\newcommand{\p}{\textbf{\scriptsize(P)} }
Jokainen järjestelmän tietuetyyppi on esitelty omana kappaleenaan. Tietueen
käyttötarkoitus ja elinkaari on kuvattu lyhyesti. Tietueen sisältämät kentät
ja niiden tietotyypit on esitetty taulukkomuotoisesti.

Merkintä \p tietueen nimen perässä tarkoittaa, että kenttä on pakollinen.
Muut kentät voivat olla tyhjiä, jos tietoa ei ole.

\subsection{Asiakas}
\label{asiakas}
\luokka{Asiakas} sisältää yhden yrityksen asiakkaan tiedot. \luokka{Asiakas} luodaan ensimmäisen huoltopyynnön yhteydessä ja pysyy järjestelmässä ikuisesti, ellei sitä erikseen poisteta.

\begin{tietuetaulu}
nimi \p & merkkijono & 100 & Asiakkaan (yrityksen tai henkilön) koko nimi.\\
katuosoite & merkkijono & 100 & Asiakkaan katuosoite, esim. "Hämeenkatu 11".\\
postinumero & merkkijono & 20 & Osoitteeseen liittyvä postinumero. \\
paikkakunta & merkkijono & 50 & Osoitteeseen liittyvä paikkakunta. \\
puhelinnumero \p & merkkijono & 50 & Puhelinnumero, josta asiakkaan tavoittaa työaikaan.\\
sähköpostiosoite & merkkijono & 50 & Asiakkaan sähköpostiosoite. \\
\end{tietuetaulu}

\subsection{Huoltopyyntö}
\label{huoltopyyntö}

\luokka{Huoltopyyntö} on yksi asiakkaan yhteydenotto. \luokka{Huoltopyyntö}-tietueeseen liittyy
aina yksi \luokka{Asiakas}, aina yksi vastuuhenkilö eli \luokka{Työntekijä},
mahdollisesti yksi \luokka{Lasku} sekä mahdollisesti
yksi tai useampi \luokka{Huoltotehtävä}.

\luokka{Huoltopyyntö} luodaan, kun asiakaspalvelu kirjaa asiakkaan yhteydenoton
(\ref{pyynnonlisays}). \luokka{Huoltopyyntö} säilyy järjestelmässä kohdassa
\ref{kapasiteetti} määritellyn ajan.

\begin{tietuetaulu}
tunnistenumero \p & numero & 10 & Tunnistenumero jolla pyyntöön voidaan viitata keskusteluissa.\\
vastaanottoaika \p & ajanhetki & - & Päivämäärä ja kellonaika jolloin pyyntö on luotu.\\
ongelman kuvaus \p & merkkijono & 10 000 & Tarkka kuvaus ongelmasta.\\
lisätiedot & merkkijono & 10 000 & Työn tekemiseen liittyvät lisätiedot, kuten laitteiden haku.\\
onko valmis & totuusarvo & - & Onko vastuuhenkilö todennut pyynnön suoritetuksi.\\
\end{tietuetaulu}

\subsection{Huoltotehtävä}
\label{huoltotehtävä}
\luokka{Huoltotehtävä} liittyy aina yhteen \luokka{Huoltopyyntö}-tietueeseen.
Lisäksi siihen liittyy aina yksi \luokka{Työlaji}, aina yksi suorittaja eli
\luokka{Työntekijä} sekä mahdollisesti yksi tai useampi \luokka{Tuote}.

\luokka{Huoltotehtävä} on sellainen työkokonaisuus, joka on tiedossa jo ennen
tehtävän suorittamista. Esimerkiksi laitteiden haku tai laitteen korjaus ovat
huoltotehtäviä. Sen sijaan virtalähteen vaihtaminen ei sovi huoltotehtäväksi,
mikäli pelkän pyynnön perusteella ei tiedetä ongelman olevan virtalähteessä.

Vastuuhenkilö luo \luokka{Huoltotehtävä}-tietueet huoltopyynnön perusteella (\ref{tehtavanlisaaminen}).
\luokka{Huoltotehtävä} tuhotaan kun siihen liittyvä \luokka{Huoltopyyntö} poistuu järjestelmästä.

\begin{tietuetaulu}
tunnistenumero \p & numero & 10 & Tunnistenumero jolla tehtävään voidaan viitata keskusteluissa.\\
tehtävän kuvaus \p & merkkijono & 10 000 & Lyhyt kuvaus tehtävästä tai tarvittaessa tarkempi selitys.\\
aikaraja & ajanhetki & - & Päivämäärä ja kellonaika jolloin tehtävän pitää viimeistään olla suoritettu.\\
toimenpiteet & merkkijono & 10 000 & Kuvaus tehtävään liittyvistä toimenpiteistä, joita tähän mennessä on tehty.\\
työtunnit & numero & 3.1 & Montako henkilötyötuntia tehtävän suorittamiseen on tähän mennessä käytetty.\\
onko valmis & totuusarvo & - & Onko työn suorittaja merkinnyt tehtävän valmiiksi.\\
\end{tietuetaulu}

\subsection{Lasku}
\label{lasku}
\luokka{Lasku} on aina yhteen huoltopyyntöön liittyvä asiakkaan maksuvelvoite. Lasku luodaan, kun huoltotehtävä on kuitattu valmiiksi. \luokka{Lasku} säilyy järjestelmässä kohdassa \ref{kapasiteetti} määritellyn ajan.

\begin{tietuetaulu}
eräpäivä \p & Ajanhetki & - & Päivämäärä, johon mennessä asiakkaan on suoritettava maksu yrityksen tilille.\\
erittelyteksti & Merkkijono & 100 & Lyhyt kuvaus huoltotehtävästä.\\
loppusumma \p & Numero & 6.2 & Huoltopyynnön suorittamisesta asiakkaalle aiheutuneet kustannukset.\\
\end{tietuetaulu}

\subsection{Laskunlähetys}
\luokka{Laskunlähetys} on merkintä yhdestä laskun kopiosta, joka on lähetetty
asiakkaalle. Se liittyy \luokka{Lasku}-tietueeseen. Uusi \luokka{Laskunlähetys}-tietue
luodaan aina, kun käyttäjä lähettää laskun joko sähköpostilla tai tulostaa sen.
\luokka{Laskunlähetys} säilyy järjestelmässä kohdassa \ref{kapasiteetti} määritellyn ajan.

\begin{tietuetaulu}
lähetysaika \p & Ajanhetki & - & Päivämäärä, jolloin lasku on lähetetty.\\
lähetystapa \p & Vaihtoehto & - & Yksi arvoista: e-mail, tulostettu.\\
\end{tietuetaulu}

\subsection{Maksusuoritus}
\luokka{Maksusuoritus} on tieto siitä, että asiakas on maksanut huoltopyyntöön liittyvän laskun. \luokka{Maksusuoritus} säilyy järjestelmässä kohdassa \ref{kapasiteetti} määritellyn ajan. 

\begin{tietuetaulu}
maksupvm \p & Ajanhetki & - & Päivämäärä, jolloin asiakas on suorittanut maksun yrityksen tilille.\\
maksutapa & Merkkijono & 30 & Mitä maksutapaa käyttäen lasku on suoritettu.\\
\end{tietuetaulu}

\subsection{Osto}
\luokka{Osto} on huoltotehtävään liittyvä hintatieto. Se kuvaa huoltotehtävään liittyvän tuotteen tai työlajin hintaa juuri ostohetkellä. Näin huoltotehtävässä lasketut kustannukset pysyvät samoina, vaikka tuotteen tai työlajin hinnat myöhemmin muuttuisivatkin. 

\begin{tietuetaulu}
hinta ostohetkellä \p & numero & 6.2 & Hinta tuotteen tai työlajin ostohetkellä.\\
\end{tietuetaulu}

\subsection{Tuote}
\luokka{Tuote} kuvaa yhtä \luokka{huoltotehtävän} suorittamiseen tarvittavaa tuotetta. Huoltotehtävään voi liittyä monta tuotetta ja yksi tuote voi liittyä moneen huoltotehtävään. Tuotteet ovat tallennettu järjestelmässä olevaan hintatietolistaan (\ref{hintalista}).

\begin{tietuetaulu}
nimi \p & merkkijono & 50 & Tuotteen nimi.\\
hinta \p & numero & 6.2 & Tuotteen nykyinen hinta euroina.\\ 
\end{tietuetaulu}

\subsection{Työlaji}
\luokka{Työlaji} kuvaa \luokka{huoltotehtävän} työlajia. Jokaisella \luokka{huoltotehtävällä} 
on yksi \luokka{työlaji}. Jokaisen \luokka{työlajin} hinta on talletettu hintatietolistaan 
(\ref{hintalista}).

\begin{tietuetaulu}
nimi \p & merkkijono & 50 & Työlajin nimi.\\
hinta \p & numero & 6.2 & Työlajin nykyinen tuntihinta euroina.\\ 
\end{tietuetaulu}

\subsection{Työntekijä}
\label{työntekijä}
\luokka{Työntekijä} kuvaa yrityksen työntekijää. \luokka{Työntekijä} voi olla suorittajana useassa 
\luokka{huoltotehtävässä} ja vastuuhenkilönä useassa \luokka{huoltopyynnössä}. Jokaisella 
\luokka{työntekijällä} on nimi, käyttäjätunnus ja salasana. \luokka{Työntekijällä} on tallessa 
työaika, jonka hän on ollut töissä. Työntekijän oikeudet on jaettu neljään alueeseen: johdon, 
asiakaspalvelun, vastuuhenkilön ja huoltotyöntekijän oikeuksiin. Oikeudet ovat riippumattomia 
toisistaan.

\begin{tietuetaulu}
nimi \p & merkkijono & 100 & Työntekijän nimi.\\
käyttäjätunnus \p & merkkijono & 30 & Käyttäjätunnus.\\ 
salasana \p & merkkijono & 50 & Käyttäjätunnukseen liittyvä salasana.\\
työaika & merkkijono & 20 & Työntekijän sovittu työaika, esim. ''täyspäiväinen''.\\
johtaja & totuusarvo & - & Onko työntekijällä johdon oikeudet.\\
asiakaspalvelija & totuusarvo & - & Onko työntekijällä asiakaspalvelun oikeudet.\\
vastuuhenkilö & totuusarvo & - & Onko työntekijällä vastuuhenkilön oikeudet.\\
huoltotyöntekijä & totuusarvo & - & Onko työntekijällä huoltotyöntekijän oikeudet.\\
\end{tietuetaulu}

\section{Käyttöintensiteetti}
Yrityksellä on järjestelmän suunnitteluvaiheessa noin 40 työntekijää \cite{asvaat}.
Järjestelmä suunnitellaan 100 yhtäaikaiselle käyttäjälle kasvuvaran jättämiseksi.

Yhden huoltopyynnön suorittaminen alusta loppuun kestää normaalisti tunnin tai enemmän,
ja siihen liittyy noin 20 sivuhakua. Siten järjestelmän käyttöintensiteetiksi
mitoitetaan 20 sivuhakua $\cdot$ 100 työntekijää $=$ 2000 sivuhakua tunnissa.

\section{Kapasiteettivaatimukset}
\label{kapasiteetti}
Järjestelmään tallennetut huoltopyynnöt säilytetään vuoden ajan \cite[3.2]{asvaat}.
Edellisen kohdan oletusten pohjalta huoltopyyntöjä kertyy vuodessa enintään
100 työntekijää $\cdot$ 8 työtuntia $\cdot$ 5 työpäivää $\cdot$ 52 viikkoa $\approx$ 200~000.

Jokainen huoltopyyntö sisältää noin 500 sanaa tekstiä ongelman ja tehtävien
kuvauksissa ja muissa kentissä. Yhden huoltopyynnön ja siihen liittyvien tietojen
kooksi tulee siten noin 3 kilotavua. Huoltopyyntöjen säilytykseen on siis
varattava tilaa 200~000 huoltopyyntöä $\cdot$ 3 kilotavua $=$ 600 megatavua.

Lisäksi järjestelmään tallennetaan pysyvät tiedot asiakkaista, työntekijöistä
ja kustannustiedoista. Asiakkaiden enimmäismääräksi arvioidaan noin 10~000.
Työntekijöiden ja kustannustietojen määrä jää muutamaan sataan. Siten
pysyvien tietojen määrä on merkityksettömän pieni verrattuna huoltopyynnöille
varattuun tilaan, ja noin 1 gigatavun tietokanta riittää koko järjestelmälle.

\section{Tiedostot ja asetustiedostot}
Järjestelmällä ei ole asetustiedostoja.
