- 1. Database APIs
- 1.1 Database System Architectures
- 1.2 Database APIs
- 1.3 Object Persistence and ORMs -> Slide 50 trekt uw plan xoxo
- Summary
- 1.4 Exercise in Python
Alle veraantwoordelijkheid ligt bij een centrale server. Zeldzaam , duur en moeilijk te onderhouden.
Gericht op het ontkoppelen van de gencentraliseerde architectuur. Combineren van de computeer kracht van de server en flexibiliteit van de client.
Meerdere varianten -> bv: two-tier (client-server)
UI logica en business logica op client. Database logica op server.
Veel zwaarder voor de client.
Enkel UI logica op client.
Bussiness en database logica worden uitgevoerd op de server
three-tier (client-server-database)
applicatie logica ontkoppeld van de database logica
Applicatieserver en databaseserver kunnen meerdere fysieke servers zijn.
Applicaties maken gebruik van API's om te communiceren met de database. Deze API's worden aangeboden door het DBMS.
API laat toe om de database te manipuleren en te bevragen.
Deze zijn meerste geimplementeerd om te werken over een computer netwerk.
Doel API?: Het blootstellen van de functionaliteit van het DBMS aan bepaalde partijen(applicaties).
DBMS leveranciers bieden hun eigen proprietary API aan. DMBS specifiek
Nadeel: applicatie moet weten welke DBMS gebruikt wordt. (vendor lock-in) -> DBMS vervangen = applicatie herschrijven.
Hiervoor zijn generieke API's ontwikkeld die onafhankelijk zijn van het DBMS. -> makkelijk om te schakelen tussen DBMS.
Embedded API: API is deel van de applicatie code. -> applicatie code en database code zijn 1 geheel.
- SQL precompiler
Voordelen:
- Pre-Compiler doet syntax check
- Pre-Compiler kan early binding doen -> helpt genereren van efficiente code
Nadelen:
- Moeilijker te onderhouden code
Embedded API's zijn niet populair.
Voorbeeld: SQLJ
Call-level API: Sturen SQL instructies naar de database via directe API calls.
Voorbeeld: ODBC, Python pyodbc, ...
SQL binding is het proces waarbij SQL-code wordt vertaald naar een lager niveau van representatie dat door het Database Management Systeem (DBMS) kan worden uitgevoerd. Dit proces omvat verschillende belangrijke stappen:
-
Validatie van Tabel- en Veldnamen: Het systeem controleert of de in de SQL-query gebruikte tabellen en velden bestaan in de database.
-
Controle op Toegangsrechten: Het systeem verifieert of de gebruiker of client voldoende rechten heeft om de gevraagde operatie uit te voeren.
-
Genereren van een Queryplan: Het DBMS stelt een plan op om de fysieke data op de meest efficiënte manier te benaderen. Dit omvat het kiezen van de beste manier om tabellen te joinen, indexen te gebruiken, en de volgorde van operaties te bepalen.
De termen "early binding" en "late binding" verwijzen naar het tijdstip waarop deze binding plaatsvindt:
-
Early Binding: At Compile Time
- Gaat enkel als de API embedded is met precompiler
- performanter
- syntax check
-
Late Binding: At Runtime
- meer flexibiliteit
- meer kans op syntax en authorisatie fouten
- moeilijker app testen
- minder performant -> query plan moet elke keer opnieuw gemaakt worden
- Microsoft
- uniforme interface voor verschillende DBMS
- 4 componenten:
- ODBC API -> call-level API -> voor de applicatie
- ODBC Driver Manager -> moet juiste driver kiezen voor DBMBS
- Database driver -> collectie van routines die de echte code om met de database te communiceren bevatten
- Service Provider Interface(SPI) -> interface tussen driver manager en driver -> een soort adapter waardoor alle soorten driver kunnen gebruikt worden
Nadelen:
- Microsoft native
- C gebaseerd
- tussenlaag zorgt voor performantie verlies
Opvolger van ODBC die uniform toegang biedt tot verschillende data bronnen met COM (Component Object Model) technologie.
Support voor object databanken, spreadsheets, ...
Probeert Universele Data Access te bieden.
ADO voorziet een programmer friendly model bovenop OLE DB.
OLE DB en ADO samengevoegd.
Toegang via data providers.
Call-level API voor Java.
Inspireerd door ODBC
Object oriented
database connections, drivers, queries and results are thus all expressed as objects, based on uniform interfaces and hence exposing a uniform set of methods, no matter which DBMS is utilized
Nog veel bla bla valaf slide 32
Embedded API voor Java.
precompiler:
- converteert naar java code
- doet syntax check
- parameters doorgeven met :arg
- geen compile time checking bij late bindinga parameters
Geen success:
- geen support dynamic SQL
- veel overhead voor dev
Voorbeeld: jOOQ, QueryDSL, Microsoft LINQ, Python SQLAlchemy
Voordeel:
- embedded sql in pure java -> geen precompiler nodig
- code generator die database schema omzet naar java code
- deze kun je dan querying in java code
- Standaard java compiler doet syntax check
String sql = create.select(BOOK.TITLE, AUTHOR.NAME)
.from(BOOK)
.join(AUTHOR)
.on(BOOK.AUTHOR_ID.equal(AUTHOR.ID))
.where(BOOK.NUM_PAGES.greaterThan(100))
.getSQL();
Ruby on Rails -> ActiveRecord
.NET -> Entity Framework
Python -> SQLAlchemy
Technology | Embedded or Call-level | Early or late binding | Objects in host programming language represent | Data sources | Other |
---|---|---|---|---|---|
JDBC | Call-level | Late binding | A resultset with rows of fields | Mainly relational databases, though other structured tabular sources possible as well | Java-based technology, portable, still in wide use |
SQLJ | Embedded | Early binding | A resultset with rows of fields | Relational databases supporting SQL | Java-based technology, uses a precompiler, mostly outdated |
Language-integrated Query Technologies | Uses an underlying call-level API | Uses an underlying late-binding API | A resultset with rows of fields, sometimes converted to a plain collection of objects | Relational databases supporting SQL or other data sources | Examples: jOOQ and LINQ, works together with another API to convert expressions to SQL |
OLE DB and ADO | Call-level | Late binding | A resultset with rows of fields | Mainly relational databases, though other structured tabular sources possible as well | Microsoft-based technology, backwards compatible with ODBC, mostly outdated |
ADO.NET | Call-level | Late binding | A resultset with rows of fields provided by a DataReader, or a DataSet: a collection of tables, rows, and fields, retrieved and stored by DataAdapters | Various data sources | Microsoft-based technology, backwards compatible with ODBC and OLE DB |
Enterprise JavaBeans (EJB 2.0) | Uses an underlying call-level API | Uses an underlying late-binding API | Plain Java entity Beans as the main representation | Mainly relational databases, though other structured tabular sources possible as well | Java-based technology, works together with another API to convert expressions to SQL |
Java Persistence API (JPA in EJB 3.0) | Uses an underlying call-level API | Uses an underlying late-binding API | Plain Java objects as the main representation | Mainly relational databases, though other structured tabular sources possible as well | Java-based technology, works together with another API to convert expressions to SQL |
Java Database Objects (JDO) | Uses an underlying call-level API | Uses an underlying late-binding API | Plain Java objects as the main representation | Various data sources | Java-based technology |
ORM APIs (ActiveRecord, Entity Framework) | Uses an underlying call-level API | Uses an underlying late-binding API | Plain objects defined in the programming language as the main representation | Relational databases | Various implementations available for each programming language |
Oplossing staat Hier
Er staat overal een mac connectie string gelieve deze aan te passen op windows naar de juiste string