Samla all DDL i en fil
Vi börjar få många filer och vår DDL-kod är spridd över flera filer. Det gör att det blir allt svårare att få en samlad översikt av databasens schema. Låt oss därför städa lite i vår kod och skapa en ny fil där vi samlar all DDL-kod, en fil för att skapa databasens schema.
Spara den SQL-kod du skriver i filen ddl.sql
. Du kommer även skapa filerna insert.sql
och reset-part-3.sql
.
#Samla i få filer
Om du kikar tillbaka till reset-part-2.sql
så börjar det bli allt fler filer som innehåller DDL (skapa/modifiera schemat) och filer som lägger till data i tabellerna (insert) och filer som skapar rapporter från databasen.
Det blir lite stökigt när vi blandar DDL och DML på det viset. låt oss därför skapa ett par nya filer där vi samlar all DDL i filen ddl.sql
och alla insert i filen insert.sql
.
Vi vill minimera antalet filer som skapar/modifierar strukturen av databasen och de filer som fyller databasen med sitt innehåll. Lyckas vi med detta blir det mycket enklare att återställa databasen och det blir också mycket enklare att utveckla databasen vidare och tillföra tabeller och innehåll.
Vi vill alltså ha följande struktur på filerna som återställer databasen till det läget vi har nu.
Fil | Vad gör den? |
---|---|
create-database.sql |
Skapa om en tom databas. |
ddl.sql |
Skapa databasens schema med tabeller, vyer, mm. |
insert.sql |
Fyll databasen med grundläggande innehåll. |
dml_update_lonerevision.sql |
Utför lönerevisionen. |
Det är bra om du lyckas placera all DDL i filen ddl.sql
och alla insert-satser i filen insert.sql
. Men det är naturligtvis tillåtet med varianter, beroende av vilken kod du har att jobba med.
#Reset part 3
Du kan redan nu skapa din reset-part-3.sql
och den kan/bör se ut ungefär så här. Du kan naturligtvis modifiera den så att den blir som du vill.
-- -- Reset part 3 -- source create-database.sql; use skolan; -- source ddl-larare.sql -- source insert-larare.sql -- source ddl-alter.sql -- source dml-update.sql -- source ddl-copy.sql -- source dml-update-lonerevision.sql -- source dml-view.sql -- source dml-join.sql source ddl.sql source insert.sql source dml-update-lonerevision.sql SELECT SUM(lon) AS 'Lönesumma', SUM(kompetens) AS Kompetens FROM larare_pre; SELECT SUM(lon) AS 'Lönesumma', SUM(kompetens) AS Kompetens FROM larare;
#Tips om ddl.sql
Du kan nu börja med att skapa din fil ddl.sql
. Ett sätt är att ta det stegvis och flytta konstruktion för konstruktion och sedan testköra så att varje del fungerar. Gör små ändringar och testa att det blev rätt.
Inled filen med ett stycke där du utför DROP i rätt ordning. Det är ofta en bra sak att droppa alla tabeller och vyer överst i skriptet då man behöver droppa dem i en viss ordning för att det skall fungera.
Skapa sedan tabellerna och sist vyerna.
De filerna som innehåller DDL är följande.
Fil | Vad gör den? |
---|---|
ddl-larare.sql |
Skapa tabellen för lärare. |
ddl-alter.sql |
Uppdatera tabellen lärare och lägg till kompetensen. |
ddl-copy.sql |
Kopiera till larare_pre innan lönerevisionen. |
dml-view.sql |
Skapa vyerna v_namn_alder och v_larare. |
dml-join.sql |
Skapa vyn v_lonerevision. |
Du bör kunna lyfta ut all DDL till din nya fil, ta del för del, utan att förstöra de filer du har skapat tidigare.
Kom ihåg att du inte kan redigera dina befintliga filer utan att riskera att de förstör något du gjort i för att lösa uppgifterna tidigare i guiden. Vi behöver alltså göra nya filer, så vi inte förstör något gammalt som fungerar.
Du har ett CREATE TABLE i din fil ddl-copy.sql
, kopiera in det i din nya fil, tillsammans med en motsvarande DROP TABLE.
Du har ett par ALTER TABLE
i din fil ddl-alter.sql
, integrera effekten av dem in i motsvarande CREATE TABLE
som ligger i din nya fil. Med andra ord, använd inte ALTER TABLE i din slutliga fil utan redigera istället dina CREATE TABLE så att de motsvarar de ändringar som ALTER TABLE inför. Eventuellt behöver du då även justera dina INSERT satser. Om du gör på det viset så blir din slutliga DDL fil “snyggast”.
Du har vyer för lärare i filen dml_view.sql
, kopiera över dem.
Du har vy för lönerevisionen i filen dml_join.sql
, kopiera över den.
Dubbelkolla att din nya fil kan köras för att återskapa samtliga tabeller.
Om du får utskrifter som säger att du får varningar så kan du köra SHOW WARNINGS
efter respektive kommando. Det kan vara klokt att kika vad varningen säger, om de dyker upp.
Du har nu samlat all ddl i en fil. Det ger dig en mycket bättre översikt av ditt databas schema och det blir nu enklare av vidareutveckla och underhålla din databas.
#Fyll databasen med innehåll
Samla nu alla INSERT och UPDATE till filen insert.sql
så att du kan återfylla databasen med sitt ursprungliga innehåll.
Här är de filerna vi behöver hämta data ifrån.
Fil | Vad gör den? |
---|---|
insert-larare.sql |
Lägg till rader i tabellen lärare. |
dml-update.sql |
Förbered lönerevisionen, alla lärare har grundlön. |
ddl-copy.sql |
Kopiera till larare_pre innan lönerevisionen. |
Vi vill inte ta med de UPDATE-satser som sker för lönerevisionen, de får vi lägga till separat när databasen är återskapad med sitt schema och grundläggande innehåll.
Inled med ett stycke som gör DELETE på allt innehåll i tabellen, innan du börjar med dina INSERT. Då vet du att du alltid tömmer databasen på innehåll innan du lägger till det. Du skall alltså kunna köra filen insert.sql
både mot en tom databas och mot en databas som redan har ett innehåll och i båda fallen skall utfallet bli detsamma.
I filen insert-larare.sql
skapar vi innehållet i tabellen larare, kopiera de satserna.
I filen dml-update.sql
ser vi till att alla lärare har en grundlön, kopiera den satsen.
I filen ddl-copy.sql
kopierar du alla lärares löner till tabellen larare_pre, kopiera över den satsen.
Vi låter filen dml-update-lonerevision.sql
vara som den är, den innehåller hela lönerevisionen och vi kopierar inte över den.
Dubbelkolla att du kan köra alla kommandon, om och om igen, i filen insert.sql
.
#Kontrollera att det blev rätt
Prova nu att köra ditt skript reset-part-3.sql
och pröva även att köra de individuella filerna om och om igen.
Lyckas du med detta så skall du känna en känsla av att ha rätt bra koll på din databas, dess schema och dess innehåll.
Bra jobbat.
#Revision history
- 2022-01-04: (C, mos) Genomgången inför v2 och MariaDB.
- 2021-02-25: (B, mos) Förtydliga om hur man jobbar med ALTER TABLE.
- 2019-01-28: (A, mos) Första versionen.