Redovisning av kursmoment i kursen databas
Kmom01
Jag kan inte säga att jag har kommit igång med SQL i början av denna kurs. Jag har skrivit SQL till och från både i jobbet och i hobbyprojekt. Det mesta som gicks igenom var de standardfunktioner som alltid används vid kontakt med databaser. De databaser jag har vart i kontakt med tidigare är: MongoDB, MariaDB, MySQL, PostgreSQL och Microsoft SQL Server. Jag vill inte påstå att jag kan särskilt mycket egentligen men baskunskaperna finns där och när dem sviker en finns Google alltid vid ens sida.
Det gick bra för mig att genomföra uppgifterna. Det var mest bara att kötta igenom dem men det är ändå ganska ”satisfying” att skriva SQL. SQL har en otroligt tydlig struktur och det är inte särskilt svårt att förstå sig på basfunktionerna i det. Det är ett enkelt och rakt sätt att programmera.
Min TIL är att jag lärde mig mer om matematik i SQL och IN kommandot var nytt.
Nu blev det en kort text men jag tror jag besvarat alla frågor och jag kan inte komma på mer att skriva.
http://www.student.bth.se/~rasb14/dbwebb-kurser/databas/me/kmom01
Kmom02
Jag hoppade direkt på övningen MySQL och Node.js då jag redan hade node och npm installerade på min dator och server. Jag läste dokumentet och lekte sedan runt lite så att jag hade koll på hur det fungerade. Det var väldigt likt hur man kommunicerar med Postgres vilket jag på fritiden har använt en del på sista tiden i mina hobbyprojekt. Mina hobby projekt är nästan alla byggda i Node.js så jag har rätt bra koll på det. Jag använde nodejs första gången i början av 2014 och har använt det relativt flitigt under 2016/17.
Att använda javascript för att prata med databasen var väldigt enkelt speciellt efter att ha läst de exempel som fanns i uppgiften. Som jag skrev tidigare var det likt Postgres. Båda är SQL i grunden men lite annorlunda var det, i postgres blir man lite mera tvingad till att ställa in saker manuellt när man anslöt sig kändes det som. Men annars var det i princip samma och inte alls särskilt avancerat.
SQL:en börjar kännas bekväm och hanterbar jag kände att jag hade lite lite koll på SQL men exemplen och förklaringarna var bra. Lite läsande i kursmaterial och på internet så var allt frid och fröjd igen. Det jag känner att jag kommer att ha med från detta kursmoment är GROUP BY och Views.
http://www.student.bth.se/~rasb14/dbwebb-kurser/databas/me/kmom02
Kmom03
Inför detta kursmoment valde jag att bygga en fil som heter printer.js som jag använder för att skriva ut resultatet från en sql-fråga som en tabell på skärmen. Det kändes långt mycket smidigare än att hålla på och räkna hur långa strängar ska vara för hand och bygga en tabell manuellt från det som i tidigare kursmoment. Det finns säkerligen någon modul som löser detta redan men orkade inte leta och tyckte att det verkade roligt att fixa det.
Jag tycker att jag har fått till en helt okej kodstruktur i mina javascript. Det är en sak som stör mig mycket däremot och det är inställningen i eslint som säger att det måste vara en blankrad efter variabeldefinitioner. Jag tycker att man ska kunna sätta definitionen framför t.ex en loop för att vis att variabeln hör till det som kommer efter.
Exempel:
let s = ’Hej’;
for(const c in s) {
console.log(c);
}
Det känns för mig mycket mer logiskt. Jag säger inte att det är dåligt att ha det så för jag ser poängen med det men jag har skrivit kod ett tag och vet hur jag vill skriva den.
Något jag hade problem med var dessa bash script. Jag kör min databas i en dockercontainer så det var lite drygt att köra bash mot den men det gick tillslut. Anledningen till detta är att om min server skulle få för sig något häftigt så behöver jag inte göra om allt för att installera databasen igen då allt det ligger färdigt på dockerhub. Jag kör allt som är i ”produktion” så. En av mina TIL är kommunikation med terminal i en dockercontainer.
Er-modellering, något jag har velat lära mig bra länge. Jag har velat kunna det här med att ta fram databaser efter behov/krav och ha en strukturerad process där man vet vad man har gjort och hur databasens struktur kommer att vara när den är klar. En klart matnyttig övning och intressant. Det är knepigt att ta fram en databas men detta har gjort det lättare för mig att i framtiden tänka igenom vad som behövs för att nå målet med databasen utan att skapa en massa trasiga sådana innan man får ett bra resultat. Tror man behöver en del övning för att verkligen se hur det hänger ihop även med modellen men detta är för mig ett steg framåt.
http://www.student.bth.se/~rasb14/dbwebb-kurser/databas/me/kmom03
Kmom04
SQL och express är mina vänner sedan tidigare. Jag sitter en hel del på fritiden och skriver sådana webbappar och sidor. Jag vet inte riktigt om komma igång gäller för mig där. Att ha en databas i bakgrunden är nästan alltid ett tvång så fort man ska hantera annat än statiskdata. Detsamma gäller template moduler så som ejs. Det går nästan aldrig att komma undan om man ens vill komma undan det då det gör det så mycket lättare att visa information i en webbläsare.
Koden blir också kortare och enklare. All den data och sträng hantering som annars skulle vara nödvändig slipper man. Det är någon annan som gjort det och byggt en modul som jag kan använda som en svart låda och aldrig behöver titta i. När det gäller den kod som jag har skrivit så använde jag samma fil för att prata med databasen (src/bank.js) annars så hämtade jag min printer från tidigare kursmoment och använde readline för terminalklienten. Kodstrukturen i exemplen var helt okej så jag fortsatte bara med den och återanvände så mycket som möjligt och är rätt nöjd med den kodstruktur som blev.
Det känns som att jag har hyfsat god koll på hur teknikerna vi lärt oss här hänger ihop och fungerar. Jag har också sett hur ER modelleringen kan hjälpa med att bygga ett internt ”api” mot databasen, bland annat genom att hjälpa till att se vilka funktioner man bör skapa och vad som skall hanteras internt i dem vid kontakt med databasen.
Jag har i detta kursmoment och fått en större förståelse för hur transaktioner fungerar även om jag för det mesta bara kan läsa de diagram som visas och annars mest behandlar dem som en svart låda som magiskt fungerar. Detta är även min TIL.
http://www.student.bth.se/~rasb14/dbwebb-kurser/databas/me/kmom04
Kmom05
Jag gillar lagrade procedurer mer än triggers måste jag säga. Dem känns mindre magiska när man väl använder databasen. Jag håller med det som stod i någon av instruktionerna ”Det blir lätt för automatiskt och svårt att felsöka”. De lagrade procedurerna får du mer kontroll i, dessa gör också saker i bakgrunden men du vet vart dessa ”automatiska” ändringar kommer ifrån.
En lagrad procedur (stored procedure) är ett eller flera SQL instruktioner förpackade som en funktion. Dessa lagrade procedurer har in parametrar och returnerar de selects som du gör. Det den gör är att exekvera de instruktioner som du angett att den ska göra. Är det två stycken selects i den lagrade proceduren så kommer databasen genomföra två selects och du får svaren av båda.
En trigger är mer som ett event (har ni försökt modda minecraft vet ni vad ett event är) men det är något som händer före, samtidigt eller efter något annat. En trigger kan man säga är det som startar eventet när något händer. Till exempel att tabell X blir uppdaterat triggrar (startar) ett event som uppdaterar tabell Y.
Jag tycker att det är superhärligt att ha kontakt med databasen på detta sätt. Jag skapar en lagrad procedur som uppdaterar ett par tabeller som är beroende av varandra. Sedan har jag bara en SQL instruktion i JavaScriptet och jag slipper bry mig om vad olika tabeller i databasen behöver för data och i vilken ordning. Jag kan fortsätta mitt JavaScriptande och veta att sql:en kommer ta hand om det där med att exekvera i rätt ordning och stuff. Vill jag dessutom ändra hur databasen får information ändrar jag bara min procedur och låter javascriptet vara.
I eshops uppgiften gjorde jag CRUD delen, jag tänkte att jag skulle göra båda men sen tog min tid slut och klockan hade blivit lite igen. Jag såg helt enkelt till att det jag hade gjort fungerade som det skulle och kände mig sedan klar. Det gick bra att genomföra förutom en del klantfel som var snabbfixade. Småfel som oregistrerade funktioner o.s.v.
TIL: Stored procedures och triggers i SQL.
http://www.student.bth.se/~rasb14/dbwebb-kurser/databas/me/kmom05
Kmom06
Index är ett sätt att effektivisera sökningen i en kolumn. När ett index skapas så kan den valda kolumnen kopieras och behandlas på ett sätt som gör att alla rader inte behöver sökas igenom vid en fråga till databasen. Det kan vara så att indexet sorteras eller delas upp i buckets så att databasen vid en fråga kan börja söka i den delen av listan där det är mest troligt att värdet som söktes efter finns.
Jag kan se en del fördelar med att skapa funktioner i databasen. Det känns som att det bara är i lite halvspeciella fall dessa verkligen behövs, eller om databasen från början är väldigt konstig. Det finns också en riska att en hel del saker blir väldigt automagiska. Men funktioner i databasen tycker jag är skönt när man till exempel vill concata strängar. Man får då en renare select fråga.
Jag tycker att jag har bra mycket bättre koll på databaser nu än innan jag började denna kurs. Jag googlar fortfarande mycket men det blir långt mycket lättare när man har fått koll på en del termer o.s.v. Det är inget jag riktigt saknar och jag tycker denna kurs har varit bra.
Jag har tyvärr inte gjort något jag inte kunde innan när det gäller JavaScript, Node och Express. Vi har använt några bibliotek (moduler) jag inte använt förut men annars, inget nytt.
TIL: Optimering och funktioner i databaer.
http://www.student.bth.se/~rasb14/dbwebb-kurser/databas/me/kmom06
Kmom07-10
Redovisningstext för kursmoment 10.
Jag började med att göra en er dokumentation utifrån projektspecen och hoppade sedan på de andra kraven.
Krav 1 och 2
Efter att jag skapat min er-modell så började jag bygga lagrade procedurer eller plocka fram den SQL kod som löste uppdraget mot databasen. Jag lade till dessa SQL frågor och procedurer i dokumentationen där jag beskriver hur dem används och vad man kan vänta sig för svar från dem. När det var klar bestämde jag att kassörs- och rapport-applikationen skulle vara en cli medans swishappen och kundgränssnittet skulle vara webbaserat. Sedan var det bara att hacka på tills applikationerna var klara.
Krav 3
Jag började med att läsa igenom projektspecen och kopierade sedan över den till Word och började markera olika saker med olika färger för att förbereda inför er-modellerandet. När jag gjorde min modell utgick jag från kokboken men hoppade några steg som jag tyckte var lite onödiga.
Jag startade sedan er-modeleringen och började med att kategorisera de olika databasobjekten med olika färger. När jag listat ut vilka tabeller jag skulle ha så nosade jag fram de relationer som behövdes för att knyta samman tabellerna. När det var gjort ritade jag mitt första diagram och såg till att alla objekt jag valt i texten fanns med som objekt i diagrammet. Jag tilldelade sedan kardinalitet och ritade ett nytt diagram samtidigt som jag gick över till den logiska modelleringen och började testa lite i databasen.
I den logiska modellfasen sannade jag inte läge, jag använde mig av det senaste diagrammet jag ritat och skrev upp alla tabeller jag behövde och alla deras kolumner. Jag slängde mig sedan rakt in i den fysiska modelleringen och började där med att bygga en ddl för bara tabeller. Jag tänkte mig att procedurer och sådant skulle komma till när det behövdes, dem skulle också dokumenteras ordentligt då när de var klara.
Krav 4
Jag hade i er-modellerandet lämnat utrymme för detta krav. Detta innebar att när det var dags att börja med detta så var tabeller och kopplingar redan klara i databasen och endast behövde skapa lite funktioner och procedurer i databasen. Sedan var det bara att lägga till funktionerna som behövdes i berörda applikationer. Det var nästintill helt smärtfritt att implementera detta då som sagt mycket var klart redan.
Krav 5
När jag kom till krav 5 så var det redan klart. Jag hade redan lagt till alla funktioner i antingen webklienten eller cli programmet. Jag kollade dock igenom mina program och projektspecen en gång till för att se så att jag inte missat något. Om det inte finns någon hemlig uppgift ska allt vara implementerat via cli eller webklient.
Krav 6
Jag ville implementera någon typ av inloggning hela tiden då jag ville slippa sökrutor på sidor som ’min ränta’ och ’mina konton’. Om någon är inloggad så skall bara information om den personen visas och jag vet vem det är då hen är inloggad. Jag kollade runt lite på internet och hittade ett bibliotek till node som heter ’express-session’ som jag använde för mina sessions. Det var väldigt enkelt att implementera. Man får se till att inte sätta ’secure cookies’ om man testar över vanlig http bara, jag fick lära mig den hårda vägen att det inte fungerar så bra då. När någon loggar med sitt kundId och pinkod så hålls personen inloggad i 30 minuter innan personen ombedes att logga in igen.
Genomförande
Det kändes mycket till att börja med och svårt att veta vilken ände att börja i men jag började med att göra en er-modell. Personligen kändes det som rätt väg at gå då det fanns material att stödja sig på när skapandet av procedurer, funktioner och vyer startade. Det gick ganska lätt efter att er-modellen var gjord. Jag har fått in någon typ av visualisering av databasen i huvudet och kunde jobba på med att bygga applikationerna och lagrade procedurer.
Jag byggde de lagrade procedurerna först och gick sedan på att bygga applikationerna när det fanns fungerande SQL kod dokumenterad i mitt dokument så var det lätt att använde dessa SQL frågor som ett API mot databasen. Applikationerna kunde jag lägga mer tid på att få stabila när databasen redan var verifierat fungerande. Jag tror jag la ca 6 - 8 timmar på applikationerna.
Total tid tycker jag var rimlig, för mig gick det rätt snabbt men det var klurigt och helt klart ett värdigt projekt för kursen. Jag gjorde så mycket som möjligt i databasen och det ställde verkligen krav på att man gått igenom tidigare kursmoment och visste vart man skulle använde de olika teknikerna.
Avslutning
Jag tycker att det har varit en bra kurs och jag har haft ganska kul faktiskt. Jag gillar backend stuff så att peta på databaser och se till att saker och ting får rätt data passar mig. Jag har lärt mig en hel del om SQL och en del andra kunskaper har också förbättrats på vägen. En 8 av 10 tycker jag kursen är värd. Något som skulle kunna förbättras är tiden det tar för rättningar ibland. I skrivandets stund är mitt kmom6 fortfarande inte rättat.
http://www.student.bth.se/~rasb14/dbwebb-kurser/databas/me/kmom10