Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10:...
-
Upload
tania-peters -
Category
Documents
-
view
215 -
download
0
Transcript of Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10:...
![Page 1: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/1.jpg)
• Mapping OO ontwerp naar DB• Optimaliseren van DB ontwerp (normalisatie, indexeren, enz)
H10: PersistentieMSO, 2e deel: Ontwikkeling
![Page 2: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/2.jpg)
Persistentie
Org. term: “persistence”, to pesist te blijven bestaan.
Een applicatie kan ineens crashen (bugs, stroom uitval, enz).
Je wil je data redden!
Persistentie onderdeel van je applicatie die data op een permanente medium opslaat. FilesDatabase
2
![Page 3: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/3.jpg)
Hoe belangrijk ?
Erg belangrijk in een bedrijfsapplicatie zijn data vaak erg waardevol.
Omdat je app kan op ieder moment crashen, in de praktijk wordt data vaak na iedere “save/submit” van de klant ook direct in de db opgeslagen.
3
![Page 4: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/4.jpg)
Uitdaging
4
Betrouwbaargeen data verlies of stukbackup, rollback
Prestatie (performance) snel je data te kunnen querien / updaten
Concurrentie apps met meerdere cliënten zijn nu gewoon.
![Page 5: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/5.jpg)
Concurrentie ACID transacties
5
“Atomic” een transactie wordt nooit half uitgevoerd (volledig of helemaal niet).
“Consistent” een transactie die de DB’s constraints zou breken wordt geweigerd.
“ge-Isoleerd” tussen toestanden van een transactie zijn niet door andere transacties zichtbaar.
“Durabel” als een transactie voltooit, effect op DB is persistent.
![Page 6: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/6.jpg)
File vs DB
6
Filegoedkoopminder boilerplateje zou rollback, query, concurrentie, enz zelf moeten
programmeren (voor zover nodig)geschikt voor kleine apps
DB andersom
![Page 7: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/7.jpg)
Relationeel DB
7
Meest gebruikte DB relationeel bewezen technologie.
In wiskunde, een relatie R : A×B×C is een verzameling van tupels uit A×B×C zoals:
{ (a1,b1,c1), (a2,b2,c2) }
Een tabel is een relatie:A B C
a1 b1 c1
a2 b2 c2
![Page 8: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/8.jpg)
Typische architectuur
8
Presentatie (User Interface) laag
Bedrijfslogica (Probleemdomein /PD )
laag
Persistentie (Data Access
Management / DAM) laag
DB
Klant Product*bestelt
OrderNr KlantID Naam Staat Tax
239 1035 Black MD 0.05
241 1123 William CA 0.08
290 1123 William CA 0.08
237 2242 Berry DC 0.06
234 2242 Berry DC 0.06
save, load, query
![Page 9: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/9.jpg)
Impendance mismatch…
9
Je ontwerpt met UML, en implementeert in een OO taal.
Echter, de meeste DB technologieën zijn relationeel.Data zijn in tabellen georganiseerd.Geen direct ondersteuning voor het opslaan van
objecten.
Oplossing ?Zelf de mapping implementeren ? veel werk!Object-relationele DBOO DBMapping frameworks
![Page 10: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/10.jpg)
Entity Relationship (ER) Diagram
10
KlantID {PK}NaamLeeftijd
ProductID {PK}NaamPrijs
*bestelt
ID Naam Leeftijd
10 Bob 6
11 Patrick 7
Klant
ID Naam Prijs
1 Appel 10
2 Peer 15
Product
KlantID ProdID
10 1
11 1
11 2
Bestelling
![Page 11: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/11.jpg)
ERD en klasse diagram
11
KlantNaamLeeftijd
ProductNaamPrijs
*bestelt
KlantID {PK}NaamLeeftijd
ProductID {PK}NaamPrijs
*bestelt
• Impliciet ID• Navigatie
• Expliciet PK• Geen concept van navigatie
![Page 12: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/12.jpg)
ERD en klasse diagram
12
AutoBouwjaar
ProductNaamPrijs
AutoID {PK}Bouwjaar
ProductID {PK}NaamPrijs
0..1
is extensie van traditioneel ERD kent geen inheritence.
AutoNaam = “Toyota”Prijs = 2000 €Bouwjaar = 2000
1
ID Naam Prijs
1 Appel 10
2 Totoya 2000
3 Toyota 5000
ProductID Bouwjaar
200 2000
210 2004AutoID ProdID
200 2
210 3
Auto_Product
Auto
![Page 13: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/13.jpg)
Nog meer vraagstukken…
13
PersoonNaam = “Bob”Leeftijd = 6
ID Naam Leeftijd
10 Bob 6
11 Octo 7
PersoonNaam = “Octo”Leeftijd = 7Vrienden
Persoon
Persoon
Persoon
• Hoe sla je een complexe object “Octo” op in tabellen ? Hoe haal je het terug?
• Navigatie door objecten vs relationele query.
• Hoe zit het met object encapsulatie?
![Page 14: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/14.jpg)
Zelf doen…
14
PersoonNaam
heeft vrienden
*
PersoonNaam = “Octo”Vrienden
Persoon
Persoon
PersoonDAOfind(id) : Persooninsert(persoon)getVrienden(id) : Collection<Persoon>
DB
*
![Page 15: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/15.jpg)
Zelf doen…
15
PersoonNaam = “Octo”Vrienden
Persoon
Persoon
PersoonDAOfind(id) : Student insert(persoon)getVrienden(id) : Collection<Persoon>
DB
find(id) { qry = “select * from PERSOON where ID = ” + id result = connection.executeQry(qry) return new Persoon(result.getString(“Naam”)) }
geef een plat object terug!
Navigatie nu indirect via deze.
![Page 16: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/16.jpg)
Object-Relationele DB / ORDB
16
CREATE TYPE Klant UNDER Persoon( lidnr INT)
CREATE TYPE Persoon AS OBJECT ( Naam CHAR(20) Vrienden SET (REF Persoon) )
CREATE TABLE PERSOON OF TYPE Persoon
INSERT INTO PERSOON VALUES (Klant (“Bob", 123, 10))
SELECT p.Vrienden FROM Persoon p WHERE p.Naam = “Bob
![Page 17: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/17.jpg)
Object-Relationele DB / ORDB
Relationele DB, uitgebreid met OO concepten:User Defined Type classInheritenceREF object IDIngebouwde navigatie auto.eigenaar.vriendenSET (van REFs) to represent navigable OO one-to-
manyZoals in SQL 1999Producten: Oracle, PostgreSQL
Niet native in bijvb. Java. Je zou je DAO nog steeds zelf moeten bouwen…maar minder ingewikkeld.
17
![Page 18: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/18.jpg)
Java Persistence Architecture / JPA
javax.jpa, implementatie: Apache OpenJPAEntity manager gratis DAO
Je moet nog een “mapping” specificeren…
18
EntityManager em = get …
em.getTransaction().begin()
em.find(Persoon.class, 20)
em.persist(bob)
em.getTransaction().commit()
![Page 19: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/19.jpg)
Object-Relationeel Mapping /ORMIn welke tabel sla je objecten van klasse C op ?In welke kolommen sla je de attributen van je object?
19
@Entity@Table(name=“PERSOON”)class Persoon {
@Id @Column(name=“ID”) private int id @Column(name=“NAAM”) private String naam
@ManyToMany private Collection<Persoon> vrienden ….
getId() { return id }getNaam() { return naam }getVrienden() { return vrienden }
@JoinTable( ….)
![Page 20: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/20.jpg)
ORM …
Je moet ook nog een persistence descriptor maken. In een XML bestand, specificeer:Waar is je implementatie van EntityManager?Waar is de DB, hoe maak je verbinding met DB?Welke klassen neem je mee in de O/R mapping?
Nog steeds gedoe, maar je hebt nu veel minder boiler plate…
Vergelijkbaar technologie: ‘ORM framework’ zoals Hibernate.
20
![Page 21: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/21.jpg)
OO DB
Zoals DB4OEr is geen relationele mappingObjecten zijn ‘direct’opgeslagen.
21
PersoonNaam = “Octo”Vrienden
Persoon
Persoon
ID Naam Prijs
1 Appel 10
2 Peer 15
ID Naam Leeftijd
10 Bob 6
11 Patrick 7
![Page 22: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/22.jpg)
OO DB
Code is schoner :
OODB of RDB? Coding overhead is belangrijk, maar er zit nog meer … - later.
22
db = Db4o.openFile(“MijnOODB”)
db.get(new Persoon(0,”Bob”))db.set(octo)
List <Persoon> result = db.query( …. p.leeftijd >= 5)
db.close()
native query in Java … goed of slecht ?
![Page 23: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/23.jpg)
Terug: OODB of RDB ?
Medische historie van een persoon wat willen we zien?Adres, lijst van klachten, lijst van voorgeschreven
medicijnen.lijst of tabel achtige informatie makkelijk met een joint op
RDB.
Je wil een rijke structuur OO, of ORDB
23
historie
klacht klacht klacht
arts
aantekening
medicijn
medicijn
![Page 24: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/24.jpg)
OODB of RDB ?
Recursieve navigatie …
Je moet complexe objecten persisten, je doet veel navigatie OODB is beter en sneller.
Platte objecten, je doet vaak query op basis van data-domein (ipv navigatie) RDB
24
PersoonNaam = “Octo”Vrienden
Persoon
Persoon
geef alle vrienden van vrienden van x
![Page 25: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/25.jpg)
ORDB vs OODB
ORDB Eigen (uitgebreid) query taal (SQL)ondersteunt zowel navigatie en SQL query
OODBZoals in DB40:
geen abstracte query taalIntegreert goed met Java
Voorstellen voor query taal: Xpath, CTL
25
![Page 26: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/26.jpg)
Verbeteringen op je ontwerp
Op je db-schema: normalisatie en de-normalisatie
Op fysieke dataontwerp : indexing en clustering
26
ID Naam Prod ProdNaam
1035 Bob 555 Appel
1123 Patrick 444 Peer
2242 Octo 111 Aardbei
444 Peer
Data redundatie niet zuinig, en leid ook tot problemen en anomalieën.
![Page 27: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/27.jpg)
Normalisatie
Transformatie op je tabellen om data redundantie te minimaliseren geen informatie verlies!
1NF .. 3NF
27
ID Naam Prod ProdNaam
1035 Bob 555 Appel
1123 Patrick 444 Peer
2242 Octo 111 Aardbei
444 Peer
1NF : geen herhalende groepen, en heeft een primaire sleutel.
leidt tot problemen met query en joint.
![Page 28: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/28.jpg)
Identificeer attribuut-afhankelijkheden
In een tabel T,
A,BC
(de combo van attributen A,B bepaalt C) als aan de hand van de waarden van A en B kunnen we de waarde van C in T bepalen.
28
ID Naam Prod ProdNaam
1035 Bob 555 Appel
1123 Patrick 444 Peer
2242 Octo 111 Aardbei
2242 Octo 444 Peer
Partiële afhankelijkheid redundantie.
![Page 29: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/29.jpg)
2NF
2NF: 1NF en de tabel bevat geen partiële afhankelijkheid.
29
ID Naam Prod ProdNaam
ID Naam ID Naam
555 Appel
444 Peer
ID ProdID
Tabel BESTELLING
Tabel PERSOON Tabel BESTELLING
Tabel PRODUCT
![Page 30: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/30.jpg)
3NF
Transitieve afhankelijkheid A A’B in T (Of, er is A’B waar A’ geen onderdeel is van prim.sleutel) weer redundantie.
3NF: 2NF, en geen trans. afhankelijkheden.
30
ID Naam Stad Prov
0 Bob Utrecht UTR
1 Patrick Utrecht UTR
2 Bob Amsterdam NH
Tabel PERSOON
ID Naam Stad
Stad Prov
Utrecht UTR
Amsterdam NHTabel PERSOONTabel STAD
![Page 31: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/31.jpg)
Denormalisatie
Als je app vaak naar de stad en prov van persoon x vraagt moet je nu eerst een join doen.
Denormalisatie zet het terug naar 2NF.
Overweeg de tradeoff tussen query snelheid en anomalieën tgv redundantie.
31
ID Naam Stad Stad Prov
Tabel PERSOON Tabel STAD
![Page 32: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/32.jpg)
Fisieke db-ontwerp
Uiteindelijk worden tabellen in fysieke bestanden in H-schijven opgeslagen.
De formaat en technieken van deze bestanden bepalen ook de prestatie.
Je beslist:Welk formaat ? (vb: heap, of met index)Mate van indexatie Wel of niet te clusteren
32
![Page 33: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/33.jpg)
Index
Hoe vind je persoon x in de opslag? de records een voor een aflopen
Aflopen van een index-tabel is veel sneler!33
ID Naam Stad
Tabel PERSOON fysieke opslag
0
10
15
20
ID als index
![Page 34: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/34.jpg)
Secundaire indexen
Je mag ook meerdere indextabellen introduceren…
Trade off :Extra ruimte nodig per indextabelrekentijd overhead bij update en delete
34
ID Naam Stad
Tabel PERSOONmet ID als index Geef de record van persoon x met
naam Bob moet je weer hele tabel aflopen intro “Naam” als index!
![Page 35: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/35.jpg)
Cluster
ID Naam Kind
0 Bob 100
0 Bob 105
0 Bob 107
1 Patrick 0
35
ID Naam PID Kind
Tabel PERSOON Tabel OUDER
App vraagt vaak naar joint van PERSOON en OUDER cluster.
cluster sleutel
cluster block,kan geindexeerd
![Page 36: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/36.jpg)
Cluster
niet goed als je:vaak update/delete doet vaak PERSOON afzonderlijk moet aflopen
36
ID Naam Kind
0 Bob 100
0 Bob 105
0 Bob 107
1 Patrick 0
![Page 37: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/37.jpg)
Ruimte estimatie
Hoeveel ruimte heb ik nodig medebepalend voor keuze DB engine en hardware.
Kijk ook vooruit!Stappen (met een voorbeeld)
tabel BESTELLING, 1M records
groei 15% per jaar 2M in 5 jaar tijd.
Gemiddelde ruimteverbruik per rij, of maak een schatting:ID VARCHAR(10) 10 bytesNaam VARCHAR(100) 50 bytes…Totaal 200 bytes
37
![Page 38: Mapping OO ontwerp naar DB Optimaliseren van DB ontwerp (normalisatie, indexeren, enz) H10: Persistentie MSO, 2 e deel: Ontwikkeling.](https://reader035.fdocuments.nl/reader035/viewer/2022062513/5551a0ef4979591f3c8b9ca3/html5/thumbnails/38.jpg)
Ruimte estimatie
Totaal voor tabel BESTELLING 200 * 2M bytes
Bereken ruimte overhead van indextabellenStel ID, en Postcode als indexenIn de orde van d*2M per indextabel
Andere overhead DB engine specifiek
Doe dit voor de rest van tabellen.
38