Opgavesæt 7: Databaseprogrammering med SQL

(fra opgavesæt af Martin Elsman)


I denne øvelse skal du igen benytte sproget SQL (Structured Query Language) til at oprette tabeller i MySQL-databasen som er blevet oprettet til dig på ITCs netværk.

Opgave A (10 procent)

Opret en funktion executeSQL() som har argumentet $strSQL og som kan
1) oprette forbindelse til din database
2) udskrive en fejlmeddelse hvis forbindelse ikke opnås
3) sende en SQL-kommando $strSQL til databasen.
4) udskrive en fejlmeddelse hvis SQL-kommando ikke afvikles.
5) lukke forbindelsen igen efter brug.

Gem funktionen i w2/functions_db.inc og husk at inkludere den i de næste opgavers scripts.

Opgave B

I de næste opgaver skal du skrive scripts med hver en SQL-kommando til at skabe tabeller indeholdende et udpluk af en gymnastikforenings aktiviteter. Du skal anvende funktionen fra opgave A.

 

Opgave B1 (10 procent)

Tabellen gf_kurser

Konstruer en tabel gf_kurser ved brug af SQL-kommandoen create table. Tabellen skal have to kolonner:

Du skal konstruere tabellen således at databasen sikrer
(1) at et af felterne sættes til at være primærnøgle,
(2) at felterne kursus_id og kursusnavn ikke er tomme.

Indsæt mindst fem kurser i tabellen med SQL-kommandoen insert. Du skal selv finde på kursus_id'er for kurserne du indsætter. Undersøg hvad der sker hvis du prøver at indsætte to kurser med samme kursus_id i tabellen.

Gem scriptet i oevelse7/gf_kurser.php

 

Opgave B2 (10 procent)

Tabellen gf_personer

Du skal nu kontruere en tabel gf_personer med fire kolonner: Du skal konstruere tabellen således at kolonnerne person_id og navn er ikke-tomme (not null). Yderligere skal kolonnen person_id være en primær-nøgle (primary key). Indsæt nu med SQL-kommandoen insert trænerne knyttet til kurserne i tabellen gf_kurser; find selv på nogle navne,m.m. og person_id's for personerne.

Gem scriptet i oevelse7/gf_personer.php

Opgave B3 (30 procent)

Tabellen gf_kursusansvar

Denne tabel skal indeholde tre kolonner:

Find selv en passende datatype til hver af felterne.
Du skal konstruere tabellen således at periode-kolonnen kræver at data indsættes.

Indsæt data i tabellen med SQL-kommandoen insert for et udpluk af gymnastikforeningens kurser i denne og den næste periode.

Gem scriptet i oevelse7/gf_kursusansvar.php

Følgende select-kommando kan bruges til at skabe et overblik over gymnastikforeningens kurser i en givet periode (i eksemplet er anvendt 'F2003'):


  select gf_kurser.kursus_id, gf_kurser.kursusnavn,
         gf_personer.navn as ansvarlig
    from gf_kurser, gf_personer, gf_kursusansvar
   where (gf_kurser.kursus_id = gf_kursusansvar.kursus_id
          and gf_personer.person_id = gf_kursusansvar.person_id
          and periode = 'F2003');

Vis resultatet fra denne select-kommando i en fil oevelse7/kurser_F2003.php.

kurser_F2003.php skal generere det relevante HTML for visning af oplysningerne.
Anvend erfaringerne fra de tidligere opgavesæt: anvendelse af writeHTMLHeader m.fl og læs - igen? - om mysql_fetch_row på www.php.net.
Prøv evt at finde ud af hvordan du kan få MySQL til at medsende feltnavne (- dette er en ekstraopgave)

Opgave C (40 procent)

I denne opgave skal du konstruere tabeller til registrering af publikationer fra IT-højskolen.

Tabellen itu_person

Du skal kontruere en tabel itu_personer (svarende til gf_personer i ovenstående opgave):

Gem scriptet der udfører jobbet i oevelse7/personer.php

 

Tabellen itu_publikationer

Først skal du konstruere en tabel itu_publikationer med følgende kolonner: Konstruer tabellen med kolonnen publ_id som en primær-nøgle (primary key) og med "NOT NULL AUTO_INCREMENT" føjet efter angivelsen af datatype. MySQL vil da sikre at et publikationsnummer bliver tilknyttet hver publikation og at forskellige publikationer får tildelt hver deres publikationsnummer.

Gem scriptet der udfører jobbet i oevelse7/publikationer.php

Tabellen itu_forfattere

Bemærk at der til tabellen itu_publikationer ikke er knyttet nogen forfatterkolonne. I stedet skal du konstruere en tabel itu_forfattere, som knytter itu_personer til publikationer. Grunden til at datastrukturen ønskes konstrueret således er at der kan være flere forfattere knyttet til hver publikation og at der til hver person kan være knyttet flere publikationer (der er tale om en mange-til-mange-relation.) Tabellen itu_forfattere skal indeholde følgende kolonner:

Indsæt tre eller flere publikationer i databasen og knyt dem til nogle personer i tabellen itu_personer.

Gem scriptet til oprettelse af tabellen og indsættelse af data i itu_forfattere i en fil oevelse7/forfattere.php

Endelig skal du opskrive en select-kommando til at hente publikationer fra en given måned ud af databasen. Gem dette script i en fil oevelse7/select.php


mejner@it-c.dk