Göm menyn

Databaser - design och programmering

Projektbeskrivning

Bakgrund

Detta projekt används för att öva att modellera, representera och skapa en databas samt koppla den till en serie webbsidor med formulär och andra finesser. Målet är att skapa en nätplats som ger tips på presenter, Presenttipset.com.

Då projektet är ganska omfattande så har det delats in i tre delar (A, B och C. Del B och C har sista inlämningsdagar, men det är upp till er att disponera er tid så att ni hinner redovisa senast då. Totalt beräknas att ni behöver lägga cirka 50 timmar (per person) på själva projektet. Tänk på att bokad, handledd labbtid inte täcker hela den tid ni behöver lägga på projektet, planera för att utnyttja handledd tid effektivt. Får ni problem som ni inte kommer vidare med kan ni skicka epost till handledaren.

Det finns ingen speciell kursbok för HTML- och PHP-delarna av kursen, det du behöver för att klara av projektet kan du läsa dig till på de sidor som finns länkade från litteraturfliken, eller hitta egna resurser på webben eller i tryckt form. Det finns också ett antal övningar som är nära förbundna med projektet här.Inför varje labbpass bör du dessutom i förväg läsa igenom relevanta delar av projektbeskrivningen för presenttipset.com. Det är onödigt att slösa bort handledd tid med att läsa instruktionerna.

Affärsidé för presenttipset.com

Webbplatsen presenttipset.com har som affärsidé att erbjuda företag som säljer produkter via butiker och Internet en webbplats där de kan visa upp sina produkter. Det unika med webbplatsen presenttipset.com är sökfunktionen där användaren istället för att mata in produktens egenskaper söker på egenskaper hos mottagaren av din present samt orsak för att ge presenten.

Projektets omfattning

Projektet omfattar att skapa en webbplats för presenttipset.com. Detta innefattar design och implementation av webbplatsen, inklusive databas samt den underliggande programmeringen.

Projektet delas in i tre delar: Del A är design av webbplatsen, Del B är design av databasen, Del C är implementation i PHP/xhtml. Delprojekten B och C är examinationsmoment, där B måste vara godkänt innan C får påbörjas. För mer information se fliken examination.

Del A

Läs igenom kravspecifikationen för hela projektet (nedan) och skissa lösningsförslag. Identifiera funktionskrav och datakrav. Skissa (med papper och penna) alla webbsidor som behövs.

Dels ska denna lösningsskiss visa den valda grafiska profilen (använda stiltyper samt ev. logotyp, vilken känsla ska sidorna inge?) och dels generell layout på de viktigaste sidorna. Det är viktigt att ha tänkt igenom webplatsens funktionalitet så att ni får med alla sidor som behövs. Webbsido-skisserna ska visa hur produkterna kommer presenteras på webbplatsen och hur sökningen kommer att se ut för användaren. Sidornas utseende skissas på papper och sekvensen av sidor beskrivs.

Del A har ingen redovisning, men det är viktigt att ni genomför den för att resten av projektet ska fungera.

Del B

Gör ett ER-diagram enligt datakraven från Del A. Tänk noga efter vilka entitetstyper och sambandstyper ni behöver för att kunna göra de sökningar ni vill och vilken information ni behöver lagra i databasen. Fundera speciellt över hur ni vill karaktärisera mottagare (inte för komplext). Passa på att diskutera frågor kring ER-modellen på lektionstid.

Konvertera ER-diagrammet till ett relationsschema enligt kokboken. Markera primärnycklar och främmande nycklarenligt normen på föreläsningarna.

Kontrollera sedan normalformen för de respektive tabellerna (rita ut viktiga funktionella beroenden på samma sätt som görs på föreläsningarna). Normalisera till 3NF eller BCNF om det behövs (motivera ditt val och eventuella uppdelningar).

Lämna in ER-diagram och två exemplar av relationsschemat, ett som visar främmande nycklar och ett som visar funktionella beroenden. Lämna också in exempeltabeller med exempeldata (1-2 rader per tabell) som visar hur ni tänker representera innehållet i de olika attributen. Deadline: se examinationssidan.

Tips: Läs kapitel 2-6 och 11.

Del C

Implementera din lösning enligt kraven nedan. Notera att del B måste vara godkänd innan du skapar databasen och lägger in data, så att du inte lägger ned arbete på det i onödan.

Tips: Databasen kan skapas på samma sätt som den som används i Sql-laborationen. Har man definitioner och innehåll (initialt innehåll i alla fall) på fil är det lätt att rekonstruera databasen ifall något går fel.

Tips 2: Arbeta inkrementellt: Dela upp websidornas funktionalitet i mindre delar och implementera en i taget (det är enklare att felsöka om man inte har flera ställen att leta på).

Redovisning av projektet

Projektet demonstreras för handledare senast vid det tillfälle som anges under examination. Inlämning av väl kommenterad programkod (all programkod) samt ER-och relationsschema (som ska vara godkända i förväg, se del B ovan) sker till handledaren senast det datum som anges under examination.

Krav på webbplatsen Presenttipset.com

Följande krav är tänkta att vara så tydliga som möjligt utan att tvinga alla implementationer att bli identiskt lika. Är något oklart, se till att be om en förklaring i början av projektet.
Utseende generellt

Webbplatsens målgrupp är alla de som har behov av ett presenttips, alltså en väldigt bred målgrupp. Den behöver därför ha ett enkelt men tilltalande utseende. Det är särskilt viktigt att startsidan är trevlig och tydlig.

  • En enhetlig design där det syns att alla sidor hör ihop. Notera att denna kod inte ska skrivas en gång per sida, utan på ett ställe och sedan inkluderas på varje sida.
  • Korrekt användande av XHTML+CSS för att skapa designen.
  • Alla sidor ska använda en och samma CSS-fil. Denna ska definiera färger, teckenstorlekar och liknande. Övrig layout/utseende ska också ske i CSS-filen, men är inte ett krav.
  • Både XHTML och CSS ska vara korrekt skriven och klara validering på http://validator.w3.org/ som XHTML 1.0 Transitional respektive http://jigsaw.w3.org/css-validator/ för CSS. (Detta innebär att frames inte får användas.)
Databas

För att få en mer dynamisk webbsida används en databas för att lagra och strukturera upp all data. Exakt hur databasen konstrueras beror på hur man vill att webbsidan ska fungera, men det finns några mer generella krav att hålla i åtanke, dessa presenteras här.

  • Databasen måste ha minst sex tabeller. (De flesta kommer att behöva fler)
  • Urvalskriterierna (exempelvis mottagarens relation till givaren, mottagarens intressen, osv) får vara fasta, men data som kan tänkas komma att ändras, ( kriteriernas möjliga värden, t.ex. matlagning, tennis) måste hämtas ur databasen och får inte vara fasta.
  • Databasens design får inte vara onödigt utrymmeskrävande.
  • Databasen ska innehålla (vid demonstration) ett 30-tal presenter valda så att flera kombinationer av sökkriterier ger flera svar, men alla kombinationer behöver inte finnas. Dessutom ska det finnas några försäljare och några recensioner. På minst en present ska finnas flera recensioner.
Startsida
Startsidan ska erbjuda besökaren att söka tips direkt, men ska också tydligt länka vidare besökaren till de andra sidor denne kan antas vara intresserad av. Eventuellt kan förstasidan kompletteras med "senaste inlagda tipset", "populära presenter" eller annan (sponsrad?) visning av presenttips utan sökning.
  • Startsidan ska länka till alla dina andra sidor (för administrationssidan ska den länka till eller på annat sätt erbjuda inloggning, se kraven på den sidan).
  • Startsidan ska låta användaren söka presenter, se nedan
Söka och visa presenttips

En besökare på presenttipset.com ska från första sidan ha möjlighet att fylla i ett sökformulär och söka efter passande tips. Utsökta presenttips ska presenteras i en träfflista med bara de viktigaste egenskaperna och en länk till en sida där all information för en produkt visas.

Det ingår i uppgiften att ta fram lämpliga sök-kriterier (minst 3 men överdriv inte).Tänk på att vissa presenter kan tänkas passa flera olika situationer och typer av mottagare (t.ex. kan en bukett blommor passa flera olika tillfällen och personer) medan andra presenter bara passar någon enstaka kombination av tillfälle och mottagare (snuttefilt med julmotiv passar bara som julklapp till barn). Det kan också vara så att vissa presenter passar en viss kombination av tillfälle och mottagare, men inte andra kombinationer (exvis silversked passar som dop-present till baby och även som födelsedagspresent till ungdomen som samlar inför det egna hemmet, men inte så bra födelsedagspresent till den vuxne som säkert redan har ett dussin).

  • Vid utsökning med hjälp av indata från användaren (även vid val via listboxar) ska sanering av indata göras innan databasen anropas för att undvika SQL-injection.
  • Minst tre olika sökkriterier ska användas för att karaktärisera situationen
  • För den fullständiga beskrivningen av en present krävs minst följande uppgifter:
    • Namn på presenten
    • Bild på presenten. (Ni väljer om ni vill lagra bildens adress (URL) eller själva bilden i databasen. Att lagra bilden i databasen kräver lite mer arbete men har sina fördelar.)
    • För varje försäljningsställe: namn, webbadress, ort och pris
    • Beskrivande text om presenten
    • Recensioner av denna present (se nedan).
Recensera presenter
Till varje present på presenttipset.com ska kunna finnas recensioner.
  • Recensionerna samt ett genomsnittsbetyg ska visas på den sidan där alla uppgifter om presenten finns.
  • Där ska också finnas möjlighet för besökarna att lämna en ny recension av presenten via ett formulär.
  • Recensionen ska bestå av
    • rubrik
    • recensionens text (Obs: ska kunna ta flera rader)
    • namn och e-post till den som skrivit recensionen
    • Betyg på presenten som recenseras
  • När en besökare matar in en recension ska hen kunna välja om namn och epost ska visas för andra besökare, men de ska fortfarande lagras i databasen.
  • Vid inläggning i databasen av inmatade recensioner måste indata saneras för att undvika SQL-injection.
Notera att man inte kan anta att rubriker på recensioner är unika.
Lämna förslag på presenter

Besökarna på webbplatsen ska kunna ge tips på bra presenter genom en webbsida där de kan fylla i presenttips.

  • Presenttipset ska skickas som ett strukturerat ebrev till någon av laboranterna. Uppgifterna som ska kunna lämnas i formuläret är följande:
    • rubrik
    • text, flera rader
    • försäljningsställe - namn och websida (*)
    • vem den är lämplig för och andra kategorier (*)
    • avsändarens namn
    • avsändarens e-post
    De ställen som är markerade med * är lite extra knepiga att lägga in så vi antar att användaren bara anger ett försäljningsställe och en kombination av kategorier. Sidan ska erbjuda användaren en lista över de värden som finns för varje kategori och en lista av försäljningsställen. Värdena i dessa listor ska genereras från databasen.
  • När en besökare lämnat ett tips på en present ska en webbsida med ett tack och avsändarens namn visas.

Sanering av indata är frivilligt för presenttipsen (men om ni vill ha kvar sidan bör ni nog för er egen skull lägga in det).

Administrativt gränssnitt

För att de som ansvarar för webbplatsen ska kunna underhålla databasen t ex. lägga till, radera och redigera poster krävs ett administrativt gränssnitt.

  • Den administrativa sidan ska kräva inloggning. Ni behöver INTE använda PHP-sessions för att hantera inloggning utan det räcker att Admin-sidan inte går att nå utan att passera inloggningsfunktionen. Administratörskontots namn och lösenord får hårdkodas men kan också lagras i databasen (notera att det egentligen inte har någon relation till övrig information och ska därför inte finnas med i ER-diagrammet). Du behöver inte kryptera inloggningen, lösenordet eller annan data i detta projekt.
  • Det skall via gränssnittet vara möjligt att lägga till, radera och redigera en present och ett försäljningsställe (all data som är lagrad om dem).
  • För pris och kategorier för en present behöver det inte finns någon funktion för att redigera, det behöver bara vara möjligt att lägga till och radera.
  • Om man redigerar databasens innehåll på andra sätt än via detta gränssnitt (t.ex mysql-kommandotolken eller myphpadmin) får det inte uppstå problem.

Sanering av indata är frivilligt för administrationsgränssnittet. Notera att dessa funktioner inte täcker allt som behövs för att lägga upp databasen, du väljer själv om du vill komplettera med den funktionaliteten för att kunna redigera databasen enbart via denna sida eller om du vill lägga upp databasen manuellt (t.ex. genom att skriva textkommandon, som för sql-labben).


Sidansvarig: Eva L. Ragnemalm
Senast uppdaterad: 2013-11-08