MITTUNIVERSITETET Institutionen för informationsteknologi och medier (ITM) Examinator: Karl Pettersson, karl.pettersson@miun.se Handledare: Karl Pettersson, karl.pettersson@miun.se Författarens e-postadress: helena.persson@passagen.se Utbildningsprogram: Dataingenjör, 20 poäng Omfattning: 5763 ord inklusive bilagor Datum: 2006-05-28 Examensarbete inom Datateknik B, 0 poäng Databas som hanterar kursplaner Med PHP och MS Helena Persson
Sammanfattning Sammanfattning Mittuniversitetet använder sig av en databas för att hantera sina kursplaner. Den har inte varit till full belåtenhet då personalen tycker att det finns vissa brister i systemet. Jag har därför haft som uppgift att ta fram en prototyp av ett system som på ett bättre sett löser dessa problem. Ett schema utvecklades som jag sedan utgick ifrån när jag implementerade databasen. Detta ER diagram och även förstås databasen är uppbyggd så att den kan utvidgas om man i framtiden vill utöka användandet av systemet. När databasen fått en bra struktur behövdes även ett bra användargränssnitt, detta utvecklades med programmet PHP. I första hand utvecklades de delar som hade uppfattats som mindre bra av personalen. Det finns fortfarande en del saker som man med fördel kan fortsätta att utveckla med systemet. ibased on the Mid Sweden University template for technical reports, written by Magnus Eriksson, Kenneth Berg and Mårten Sjöström.
Abstract Abstract Mid Sweden University are using a database to handle there s course syllabus. The school personnel weren t satisfied with the database which didn t fulfill their requirements. My task was to design a prototype that is more in the line with the requirements. The first step was to create an ER diagram. Then the database was build from the ER diagram. Both the ER diagram and the database are designed for easy expansion of the system. When the new database was in place the GUI needed to be improved. Using PHP, the improvement of the GUI started with the parts that the personal find less good. As only parts of the GUI was redesigned, there are still parts of the GUI that could benefit from a redesign. iibased on the Mid Sweden University template for technical reports, written by Magnus Eriksson, Kenneth Berg and Mårten Sjöström.
Abstract Innehållsförteckning Sammanfattning... i Abstract... ii.... Bakgrund och problemmotivering....2 Övergripande syfte....3 Problemformuleringar... Error! Bookmark not defined.2.4 Översikt... Error! Bookmark not defined.2 2 Teori...3 2. Databas...3 2.2 Databashanterare...3 2.2. MySQL..4 2.2.2 MS.4 2.3 Webbserver...4 2.4 Skriptspråk...4 3 Metod...6 4 Konstruktion...7 5 Resultat...8 5. Databasen...8 5.2 Gränssnittet. 9 6 Slutsats... Källförteckning...2 Bilaga A: Tabeller i Databasen Kursplaner Bilaga B: ER diagram iiibased on the Mid Sweden University template for technical reports, written by Magnus Eriksson, Kenneth Berg and Mårten Sjöström.
. Bakgrund och problemmotivering Mittuniversitetet använder sig VT05 av ett system (ALVA) för att hantera skolans kursplaner. Systemet fungerar men är inte anpassat till Mittuniversitetets behov och har på grund av det av det fått en del klagomål från personalen som arbetar med systemet. För att på ett bra sätt kunna lagra och hantera stora mängder fakta är det bra att använda sig av en databas, på sätt sett blir det även lättare för de användare som ska skriva eller förändra i kursplanerna. Även ett bra användargränssnitt behövs för att systemet ska vara lätt att använda, med hjälp av ett bra gränssnitt kan man lätt orientera sig i databasen och hitta den information man behöver..2 Övergripande syfte Syftet med detta examensarbete är att skapa ett lätthanterligt och funktionellt system som kan hantera Mittuniversitetets kursplaner utifrån skolan önskemål. Detta ska uppnås med hjälp av en databas med en bra och stabil struktur och ett användargränssnitt som är lätt att förstå och orientera sig i. I systemet ska man kunna skapa och förändra kursplaner. Kursplanerna ska ha olika revisioner så man kan förändra en kursplan utan att behöva skapa en helt ny, på så sett kan man lätt kolla tillbaka hur en kursplan såg ut en viss termin. Även tillfällen ska kunna skapas och de ska kunna användas när man ska skriva nya kurskataloger, där finns information som när kursen går, på vilket språk, på vilken ort och i vilken takt m.m. Kursplanerna ska även kunna skrivas ut, man ska då få fram en kursplan med ett bra upplägg så att det är lätt för studenten och personalen att förstå den. Utskriften ska innehålla all information av vikt.
.3 Problemformuleringar Utifrån det gamla systemet (ALVA) olika kursplaner kommer jag att utveckla ett system där de fel och brister som uppmärksammats av den personal som arbetar med systemet löses på ett annat och bättre sätt. För att systemet ska bli bra krävs en bra struktur på databasen, jag kommer därför att lägga störst vikt vid detta. En bra struktur skapas genom att göra ett bra schema, detta kommer att presenteras i ett ER diagram. När man gör ett diagram får man en bra överblick hur systemet ser ut, jag kan då göra ändringar i det tills jag tycker att jag hittat den bästa lösningen. Detta diagram kommer sedan att ligga till grund när databasen ska implementeras. När strukturen är klar behöver även ett användargränssnitt skapas. Flera av de klagomål som finns om det förra systemet gäller saker som kan förändras under denna process. Jag kommer att i första hand se över dessa saker. Hur mycket som kommer att göras åt gränssnittet är beroende på hur mycket tid som finns till detta..4 Översikt Rapporten är upplagd med en teoridel som kort beskriver den fakta läsaren behöver för att för att kunna förstå fortsättningen av materialet. Det följs av en konstruktionsdel. 2
2 Teori 2. Databas För att en databas ska vara bra och lätt att använda krävs en bra struktur. För att bygga upp en bra struktur behöver man en modell, en modell man kan använda sig av är ER diagrammet (Entity Relationship)[]. Ett ER diagram byggs upp av olika byggstenar: entiteter, attribut och relationer, se figur 2.. KURS namn tillhör Figur 2. Entitet, Attribut och Relation. (Källa: Egen) En entitet kan vara en kurs, ett tillfälle eller en bok. Ett attribut är egenskaper till entiteterna och det kan till exempel vara namn, kod och beskrivning. En relation beskriver relationen mellan olika entiteter, ett exempel på det är till exempel att en kurs HAR en revision. En relation kan se ut på olika sätt, detta beskrivs med kardinaliteter. Till exempel kan en kurs ha flera revisioner (:M), andra kardinaliteter är ett till ett (:) och många till många (M:M). 2.2 Databashanterare En databashanterare är ett program vars uppgift är att lagra och hantera databaser. För att kunna lägga till, hämta och söka data i databasen använder sig MySQL av Structurered Query Language (SQL). SQL bildar tabeller och kolumner genom frågor, på så sätt samlas informationen på ett strukturellt sätt. 3
2.2. MySQL MySQL är gratis att ladda hem och använda. Det är även en fri programvara, det innebär att du som användare bland annat har rätt till koden. Det gör att du kan ändra och förbättra i programmet så att det passar dina ändamål. Programmet fungerar bra tillsammans med PHP som är det skriptspråk jag valt att jobba med. Mer om det under 2.4. 2.2.2 MS MS har en mängd verktyg som ska underlätta för användaren som Query by Example (QBE). QBE är ett frågespråk där man i stället för att skriva kod t.ex kan koppla ihop tabeller direkt på skärmen. Programmet kan även använda sig av SQL frågor. MS stöder datorformatet Open Database Connectivity (ODBC). Genom ODBC kan man länka till andra datakällor som till exempel PHP. 2.3 Webbserver En webbserver är ett program som kan distribuera filer till klienter på nätet, en vanlig klient är till exempel webbläsaren. För att distribuera filer använder programmet sig av ett protokoll, Hypertext Transfer Protocol (http). Det finns flera olika webbservrar på marknaden som till exempel Xervier, Microsoft Internet Information (IIS) och Apache. Jag har använt mig av Apache som disponeras gratis och har en öppen källkod. Apache är en av de vanligaste webbservrarna men utvecklades från början för UNIX. Idag finns det för flertalet plattformer, till exempel till Mac OS och Microsoft Windows. 2.4 Skriptspråk För att skriva ett skript, programkod som inte kompileras innan körning, eller enklare program använder man sig av ett skriptspråk. Jag har använt mig av språket Hypertext Preprocessor (PHP) som även det precis som Apache och MySQL har en öppen källkod[2]. 4
PHP skript skrivs med PHP kod och HTML kod i samma fil. HTMLkoden som är statisk kan med hjälp av inbäddad PHP kod få en fil med ett dynamiskt innehåll[3]. När en klient skickar en fråga till servern letar denna upp filen som det frågats efter. Servern kommer sedan att exekvera PHP koden innan allt skickas till klienten som HTML kod. På så sätt kommer klienten aldrig i kontakt med PHP koden. PHP fungerar bra ihop med webbserver Apache men även med andra webbservrar. Den är gratis att använda och kräver inga dyra investeringar till din dator. Programmet är ett av de vanligaste skriptspråken och fungerar på många olika plattformar som Solaris, Microsoft Windows, Mac OS och OS/2. 5
3 Metod För att komma igång med arbetet behövdes en del information inhämtas. Som utgångspunkt hade jag ALVA, systemet som Mittuniversitetet använder sig av just nu för att hantera kursplanerna. För att få en uppfattning av hur det var uppbyggt fick jag tillgång till en modell över systemet där man kunde se hur deras databas var uppbyggd. Genom att titta igenom det materialet och genom en intervju med Annika Berggren som använder systemet för att föra in nya kursplaner kunde jag dra vissa slutsatser om vad som var negativt med systemet, vad som kunde göras bättre. Efter att jag gjort detta kunde jag börja skissa på en egen modell på hur jag tyckte att systemet skulle se ut. Jag tog fram en ER modell som hade vissa likheter med det gamla systemet men där helt nya idéer ersatte de delar som var mindre bra. Genom att diskutera fram olika lösningar skapades till slut en ny ER modell som även har möjlighet att kunna utvidgas vid framtida behov. När modellen stod klar var det dags att välja databashanterare. Jag valde att arbeta med MySQL och implementerade databasen utifrån min modell. På grund av problem senare under arbetets gång byttes databashanteraren ut till MS. Jag valde att jobba med MS för att programmet stöder datorformatet Open Database Connectivity (ODBC), det löste problemet att koppla samman PHP och MySQL. Eftersom jag inte arbetat så mycket med SQL databaser innan utan mest hade teoretiska kunskaper om det fick jag läsa in lite innan arbetet började flyta. För att få till ett bra användargränssnitt valde jag att använda mig av PHP vilket var ett helt nytt program för mig. För att få förståelse för programmet provade jag mig framåt genom att göra enkla programdelar som med tiden jag lärde mig mera kunde utvecklas och bli mer avancerade[4, 5, 6]. Många av de saker som upplevts som negativt med det gamla systemet fanns i gränssnittet så i första hand har jag försökt lösa dessa saker på ett bättre sätt. 6
4 Konstruktion Programmen jag använt mig av, MySQL, Apache och PHP installerades på den dator som jag under arbetets gång har använt mig av. MySQL hämtades på MySQL s egna hemsida, där jag valde det alternativ som stödjer operativsystemet Windows[7]. PHP hämtades också hem och installerades på datorn[8]. För att programmet ska gå att använda behöver det även konfigureras. Det som behövdes göra var att filen php.ini.dist flyttades till C:/Windows och där ändrades namnet till php.ini. Apache varken installerade jag eller konfigurerade och kan därför inte svara på vad som gjorts för att programmet ska fungera. När jag bytte från MySQL till MS behövde jag inte göra någonting eftersom MS redan fanns installerat på datorn. MS stödjer ODBC och för att länka till PHP går man då in på datakällor och väljer System DNS och lägger till den databas man vill att PHP ska länka till, i det här fallet databasen kursplaner. 7
5 Resultat 5. Databasen En kursplan innehåller en hel del information så databasen är ganska omfattande med många entiteter och attribut (se bilaga 2). Grunden i databasen är att man har en basrelation kurs som beskriver en specifik kurs, denna har en specifik kurskod. En kurs kan ges flera gånger men kan ändras något mellan gångerna men eftersom det är samma kurs vill man kunna använda sig av samma kurskod, för att detta ska vara möjligt har en basrelation revision skapats. Basrelationenen revision som både har kurskoden men även terminen den går som nyckel gör att en kurs kan ges i flera revisioner, alltså samma kurs kan finnas i flera utföranden. I databasen vill man även kunna lägga in tillfällen, detta kan göras i basrelationen tillfälle. När man ska skriva in ett tillfälle till databasen vill man att viss information ska kunna väljas ur en lista, för att detta ska vara möjligt utgör dessa egenskaper egna basrelationer. På detta sett kan man undvika att alternativ som inte är möjliga läggs in i databasen. Informationen i basrelationen tillfälle ska kunna hämtas från databasen när man vill ha information till kurskataloger. Under tiden gränssnittet utvecklades skapades även nya basrelationer: Kontaktperson, Starvecka/Slutvecka, detta för att personer och veckor som inte existerar ska kunna läggas in i databasen. Databasen implementerades först i MySQL (se bilaga ) men efter problem när PHP skulle hämta information från denna implementerades den snabbt om i MS. Detta för att snabbt kunna komma vidare och arbeta med gränssnittet. Eftersom MS stöder datorformatet ODBC så kunde problemet med att länka från PHP snabbt avhjälpas på det sättet. 8
5.2 Gränssnittet För att personalen ska kunna lägga in nya kursplaner och skriva ut dem som redan finns skapades ett användargränssnitt i PHP. Gränssnittet består av olika sidor på vilka det finns formulär där man skriver in den information man har om kursplanen. Data skickas sedan till databasen där den sparas. För att användaren ska kunna orientera sig kommer man först att komma till en förstasida där man väljer vad man vill göra, som att skriva in en ny kursplan, ett tillfälle eller visa en befintlig kursplan. Om man väljer att skriva in en ny kursplan kommer man till en sida som heter Kurs, se figur 5.. När man fyllt i informationen på sidan och tryck skicka kommer man till ännu en sida där information ska fyllas i. För att all information ska hamna på rätt sida i databasen kommer kurskoden automatiskt att följa med till nästkommande sidor, som användare ska man inte behöva hålla reda på att det ska fungera. Figur 5. Sidan Kurs (Källa: Egen) 9
De mesta informationen som ska läggas in i databasen är bara att fylla i men ett lite krångligare moment är att få in kurslitteratur i databasen. Eftersom man vill spara alla böcker som använts så att man inte ska behöva skriva in en bok varje gång om den används i flera kurser blir det ganska många titlar i databasen. När man sedan ska hitta den boken behöver man ett bra sätt att söka på. Detta har lösts så att man kan söka på bokens förlag, författare och isbn nummer, man kan även leta i en lista som står i bokstavsordning efter böckernas titel, se figur 5.2. Figur 5.2 Sidan Litteratur (Källa: Egen) När man söker efter till exempel en titel kommer de alternativ som passar sökningen att visas under rubriken bok, om man får flera alternativ får man välja den bok man sökte. Om man i stället väljer att visa en kursplan kommer man till en sida där man väljer vilken kursplan man vill visa. Den kommer sedan att visas på skärmen. 0
6 Slutsats Mitt arbete har resulterat i en databas med en bra struktur. Databasen är uppbyggd så att om man vill utvidga den är detta möjligt. Om man i framtiden ser att man har ett behov av nya egenskaper kan dessa utan svårigheter kopplas till. Även ett användargränssnitt har skapats, med hjälp av det kan användaren skriva in och visa kursplaner utan ha någon som helst kunskap om själv databasen. På grund av att jag aldrig innan jag började med detta arbete haft kunskap eller kommit i kontakt med att skapa gränssnitt eller att arbeta med programmet PHP har en del tid gått åt till att sätta sig in i detta. Därför finns det saker som jag skulle ha velat gjort annorlunda men ej hunnit med. Till exempel skulle jag ha velat utveckla sökningen av böcker något mer. Eftersom mitt syfte i första hand var att hitta en bra struktur till databasen anser jag att jag nått mitt mål. Jag har även kunnat sätta mig in i och lösa en del problem med den funktionella användningen även om jag anser att det finns bitar som skulle kunna göras bättre. För den som vill använda sig av mitt arbete för att hitta andra lösningar finns åtgärder och vidareutvecklingar som kan göras. Kurskoden och terminkoden som måste följa med mellan sidorna kan skickas på ett bättre sätt. Även ett sätt att ändra i en kursplan utan att skriva en ny kan utvecklas, frågor man kan ställa sig är vad ska kunna ändras innan man måste skriva en ny kursplan och ska vissa saker kunna ändras under utvecklingens gång men sedan låsas. Som programmet ser ut kan vem som helst skriva in en kursplan, något slags system med olika användare och lösenord måste skapas.
Källförteckning [] Elmasri, R., & Navathe, S. (2004): Fundamentals of Database Systems 4 th ed. Boston: Addison Wesley [2] Overgaard, J., Eriksson, U., & Ek, J. (2004): PHP5 programmering. Sundbyberg: Pagina [3] PHPportalens hemsida http://www.phpportalen.net. Hämtad 2005 04 [4] Converse, Tim & park; Joyce (2000): PHP 4 bible [5] Meloni, Julie C (2000): PHP essentials. Rocklin: Prima Tech [6] Castagnetto, Jesus M (999): Professional PHP Programming. Birmingham, Wrox [7] MySQLs hemsida http://www.mysql.com. Hämtad: 2005 0 4 [8] PHPs hemsida http://www.php.net. Hämtad 2005 0 3 2
Bilaga A: Tabeller i Databasen Kursplaner Bilaga A: Tabeller i Databasen Kursplaner create table instiution ( kod char (3) not null, namn varchar (50), url varchar (50), beskrivning text, create table amne ( kod char (4) not null, namn varchar (50), inst_kod char (3) not null references institution create table niva ( kod char () not null, create table kurs ( kod char (6) not null, namn_s varchar (50), namn_e varchar (50), in_dat date, fast_dat date, nedlagd date, upp_utbild char(), poang decimal (3.), amneskod char (4) not null references amne, nivakod char () not null references niva, create table bok ( id int not null, ar varchar (50), /
Bilaga A: Tabeller i Databasen Kursplaner isbn varchar (20), titel varchar (50), forfattare varchar (50), forlag varchar (50), antal_sidor int, primary key (id)); create table betygsskala ( kod char (2) not null, namn varchar (20), create table termin ( kod char (4) not null, create table s_behorigheter ( kod int not null, namn varchar (5), create table takt ( kod int not null namn_s varchar (20), namn_e varchar (20) create table ort ( kod int not null, namn varchar (20), create table tid ( kod char (2) not null, namn_s varchar (20), namn_e varchar (20), create table sprak ( kod char (2) not null, namn_s varchar (20), 2/
Bilaga A: Tabeller i Databasen Kursplaner namn_e varchar (20), create table urval ( id int not null, namn varchar (20), primary key (id)); create table typ ( kod char (2) not null, namn varchar (20), create table paket ( kod char (6) not null, status char (), termin char (4), beskrivning text, institution char (3), poang decimal (3.), niva char (), amne char (4), namn_s varchar (20), namn_e varchar (20), create table tillfalle ( id int not null, startvecka char (6), slutvecka char (6), distans char (), senast_andrad date, senast_andrad_av varchar (50), lab_timmar int, und_timmar int, platsgaranti char (), distansinfo text, anmalningskod char (5), natverksuniversitet char (), kontaktperson varchar (50), kurskod char (6) references kurs, 3/
Bilaga A: Tabeller i Databasen Kursplaner typkod char (2) references typ, urvalskod int references urval, paketkod char (6) references paket, sprakkod char (2) references sprak, tidkod char (2) references tid, ortkod int references ort, taktkod int references takt, create table utbildningsomrade ( kod char (2) not null, namn_s varchar (50), namn_e varchar (50), create table revision ( syfte_s text, syfte_e text, larandemal_s text, larandemal_e text, status char (), litteraturdatum date, forandringsdatum date, dokumentinfo text, beslutsinstans varchar (50), innehall_s text, innehall_e text, litteraturkommentar text, lar_studietimmar_s text, lar_studietimmar_e text, forkunskaper varchar (50), kkod char (6) not null references kurs, tkod char (4) not null references termin, primary key (kkod, tkod)); create table moment ( kod char (4) not null, namn_s varchar (50), namn_e varchar (50), poang decimal (3.), beskrivning text, 4/
Bilaga A: Tabeller i Databasen Kursplaner betygskod char (2) references betygsskala, rev_exam_oblig char (), kkod char (6) not null references kurs, tkod char (4) not null references termin, primary key (kod, kkod, tkod)); create table kurs_utbild ( utbild_kod char (2) references utbildningsomrade, kurskod char (6) references kurs, procent int, primary key (utbild_kod, kurskod)); create table ingar ( betygsskalakod char (2) references betygsskala, kurskod char (6) references kurs, primary key (betygsskalakod, kurskod)); 5/
Bilaga B: ER diagram ram KURS kod namn poäng ects upp_utbild nedlagd fast_dat in_dat ger ÄMNE namn kod har ingår EXTRAÄMNE kod namn ingår UTBILDNINGSOMRÅDE namn kod REVISION har syfte status litteraturdatum förendringsdatum innehåll lär_studietimar övrigt beslutsinstans dokumentinfo TERMIN kod har BETYGSSKALA ingår ingår kod namn TILLFÄLLE kontaktperson anmälningskod startvecka distansinfo flexibelt_lärande närverksuniversitet ges förkunskaper S_BEHÖRIGHETER kod namn URVAL id namn tillhör TYP kod namn tillhör ORT TAKT tillhör tillhör kod namn namn kod ingår M P K L A H B F A S Z E Y U C V G NIVÅ kod ingår lärandemål litteraturkommentar KURS_UTBILD procent Q T UR kommentar Q krävs ger aktue N svenska engelska svenska engelska engelska svenska svenska svenska engelska engelska engelska svenska svenska engelska engelska svenska id