Sök på Nada    Kontakt  Webböversikt  


 

Nada

     
   
   
   
   
   
  arrow right  
   
   
   
   
   
   
   
  För handledarna  
KTH / Nada / Utbildning / Kurser / Dbtek / laborationer

Laborationer

Allmänt

  • För redovisning beställer ni tid via mail till:
    Kjell: <kjellq@nada.kth.se>
    Åsa: <aasah@nada.kth.se>
    Skriv till båda och föreslå ett antal tider.
  • Laborationsgrupperna bör bestå av två personer.
  • De två första laborationerna redovisas med den kod ni skrivit.
  • Skivregistret redovisas i två steg:
    1. Datamodell och databasstruktur redovisas innan ni fortsätter.
    2. Slutredovisning med kod och körning av programmet.

Databas för de två första laborationerna

Gemensam för laboration 1 och 2

Databasstruktur:

Employee ((name), salary, manager, department)
Sales ((department, item), volume)
Supply ((department, item, company), volume)
Supplier ((company), address)
Department ((department), floor)
Class ((item), type)

Laboration 1, SQL

SQL körs i Informix.
Logga in på dupond ("rxtelnet dupond") och starta dbaccess, det program som håller kontakt med databashanteraren.

Överst i förnstret finns en meny. I den ska du först välja databas, genom alternativet database och därefter select i den undermeny som dyker upp.

Sedan ''backar'' du med med exit och väljer query-language. Hela tiden dyker det upp nya menyer och det är ganska intuitivt vad man ska göra, utom i två fall:

  • När man formulerat sin fråga trycker man på ESC-tangenten för att hamna i den mode där man kan få frågan utförd av systemet.
  • När man behöver hjälp ställer man sig på ett menyalternativ och, utan att utföra valet, trycker på '?' (frågetecken). Då kommer hjälpmenyerna upp och man kan välja det alternativ man vill ha klarhet i. Hela tiden får man en liten hjälptext som kan vara både irriterande och förvirrande.
Man backar alltid till tidigare (ovanförliggande) nivå med exit.

