Kmom05: ORM / Databas
När databasdrivna applikationer byggs i ramverk finns olika taktiker för att integrera applikationskoden med databasen. Ett sätt är att jobba mot ett databas API som är uppbyggt av lagrade procedurer (jämför med databas-kursen). Ett annat sätt, som är vanligt i de ramverk vi har studerat, är att använda sig av ett ORM lager (Object Relational Mapping), vars syfte är att objektifiera relationsdatabasen och accessen till databasen. Det handlar alltså om att göra relationsdatabasen mer objektorienterad.
Själva grundtanken med ORM-moduler är att ge programmeraren möjlighet att jobba mot databasen med vanlig objektorienterad PHP kod via metoder, klasser och objekt. Det gränssnitt som ORM erbjuder döljer själva databasen och programmeraren behöver inte vara speciellt bevandrad i varken SQL eller hur en relationsdatabas fungerar.
Relationsmodellen och den objektorienterade modellen är två olika modeller och de har olika sätt att strukturera upp sitt innehåll. I relationsmodellen pratar vi om tabeller, kolumner och rader samt kopplingar mellan tabeller. När databasen döljs bakom ett ORM så erbjuds ett komplett objektorienterat synsätt mot databasens innehåll, fritt från SQL.
Du skall nu läsa på om ORM och välja ett ORM att jobba med samt koppla din applikation, via ett ORM, till en databas.
Detta är instruktionen för kursmomentet och omfattar cirka 20 studietimmar. Fokus ligger på uppgifter som du skall lösa och redovisa. För att lösa uppgifterna behöver du normalt jobba igenom övningar och läsanvisningar för att skaffa dig rätt kunskap och förståelse av uppgiftens alla delar. Läs igenom hela kursmomentet innan du börjar jobba.
#Labbmiljö
(ca: 1-2 studietimmar)
Du kan använda databaserna MySQL, MariaDB eller SQLite för att genomföra uppgiften. När du publicerar din applikation till studentservern så skall applikationen fungera med sin databaskoppling.
Väljer du MySQL/MariaDB så kan du använda BTHs databasserver för studenter enligt följande.
Väljer du SQLite så bör du vara bekant med den databasen sedan tidigare och du vet hur den kan publiceras till studentservern (htmlphp-kursen).
En rekommendation är att i övningarna nedan börja jobba med SQLite och när man är bekväm med att det fungerar så kan man byta över till MySQL/MariaDB då de databaserna kräver lite mer administration och hantering för att komma igång.
#Uppgifter & Övningar
(ca: 10-14 studietimmar)
Uppgifter skall utföras och redovisas, övningar är träning inför uppgifterna.
#Uppgifter
Följande uppgifter skall utföras och resultatet skall redovisas.
- Lös uppgiften “Kom igång med ett ORM i ditt PHP-ramverk”.
#Övningar
Följande övningar kan förbereda dig inför uppgiften.
- I kursrepot under
example/orm
ligger exempelkod som visar hur du kommer igång med olika ORM och ramverk. Jobba igenom valda exempel, när du har valt vilket ORM/ramverk du tänker jobba med eller testa ett par olika för att utvärdera.
#Läs & Studera
(ca: 2-8 studietimmar)
#Föreläsning
Titta igenom följande föreläsningar.
#Database ORM - Object Relational Mapping
Som en del i en Zoom-session hölls en föreläsning om “Database ORM - Object Relational Mapping” och det ger en bra introduktion till vad detta kmom handlar om.
Slides till föreläsningen “Database ORM - Object Relational Mapping”.
Som ett komplement till föreläsningen hittar du referenser längre ned i detta dokumentet under “PHP, data abstraktion och ORM”.
#Litteratur
Läsanvisningar finns generellt för begreppet ORM och de är samlade längst ned i detta dokumentet under rubriken “Resurser bra-att-ha”.
Läsanvisningarna berör olika ramverk och deras implementationer av ORM.
Läsanvisningarna berör implementationer av fristående ORM som kan användas oberoende av ramverk.
#Resultat & Redovisning
(ca: 1-2 studietimmar)
Läs instruktionen om hur du skall redovisa. Observera att denna kursen skiljer sig från hur du normalt sett lämnar in din redovisningstext.
Se till att följande frågor besvaras i texten i din rapport:
Berätta hur du tog dig an uppgiften och valde ditt ORM och den kodbas du valde att bygga uppgiften på, vad lät du styra dina val, vad valde du och vad gjorde att du slutligen valde det du gjorde?
När du kom in i ORM-modulerna och började installerade det, hur gick det? Var dokumentationen stöttande och kändes terminologin bekant sedan tidigare?
Berätta om din applikation, hur den använder databasen och hur du implementerade applikationen, dels med vilken databas och dels med vilka tekniker/lager i ditt valda ORM. Fanns det svårigheter och utmaningar i arbetet?
Vad är din uppfattning om ORM så här långt och relatera gärna till andra sätt att jobba med applikationskod mot databaser?
Vilken är din TIL för detta kmom?
#Resurser bra-att-ha
Här anges övriga resurser som kan användas för vidare studier i det som kursmomentet omfattar.
#PHP, data abstraktion och ORM
Detta stycke ger dig en generell introduktion till begreppet ORM och vad som ligger bakom hur det implementeras.
I PHP erbjuder PHP PDO ett data access lager (DAL) som är lika oavsett databas. De metoder man använder för att koppla sig mot databasen och ställa frågor är lika oavsett vilken databas som används. Man har “unifierat” gränssnittet mot olika databaser.
PDO erbjuder inte ett database access lager (DBAL) som ger möjligheten att skriva samma SQL-frågor, oavsett databas. Ett DBAL interface är databas agnostiskt och kommunicerar på exakt samma sätt, oavsett vilken databas som ligger bakom. Ett sådant gränssnitt översätter normalt SQL-frågorna så att de blir lika och fungerar oavsett underliggande databas men det är inget som applikationsprogrammeraren behöver bry sig om.
Ett lager av ORM kan bygga vidare på ett lager DBAL och låter dig behandla relationsdatabasens innehåll som objekt. Några av de vanligaste designmönster som är implementerade i ett ORM är Active record och Repository, andra varianter som kan förekomma är bland annat Table Data Gateway, Row Data Gateway samt Data Mapper. Implementationerna skiljer mellan olika leverantörer av ORM.
Läsresurser.
Wikipieda.
Designmönster för data access och object-to-relational mapping.
- Data Access Patterns: The Features of the Main Data Access Patterns Applied in Software Industry, en kort artikel om olika designmönster som finns för data access.
- Catalog of Patterns of Enterprise Application Architecture innehåller beskrivningen av flera designmönster relaterade till ett ORM, till exempel följande.
#Doctrine ORM
Resurser för Doctrine ORM.
#ReadBeanPHP ORM
Resurser för ReadBeanPHP ORM.
#Propel ORM
Resurser för Propel ORM.
#Symfony
Resurser för Symfony.
#Laravel
Resurser för Laravel.
#Yii framework
Resurser för Yii framework.
#Laminas
Resurser för Laminas.
#Revision history
- 2021-04-30: (B, mos) Lade till ORM föreläsning från Zoom och övningar.
- 2021-04-26: (A, mos) Första utgåvan.