Att konstruera och underhålla en databas Skapa en databas Då man gjort färdig sin modell, fört över den till en databasstruktur och normaliserat strukturen så måste man realisera databasen i någon databashanterare. Exakt hur det går till varierar lite från system till system. Det mesta är emellertid gemensamt för alla system eftersom det finns definierat i SQL-standarden. Det mesta kan man i Informix dessutom göra via dbaccess och man har då ett relativt intuitivt arbetssätt via hierarkiska menyer och inmatningsformulär. Gör man antingen genom kommandot CREATE DATABASE databasnamn eller genom att i dbaccess välja först kommandot menyalternativet database och sedan menyalternativet create. I fortsättningen kommer jag inte säga något om dbaccess eftersom allt man kan göra går att göra antingen direkt genom menyval i dbaccess eller genom att skriva en SQL-sats i dbaccess. CREATE DATABASE är en Informix-utökning av SQL. Det finns inget standardiserat sätt att skapa en databas. Föreläsning 6 Bild 1 av 19 Föreläsning 6 Bild 2 av 19 Skapa en databas... Den nyskapade databasen är privat. Den som skapat den är ägare och den ende som kan manipulera den. Det ändrar man genom att tilldela andra användare av systemet rättigheter att se, söka i och eventuellt uppdatera databasens innehåll. När man skapat databasen är den tom och man måste fortsätta med att ge den en egen struktur genom att fylla på med tabeller (som ska fyllas med data), göra index (vissa automatgenereras) och lägga på restriktioner på databasen. Man kan ta bort en databas genom DROP DATABASE databasnamn, men man får bara ta bort databaser man själv skapat. DBA och användaren informix får ta bort alla databaser. De flesta systemen kan man konfigurera så att bara DBA får göra databaser och dela ut privilegier. I Informix så som vi konfigurerat systemet kan alla vara sin egen BDA. Skapa en tabell CREATE TABLE tabellnamn (Kolumndefinition, Kolumndefinition,... ) Restriktioner... Där en kolumndefinition ser ut så kolumnnamn Typ Möjligen följd av något defaultvärde och kanske även av en speciell restriktion för just den kolumnen. Några exempel: Föreläsning 6 Bild 3 av 19 Föreläsning 6 Bild 4 av 19
carnumber char(6), color varchar(10,3), type varchar(15,2), color varchar(10,3) default red, type varchar(15,2) primary key (carnumber) Föreläsning 6 Bild 5 av 19 Föreläsning 6 Bild 6 av 19 color varchar(10,3) not null, type varchar(15,2) color varchar(10,3), type varchar(15,2) references cartype(type) Föreläsning 6 Bild 7 av 19 Föreläsning 6 Bild 8 av 19
Andra operationer på tabeller create table lån ( personnummer char(11), exemplarnummer smallint, utlånad date, åter date, Tabeller tas bort genom DROP TABLE tabellnamn. Du kan bara ta bort tabeller som du själv skapat. Du kan också ändra en tabell: Genom ADD-, DROP- och MODIFY-klausuler kan man lägga till, ta bort eller modifiera det mesta. Dock få man inte ta ta bort alla kolumner, en måste finnas kvar. primary key (personnummer, exemplarnummer, utlånad) Föreläsning 6 Bild 9 av 19 Föreläsning 6 Bild 10 av 19 Skapa en vy CREATE VIEW vynamn (kolumnnamn, kolumnnamn... ) AS SELECT-sats skapar en relationsvariabel som fungerar som en tabell. Man kan t.o.m. uppdatera databasen via en vy förutsatt att man inte konstruerat den med aggregat, DISTINCT, GROUP BY eller UNION. Det är inte heller möjligt att använda alla SELECT-konstruktioner i en vy. Man kan t.ex. inte använda ORDER BY. Vyer... Vyer används dels för att bryta ner komplexa frågor till hanterbara delar och dels för att låta folk se endast speciella delar av databaser. T.ex. kan man i ett system för personaladministration låta ekonomiavdelningens personal endast ha tillgång till en vy som bara tillåter åtkomst och uppdatering av löner, medan personalen på det företagsinterna biblioteket bara ser databasen genom den vy som hanterar lån av böcker. Vyer utplånas med DROP VIEW vynamn. Föreläsning 6 Bild 11 av 19 Föreläsning 6 Bild 12 av 19
Index Index, skapa... Index skapas med Index är speciella datastrukturer som är till för att effektivisera sökandet i stora system. Man har i princip två sätt att organisera index: Trädindex, där nycklar eller de delar av nycklarna som låter en skilja mellan poster lagras. Det effektivaste sättet för att få överblick och dessutom kunna räkna upp delar av data i nyckelordning. Hashtabeller, där nycklarna transformeras så att enkla beräkningar ska leda snabbt till den aktuella posten genom snabba tabellslagningar. Det snabbaste sättet för att söka efter enstaka poster, men tillåter inte uppräkning i ordning. Båda sätten ger naturligtvis extra redundans, men detta är nödvändigt för att snabba upp sökningarna. Samma datafil kan indexeras med flera olika index, organiserade på olika sätt. CREATE INDEX indexnamn ON tabellnamn (kolumn,... ) Ex.: CREATE INDEX bossindex ON employee (manager) Ex.: CREATE UNIQUE INDEX bossindex ON employee (manager) (vilket inte skulle gå eftersom flera har samma chef) Då man skapar hash-index måste man också tillhandahålla den funktion som används för att transformera nycklarna. Index skapas automatiskt för nycklarna i tabellerna. Index kastas bort med DROP INDEX indexnamn Föreläsning 6 Bild 13 av 19 Föreläsning 6 Bild 14 av 19 Accessrättigheter På databasnivå (man måste ha valt en databas) CONNECT GRANT RESOURCE TO användarnamnlista DBA På tabellnivå GRANT uppräkning ON tabellnamn TO användarnamnlista GRANT uppräkning ON tabellnamn TO användarnamnlista WITH GRANT OPTION Accessrättigheter... Där uppräkning är en eller flera av ALL då får uppräkningen innehålla bara detta värde INSERT DELETE SELECT UPDATE Ex.: GRANT SELECT ON elever TO PUBLIC GRANT SELECT,INSERT,UPDATE ON deltar TO serafim, kjellq GRANT SELECT,UPDATE(datum, resultat) ON laborationer TO serafim, tsu, md96-osv Föreläsning 6 Bild 15 av 19 Föreläsning 6 Bild 16 av 19
Accessrättigheter... Om man nu har givit t.ex. UPDATE-rättighet med GRANT OPTION till Kalle och han delegerat vidare Kalle Pelle Stina Johan kan Kalle kapa listan var som helst genom t.ex. REVOKE UPDATE ON laborationer FROM Stina varvid även Johan förlorar sina (UPDATE-)rättigheter. Har Kalle och de andra dessutom delegerat vidare med GRANT OPTION kan vem som helst rycka undan rättigheterna var som helst efter sig själv. Utökningar av servern Eftersom man inte kan täcka in alla databasbehov i en generell programvara har man olika möjligheter att utöka funktionaliteten. Stored procedures är procedurer och funktioner skrivna i ett speciellt programspråk, ofta kallat SPL (stored procedure language). Språket tillhandahåller speciella datastrukturer och möjligheter till iteration. Inbäddning, en möjlighet att skapa program som hanterar SQL-satser där programmen skrivs i vanliga programspråk, t.ex. C, C++, ADA, COBOL, Java. Man tillhandahåller en mängd möjligheter till konvertering mellan databashanterarens datastrukturer och det aktuella programspråkets datastrukturer. speciella rutinbibliotek (eller klassbibliotek) för att direkt koppla program skrivna i vanliga språk till databasen. Vanligt för språk som C++ och Java. I Java finns ett speciellt klassbibliotek som kallas JDBC (Java DataBase Connection). Microsoft har en egen lösning ODBC. Föreläsning 6 Bild 17 av 19 Föreläsning 6 Bild 18 av 19 Utökningar av servern... Informix har en egen lösning som tillåter användarna att t.o.m. specificera en egen utökning med egna datastrukturer och egna lösningar för indexering. Det finns lösningar för effektiv hantering av HTML-sidor, kartografi och allt möjligt annat. Med den nya SQL3-standarden finns möjlighet att också övervaka, med hjälp av s.k. triggers att inga felaktiga data kan matas in till databasen. De kan användas för all slags övervakning automatisk beställning av en vara då mängden når den s.k. brytpunkten är en möjlighet. Man kan även deklarera sina egna datatyper och operationer på dessa. Denna nya typ av databashanterare arbetar efter en ny modell som kallas objektrelationsmodell. Föreläsning 6 Bild 19 av 19