OBS! att du inte behöver genomlida det dåliga gränssnittet då du skriver dina frågor. Du kan fomulera frågorna i emacs. I stället för att välja modify för att ändra i frågeformuleringen väljer du alternativet use-editor. Då frågar informix vid första tillfället om du vill köra editorn vi. Det vill du troligen inte och därför skriver du emacs, utan att radera texten vi. Du får då ett emacsfönster som måste ''dödas'' när du skrivit klart. Du editerar din fråga, sparar (ctrl-x ctrl-s och dödar emacs (ctrl-x ctrl-c) varvid du kommer in i informix igen och kan direkt välja att köra frågan.

Obs att du måste köra en äldre emacsversion på dupond. Använd emacs/20.5
(gör så här:
dupond> module rm emacs
dupond>  module add  emacs/20.5
så skall det fungera.)

Om du använder den inbyggda editorn i dbaccess så måste du dela upp frågan på flera rader eftersom editorn har begränsad radlängd.

Ett bekvämt sätt är att skriva frågan i emacs (separat fönster) och sedan klistra in i dbaccess editeringsfönster.

Ytterligare ett sätt är att spara frågan på en fil med extension .sql (t ex q1.sql) och sedan hämta den genom att, i informix frågespråksmod, välja
Query-language -> Choose
så kommer de filer upp som har ext .sql. Du måste starta dbaccess från det bibliotek där sql-filerna finns.

Databasen du skall använda heter varuhuset.

Frågor som skall besvaras:

  1. Vad är genomsnittslönen för alla anställda på varuhuset?
  2. Vad är maxlönen för anställda som arbetar på andra eller tredje våningen?
  3. Vilka företag levererar varor som endast säljs på avdelningen för skor?
  4. Vilken är den totala volymen av artiklar av typ "tekopp" som säljs på avdelningen porslin?
  5. Vilken är den totala lönesumman för de anställda som arbetar på avdelningar som har leveranser från Dagab?
  6. På vilka våningar finns det avdelningar som säljer sammanlagt mer än 100 enheter av artiklar av typen "damsko"?
  7. Vilka avdelningar har en högre genomsnittslön än hela företagets genomsnitt ?
  8. Vilken/vilka avdelning/-ar har det största utbudet av varor?
  9. Finns det något företag som levererar alla i databasen förekommande artiklar? I så fall, vad har det för namn?
  10. Vilka företag levererar mer än en typ av vara till någon avdelning på 3:e våningen?

Laboration 2, SAL

SAL körs i Cantor.
Starta med: /info/dbtek06/.cantor
Databasen du skall använda heter varuhuset.
OBS! Det är inte exakt samma datamängd här som när du kör Informix!
Skriv frågorna i Emacs och kopiera in till Canor så slipper ni skriva om frågan om det blir ngt fel.
På filen /misc/commercial/cantor/cantor.doc finns information om Cantor och dess frågespråk SAL

Frågor som skall besvaras:

  1. Vad är genomsnittslönen för alla anställda på varuhuset?
  2. Vad är maxlönen för anställda som arbetar på andra eller tredje våningen?
  3. Vilka företag levererar varor som endast säljs på avdelningen för skor?
  4. Vilken är den totala volymen av artiklar av typ "tekopp" som säljs på avdelningen porslin?
  5. Vilken är den totala lönesumman för de anställda som arbetar på avdelningar som har leveranser från Dagab?
  6. På vilka våningar finns det avdelningar som säljer sammanlagt mer än 100 enheter av artiklar av typen "damsko"?
  7. Vilka avdelningar har en högre genomsnittslön än hela företagets genomsnitt ?
  8. Vilken/vilka avdelning/-ar har det största utbudet av varor?
  9. Finns det något företag som levererar alla i databasen förekommande artiklar? I så fall, vad har det för namn?
  10. Vilka företag levererar mer än en typ av vara till någon avdelning på 3:e våningen?

Laboration 3, skivregister

Laborationen går ut på att skapa ett datoriserat skivregister.

Databasen skall innehålla information om:

  • artister som framför en viss låt
  • titlar på låtarna
  • vilka låtar som finns på en viss skiva och skivans titel
  • skivbolag som givit ut skivan och utgivningsår

  1. Gör en konceptuell modell med termmatris
  2. Gör en logisk modell
  3. Implementera databasen (du måste vara inloggad på dupond)
    Implementationen skall inkludera:

    • Primär- sekundär- och kandidatnycklar
    • Övriga restriktioner

    Du får själv lägga in data i databasen (det räcker med ett fåtal tupler i varje tabell)
    Enklast blir det om du skriver dina SQL-uttryck, som skapar tabellerna, i en fil med sufixet .sql du kan då starta dbaccess och först välja menyalternativet database->create för att skapa en ny databas.
    Du kan, då databasen skapats, hämta in dina definitioner med query-language->choose
    Du måste starta dbaccess från det bibliotek där dina .sql-filer ligger.
    För att populera tabellerna med data kan man göra på följande sätt:
    1. skriv datafilerna på följande format
      fält1|fält2|...|fältn
      fält1|fält2|...|fältn
      fält1|fält2|...|fältn
      där varje post avslutas med returslag
    2. ladda tabellen med load i dbaccess
      query-language->new
      varefter man skriver load  from "hela sökvägen" insert into tabellnamn
      (om du valt något annat tecken än "|" som avgränsare mellan tecknen måste du skriva:
      load  from "hela sökvägen" delimiter "tecknet som är avgränsare" insert into tabellnamn

      Obs att citationstecknen måste skrivas ut för att informix skall acceptera sökväg resp avgränsare.

  4. Skriv en applikation mot ditt skivregister
    Om du skriver applikationen i Java eller 4GL så skall applikationen tillåta att du söker i registret, lägger in nya skivor (med artister o s v) och tar bort skivor.
    Observera att du måste göra databasen tillgänglig för användaren md95-xxx med hjälp av grant connect to 'md95-xxx';.
    Obs att apostroferna måste skrivas ut för att informix skall acceptera namn på rätt sätt.

    Du får välja språk för applikationen själv.

Applikationsprogramet skrivs lämpligen i ett av språken 4GL, ESQL i C eller Java
På kursbiblioteket (/info/dbtek06) finns det exempelprogram du kan titta på och kanske delvis återanvända.
Du behöver inte göra något stort eller avancerat utan bara känna på hur man gör för att komma i kontakt med databasen från ett program.
Tänk på att sätta upp rättigheter så att applikationsprogrammet får komma åt databasen.
(Grant connect .... och även rättigheter på tabellnivå)
Du måste vara inloggad på dupond och använda Java 1.2.2.


 
Sidansvarig: Kjell Lindqvist, NADA< kjellq@nada.kth.se>
Uppdaterad: 2006-01-18